Home » Archimedes archive » Zipped Apps » 6502em » !6502Em/src/6502Elk18

!6502Em/src/6502Elk18

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Zipped Apps » 6502em
Filename: !6502Em/src/6502Elk18
Read OK:
File size: 8E1D bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > 6502Em
   20master=FALSE
   30*RMENSURE 6502Support 0.00 RMRun <6502Em$Res>.65Support
   40ON ERROR PROCerror
   50REM 
   60
   70IO_Podule%=FALSE
   80
   90DIM opcode(&100), bcd(&100), code 500*1024, buffer 1000
  100DIM l%(100)
  110DIM divloop1(10),divloop2(10),divjump(10)
  120div%=0
  130LIBRARY "<6502Em$Dir>.Src.Sound6"
  140LIBRARY "<6502Em$Dir>.Src.Opcodes"
  150LIBRARY "<6502Em$Dir>.Src.Screen"
  160
  170electron%=TRUE
  180PROCassemble
  190
  200PRINT(end-start)/1024
  210OSCLI "Save <6502Em$Dir>.CodeE "+STR$~code+" "+STR$~(end+code)
  220OSCLI "SetType <6502Em$Dir>.CodeE Data"
  230
  240END
  250
  260OSCLI"LOAD <6502Em$Dir>.OS1,2 "+STR$~(memory+&C000)
  270OSCLI"LOAD <6502Em$Dir>.BASICII "+STR$~(memory+&8000)
  280
  290MODE 12
  300CALL init+code
  310PRINT"BOO"
  320
  330!pc_store=&D9CD << 16
  340
  350D%=memory : REM R3
  360CALL start+code
  370
  380END
  390DEFPROCassemble
  400PROCclearmem(code,code+200*1024)
  410R=1000 : S=1000 : T=1000
  420
  430A=4
  440X=5
  450Y=6
  460F=7
  470SP=8
  480mem=3
  490time=9
  500zpc=10
  510table=11
  520
  530a=-&100+0
  540x=-&100+4
  550y=-&100+8
  560f=-&100+12
  570sp=-&100+16
  580pc_store=-&100+20
  590T1mode=-&100+24
  600T2mode=-&100+25
  610T3mode=-&100+26
  620T4mode=-&100+27
  630T1=-&100+28
  640T1R=-&100+32
  650T2=-&100+36
  660T2R=-&100+40
  670T3=-&100+44
  680T3R=-&100+48
  690T4=-&100+52
  700T4R=-&100+56
  710screen=-&100+60
  720screenR=-&100+64
  730min=-&100+68
  740sound_timer=-&100+72
  750ifr=-&100+76
  760ier=-&100+77
  770ifr2=-&100+78
  780ier2=-&100+79
  790arc_screenstart=-&100+80
  800tamper=-&100+84
  810cursor_tamper=-&100+88
  820ROMSEL_ON=-&100+92
  830rom=-&100+96
  840ROMRAM=-&100+100
  850fe20=-&100+116
  860tape_handle=-&100+117
  870crt_regs=-&100+120
  880scratch=-&100+140
  890pal_regs=-&100+148
  900Palette=-&100+164
  910ACCCON=-&100+172
  920patch_on=-&100+176
  930pal_tamper=-&100+177
  940lastmode=-&100+178
  950fe10=-&100+179
  960tape_count=-&100+180
  970key_addr=-&100+184
  980Elatch=-&100+188
  990Eifr=-&100+189
 1000Eier=-&100+190
 1010ROMint=-&100+191
 1020speedR=-&100+196
 1030enD=-&100+192
 1040
 1050enD=-&100+200 : REM don't go past this
 1060
 1070FORp=4 TO 6 STEP 2
 1080div%=0
 1090O%=code
 1100l%=0
 1110P%=0
 1120opcode%=0
 1130[OPTp
 1140.Oa                            EQUD 0
 1150.Ox                            EQUD 0
 1160.Oy                            EQUD 0
 1170.Of                            EQUD 0
 1180.Osp                           EQUD 0
 1190.Opc_store                     EQUD 0
 1200.start_offset                 EQUD start
 1210.trace                        EQUD 0
 1220.trace2                       EQUD 0
 1230.init_addr                    EQUD init
 1240.crt_addr                     EQUD 0 ; was crt_regs
 1250.T1_addr                      EQUD 0 ; was T1
 1260.ifr_addr                     EQUD 0 ; ifr
 1270.column_counter_addr          EQUD 0 ; column_counter
 1280.ROMSEL_addr                  EQUD 0 ; ROMSEL
 1290.Palette_addr                 EQUD 0 ; Palette
 1300.speed_addr                   EQUD screen_count+4
 1310.elite_addr                   EQUD 0 ; elite
 1320.opco_addr                    EQUD opcode(0) ; opcodetable
 1330.bcd_addr                     EQUD bcd(0)
 1340.sheila_writetab_addr         EQUD sheila_writetab
 1350.sheila_readtab_addr          EQUD sheila_readtab
 1360.sound_vectors_addr           EQUD sound_buffs_addr
 1370.patch_addr                   EQUD patch_screen
 1380
 1390.init ; only called once, before code called
 1400ADR R0,0
 1410;LDR R1,opco_addr
 1420;ADD R1,R1,R0
 1430;LDR R2,bcd_addr
 1440;ADD R2,R2,R0
 1450LDR R5,sheila_writetab_addr
 1460ADD R5,R5,R0
 1470LDR R6,sheila_readtab_addr
 1480ADD R6,R6,R0
 1490MOV R3,#255
 1500.init_loop
 1510;LDR R4,[R1,R3,LSL#2]
 1520;ADD R4,R4,R0
 1530;STR R4,[R1,R3,LSL#2]
 1540;LDR R4,[R2,R3,LSL#2]
 1550;ADD R4,R4,R0
 1560;STR R4,[R2,R3,LSL#2]
 1570LDR R4,[R5,R3,LSL#2]
 1580ADD R4,R4,R0
 1590STR R4,[R5,R3,LSL#2]
 1600LDR R4,[R6,R3,LSL#2]
 1610ADD R4,R4,R0
 1620STR R4,[R6,R3,LSL#2]
 1630SUBS R3,R3,#1
 1640BPL init_loop
 1650MOV PC,R14
 1660
 1670.start
 1680STMFD R13!,{R1-R12,R14}
 1690STR R13,return_addr
 1700STR R0,roms_addr
 1710;LDR R0,crt_addr
 1720;ADR R1,0
 1730;ADD R0,R0,R1
 1740;SWI "6502_Init"
 1750
 1760;MOV R0,#&4000
 1770
 1780
 1790
 1800;STR R0,[mem,#screenR]
 1810;MOV R0,#&9C00 : ;ADD R0,R0,#&40
 1820;STR R0,[mem,#T1R]
 1830;
 1840MOV R0,R0,LSR#2
 1850STR R0,[mem,#T1]
 1860MOV R0,R0,LSR#2
 1870STR R0,[mem,#screen]
 1880
 1890;SWI "6502_Getkeyaddr"
 1900SWI "6502_GetElectronKeys"
 1910STR R0,[mem,#key_addr]
 1920
 1930ADR R0,block1
 1940ADD R1,R0,#8
 1950SWI "OS_ReadVduVariables"
 1960LDR R9,[R1]     ; screenstart
 1970STR R9,[mem,#arc_screenstart]
 1980MOV R9,#1
 1990STRB R9,[mem,#tamper]
 2000STRB R9,[mem,#pal_tamper]
 2010STRB R9,[mem,#cursor_tamper]
 2020
 2030LDR A,[mem,#a]
 2040LDR X,[mem,#x]
 2050LDR Y,[mem,#y]
 2060LDR SP,[mem,#sp] : ORR SP,SP,#1
 2070LDR F,[mem,#f]
 2080LDR zpc,[mem,#pc_store]
 2090
 2100BL recalc_wrap
 2110LDRB R0,[mem,#patch_on]
 2120AND R0,R0,#%111
 2130BIC F,F,#&FF00
 2140ORR F,F,R0,LSL#8
 2150
 2160MOV time,#0
 2170
 2180LDRB R0,fe08_read
 2190BIC R0,R0,#&81
 2200STRB R0,fe08_read
 2210
 2220ADR R0,0
 2230TST F,#%1000
 2240LDREQ table,opco_addr
 2250LDRNE table,bcd_addr
 2260ADD table,table,R0
 2270;SWI "6502_ReInit"
 2280;SWI "6502_UpdateScreen
 2290BL poke_updatepixelV
 2300BL updatescreen
 2310B fetch2
 2320
 2330.reset_bcdflag
 2340ADR R1,0
 2350TST F,#%1000
 2360LDREQ table,opco_addr
 2370LDRNE table,bcd_addr
 2380ADD table,table,R1
 2390MOV PC,R14
 2400
 2410.block1
 2420EQUD 149 : EQUD -1
 2430.block2
 2440EQUD 0 : EQUD 0
 2450
 2460.screen_count
 2470EQUD 0
 2480EQUD 0
 2490
 2500.reg_comp
 2510EQUD &F4DF << 16
 2520
 2530.trace_on
 2540MOV R12,#1
 2550STRB R12,trace
 2560MOV PC,R14
 2570
 2580.show_regs
 2590
 2600CMP zpc,#&8000 << 16
 2610MOVHS PC,R14
 2620
 2630LDRB R0,trace2
 2640CMP R0,#1
 2650BEQ trace_skip
 2660;MOVNE PC,R14
 2670
 2680;LDR R0,reg_comp
 2690;CMP R0,zpc
 2700;SWIEQ &100+ASC"X"
 2710;MOVNE PC,R14
 2720
 2730SWI "6502_Checkkdata"
 2740CMP R0,#&1F ; Insert
 2750MOVEQ R1,#1
 2760STREQ R1,trace2
 2770
 2780MOV PC,R14
 2790
 2800MOVEQ R0,#1
 2810STREQB R0,trace
 2820
 2830LDRB R0,trace
 2840CMP R0,#1
 2850MOVNE PC,14
 2860
 2870.trace_skip
 2880FNshowregs
 2890MOV PC,R14
 2900
 2910
 2920
 2930.keychk
 2940EQUD 0
 2950
 2960.fetch2
 2970
 2980LDR R0,[mem,#min]
 2990SUB R0,R0,time
 3000LDR R1,[mem,#sound_timer]
 3010SUB R1,R1,R0
 3020STR R1,[mem,#sound_timer]
 3030
 3040
 3050MOV R0,#0 : STR R0,keychk
 3060LDR R0,[mem,#min]
 3070SUB R0,R0,time ; ***
 3080LDR R1,[mem,#screen]
 3090SUBS R1,R1,R0
 3100STRGT R1,[mem,#screen]
 3110BLLE vsync
 3120
 3130LDR R0,[mem,#min]
 3140SUB R0,R0,time ; ***
 3150LDR R1,speed
 3160SUBS R1,R1,R0
 3170STRGT R1,speed
 3180BLLE speed_control
 3190
 3200; LDR R0,[mem,#T1mode]
 3210; TST R0,#%1
 3220; BEQ skip_timer1
 3230
 3240LDR R0,[mem,#min]
 3250SUB R0,R0,time ; ***
 3260LDR R1,[mem,#T1]
 3270SUBS R1,R1,R0
 3280STRGT R1,[mem,#T1]
 3290BLLE timer1
 3300.skip_timer1
 3310
 3320LDR R0,[mem,#min]
 3330SUB R0,R0,time
 3340LDR R1,[mem,#tape_count]
 3350SUBS R1,R1,R0
 3360STRGT R1,[mem,#tape_count]
 3370BLLE tape_fetch
 3380
 3390
 3400TST F,#%100
 3410BNE skip_do_interrupt
 3420
 3430;.do_interrupt
 3440
 3450LDRB R1,[mem,#Eifr]
 3460;TST R1,#%1000000
 3470;SWINE &100+ASC"6"
 3480AND R1,R1,#%01111100
 3490
 3500
 3510;AND R1,R1,#%01110000 ; ????????????????
 3520
 3530
 3540
 3550LDRB R2,[mem,#Eier]
 3560
 3570ANDS R1,R1,R2
 3580
 3590;TST R1,#%1000000
 3600;SWINE &100+ASC"6"
 3610;TST R1,#%100000
 3620;SWINE &100+ASC"5"
 3630;TST R1,#%10000
 3640;SWINE &100+ASC"4"
 3650;TST R1,#%1000
 3660
 3670;SWINE &100+ASC"3"
 3680;TST R1,#%100
 3690;SWINE &100+ASC"2"
 3700;CMP R1,#0
 3710
 3720BEQ skip_do_interrupt
 3730
 3740.do_interrupt
 3750FNdo_interrupt
 3760
 3770.skip_do_interrupt
 3780
 3790;BL keyboard MOVED TO CLI!!!
 3800BL keys2
 3810.skip_keys
 3820LDR time,[mem,#T1]
 3830;MOV time,time,LSR#15
 3840LDR R1,[mem,#screen]
 3850CMP R1,#0 : MOVEQ R1,time
 3860CMP R1,time
 3870MOVLT time,R1
 3880
 3890LDR R1,[mem,#tape_count]
 3900CMP R1,time
 3910MOVLT time,R1
 3920
 3930CMP time,#0 : MOVEQ time,#1
 3940STR time,[mem,#min]
 3950FNfetch2
 3960
 3970.interrupt ; called by CLI
 3980MOV PC,R14
 3990
 4000LDRB R1,[mem,#Eifr]
 4010;AND R1,R1,#%00110000
 4020LDRB R2,[mem,#Eier]
 4030
 4040ANDS R1,R1,R2
 4050MOVEQ PC,R14
 4060
 4070;TST R1,#%100000
 4080;SWINE &100+ASC"5"
 4090;TST R1,#%1000000
 4100;SWINE &100+ASC"6"
 4110
 4120FNdo_interrupt
 4130
 4140MOV PC,R14
 4150
 4160.F10temp
 4170EQUD 0
 4180
 4190.F10
 4200SWI "6502_Getkdata"
 4210STR R14,F10temp
 4220MOV R0,#255
 4230STRB R0,[mem,#lastmode]
 4240BL updatescreen
 4250;BL force_update_pal
 4260LDR PC,F10temp
 4270
 4280;.fetch3
 4290.keys2
 4300SWI "6502_Checkkdata"
 4310CMP R0,#&1F ; Insert
 4320MOVEQ R1,#1
 4330STREQ R1,trace2
 4340CMP R0,#10 ; F10
 4350BEQ F10
 4360CMP R0,#11 ; F11
 4370CMPNE R0,#12 ; F12
 4380CMPNE R0,#15 ; break
 4390BEQ raw_exit2
 4400MOV PC,R14
 4410
 4420.keyboard ; called by CLI
 4430
 4440MOV R0,#1 : STR R0,keychk
 4450SWI "6502_Getkdata"
 4460CMP R0,#&FF : MOVEQ PC,R14
 4470CMP R0,#&1F ; Insert
 4480MOVEQ R1,#1
 4490STREQ R1,trace2
 4500CMP R0,#10 ; F10
 4510BEQ F10
 4520CMP R0,#15
 4530CMPNE R0,#12
 4540CMPNE R0,#11 ; F11
 4550BEQ raw_exit
 4560
 4570;CMP R0,#0 ; escape
 4580;LDREQB R0,[mem,#&FF]
 4590;ORREQ R0,R0,#&80
 4600;STREQB R0,[mem,#&FF]
 4610LDRB R0,[R1,R0]
 4620CMP R0,#&FF
 4630;BEQ not_keyboard
 4640MOVEQ PC,R14
 4650
 4660;B not_keyboard
 4670CMP R0,#10 ; shift, ctrl
 4680MOVLT PC,R14
 4690LDRB R1,[mem,#ifr]
 4700ORR R1,R1,#%1 ; interrupt is from keyboard
 4710STRB R1,[mem,#ifr]
 4720LDRB R0,[mem,#ier]
 4730TST R0,#%1
 4740MOVEQ PC,R14
 4750FNdo_interrupt
 4760MOV PC,R14
 4770
 4780
 4790
 4800.mono_time
 4810EQUD 0
 4820.speed
 4830EQUD 0
 4840
 4850.speed_control
 4860LDR R0,[mem,#speedR]
 4870ADD R1,R1,R0
 4880STR R1,speed
 4890
 4900LDR R1,mono_time
 4910.mono_loop
 4920SWI "OS_ReadMonotonicTime"
 4930MOV R0,R0,LSR#1
 4940CMP R0,R1
 4950BEQ mono_loop
 4960STR R0,mono_time
 4970
 4980MOV PC,R14
 4990
 5000.vsync
 5010STR R14,vsyncR14
 5020;MOV R0,#19
 5030;SWI "OS_Byte"
 5040
 5050;LDRB R0,ldrb40_tamper
 5060;CMP R0,#1 : ;BLEQ ldrb40_update
 5070
 5080
 5090LDR R0,[mem,#speedR] ; screenR
 5100ADD R1,R1,R0
 5110STR R1,[mem,#screen]
 5120
 5130
 5140;BL trace_on
 5150
 5160;LDRB R1,screen_count
 5170;SUBS R1,R1,#1
 5180;LDRMIB R1,screen_count+4
 5190;STRB R1,screen_count
 5200LDR R0,[mem,#tamper]
 5210CMP R0,#0
 5220
 5230BEQ no_tamper
 5240MOV R0,#0
 5250STR R0,[mem,#tamper]
 5260;SWI "6502_UpdateScreen"
 5270BL recalc_wrap
 5280BL updatescreen
 5290TST F,#1 << 10 ; cursor on?
 5300;BLNE define_cursor
 5310;BLNE cursor
 5320.no_tamper
 5330LDRB R0,[mem,#pal_tamper]
 5340CMP R0,#0
 5350BLNE update_pal
 5360
 5370
 5380LDR R0,[mem,#cursor_tamper]
 5390CMP R0,#0
 5400;BLNE cursor
 5410
 5420
 5430;SUB R0,mem,#512 ; sheila
 5440;LDRB R1,[R0,#&20]
 5450;TST R1,#%10 ; teletext?
 5460;SWINE "6502_UpdateScreen"
 5470;BLNE updatescreen
 5480;ADD R0,R0,#&4D
 5490;LDRB R1,[R0]
 5500;LDRB R2,[R0,#1]
 5510
 5520
 5530
 5540LDRB R1,[mem,#Eifr]
 5550ORR R1,R1,#%100 ; interrupt is from vsync
 5560STRB R1,[mem,#Eifr]
 5570
 5580;TST F,#1 << 9
 5590;BEQ skip_exact
 5600
 5610;LDR R1,mono_time
 5620;.mono_loop
 5630;SWI "OS_ReadMonotonicTime"
 5640;MOV R0,R0,LSR#1
 5650;CMP R0,R1
 5660;BEQ mono_loop
 5670;STR R0,mono_time
 5680
 5690.skip_exact
 5700
 5710LDR PC,vsyncR14
 5720.vsyncR14
 5730EQUD 0
 5740
 5750
 5760
 5770.timer1
 5780LDR R0,[mem,#speedR] ; was T1R
 5790ADD R1,R1,R0
 5800STR R1,[mem,#T1]
 5810
 5820LDRB R1,[mem,#Eifr]
 5830ORR R1,R1,#%1000 ; interrupt is from RTC
 5840STRB R1,[mem,#Eifr]
 5850
 5860MOV PC,R14
 5870
 5880
 5890
 5900;.trace2
 5910;EQUD 0
 5920
 5930.reset
 5940;MOV R1,#1
 5950;STR R1,trace
 5960MOV R0,#15 : MOV R1,#0 : SWI "OS_Byte"
 5970MOV R0,#&10000
 5980SUB R0,R0,#4
 5990LDR R0,[mem,R0]
 6000MOV zpc,R0,LSL#16
 6010BIC F,F,#%1000 ; clear Decimal mode
 6020ORR F,F,#%100  ; set interrupt disable
 6030FNfetch2
 6040
 6050
 6060.exit
 6070MOV R0,#0
 6080.raw_exit2
 6090SWI "6502_Getkdata"
 6100.raw_exit
 6110STR A,[mem,#a]
 6120STR X,[mem,#x]
 6130STR Y,[mem,#y]
 6140STR SP,[mem,#sp]
 6150STR F,[mem,#f]
 6160STR zpc,[mem,#pc_store]
 6170LDR R13,return_addr
 6180LDMFD R13!,{R1-R12,PC}
 6190;MOV PC,R14
 6200
 6210.return_addr
 6220EQUD 0
 6230
 6240.roms_addr
 6250EQUD 0
 6260
 6270
 6280.fe08_read
 6290.casette_read
 6300EQUB 0
 6310.fe08_write
 6320EQUB 0
 6330.fe09
 6340EQUB 0
 6350;.fe10
 6360;EQUB 0
 6370ALIGN
 6380.tbuffer
 6390EQUD 0
 6400
 6410.read_tape_data
 6420LDRB R0,[mem,#Eifr]
 6430BIC R0,R0,#%10000
 6440
 6450STRB R0,[mem,#Eifr]
 6460LDRB R0,fe09
 6470;CMP R0,#ASC"*"
 6480;SWIEQ &100+ASC"h"
 6490;SWINE &100+ASC"H"
 6500;MOV R0,#ASC"*"
 6510
 6520MOV PC,R14
 6530
 6540.tape_fetch
 6550;SWI &100+ASC"b"
 6560;LDR R0,[mem,#tapeR]
 6570;MOV R0,#&3400 ; 2000000/(1200/8)~=1200 baud
 6580MOV R0,#&6000
 6590ADDS R1,R1,R0
 6600MOVLE R1,#&6000
 6610
 6620LDR R0,[mem,#Elatch]
 6630TST R0,#%110 ; casette input mode?
 6640MOVNE R1,#&100000
 6650
 6660TST R0,#%1000000 ; is *Motor on?
 6670MOVEQ R1,#&100000
 6680
 6690STR R1,[mem,#tape_count]
 6700
 6710MOVEQ PC,R14
 6720
 6730LDRB R1,[mem,#tape_handle]
 6740CMP R1,#0
 6750MOVEQ PC,R14
 6760
 6770.tape_get
 6780;SWI &100+ASC"B"
 6790SWI "XOS_BGet"
 6800MOVVS R1,#0
 6810STRVSB R1,[mem,#tape_handle]
 6820MOVVS PC,R14
 6830
 6840BCC tape_skip10
 6850
 6860MOV R0,#1
 6870MOV R2,#0
 6880SWI "XOS_Args" ; rewind tape to start
 6890MOVVS R1,#0
 6900STRVSB R1,[mem,#tape_handle]
 6910MOVVS PC,R14
 6920
 6930.tape_skip10
 6940;CMP R0,#ASC"*"
 6950;SWIEQ &100+ASC"*"
 6960
 6970CMP R0,#&FF
 6980BNE not_FF
 6990SWIEQ "XOS_BGet"
 7000CMP R0,#&FF
 7010BEQ not_FF
 7020
 7030;MOV R0,R0,LSL#4
 7040
 7050;LDRB R1,fe08_read
 7060LDRB R1,[mem,#Eifr]
 7070
 7080TST R0,#%100
 7090BICEQ R1,R1,#%1000000
 7100ORRNE R1,R1,#%1000000
 7110
 7120STRB R1,[mem,#Eifr]
 7130
 7140MOVEQ PC,R14
 7150
 7160LDRB R0,[mem,#ier]
 7170TST R0,#%1000000
 7180MOVEQ PC,R14
 7190
 7200;ORR R1,R1,#&80
 7210;STRB R1,fe08_read
 7220;SWI &100+ASC"F"
 7230B do_interrupt
 7240;B interrupt
 7250;B skip_do_interrupt
 7260
 7270.not_FF
 7280STRB R0,fe09
 7290
 7300;SWI &100+ASC"B"
 7310
 7320;LDRB R0,fe08_write
 7330;TST R0,#&80 ; receive interrupt enable bit
 7340;MOVEQ PC,R14
 7350
 7360;LDRB R0,fe08_read
 7370;ORR R0,R0,#&81
 7380;STRB R0,fe08_read
 7390LDRB R0,[mem,#Eifr]
 7400ORR R0,R0,#%10000
 7410STRB R0,[mem,#Eifr]
 7420
 7430;LDRB R12,[mem,#&C2]
 7440;MOV R12,R12,LSL#24
 7450;FNprint2(12)
 7460;SWI &100+ASC" "
 7470
 7480LDRB R0,[mem,#Eier]
 7490TST R0,#%10000 ; receive interrupt enable bit
 7500;SWIEQ &100+ASC"Q"
 7510;MOVEQ PC,R14
 7520;SWI &100+ASC"i"
 7530B do_interrupt
 7540;B interrupt
 7550;MOV PC,R14
 7560
 7570.dummy
 7580MOV PC,R14
 7590
 7600
 7610.strb8000      ; greater than 8000
 7620]
 7630IF master THEN
 7640[OPTp
 7650CMP R1,#&E000
 7660BGE strb_rom_ret
 7670CMP R1,#&C000
 7680BGE strb_rom_ret2
 7690CMP R1,#&9000
 7700BGE strb_rom
 7710]
 7720ELSE
 7730[OPTp
 7740CMP R1,#&C000
 7750BGE strb_rom_ret
 7760]
 7770ENDIF
 7780[OPTp
 7790
 7800LDRB R12,[mem,#rom]
 7810TST R12,#&80
 7820BEQ strb_rom
 7830
 7840;SUB R13,mem,#(&8000+&B000) ; 4k Private RAM
 7850;STRB R0,[R13,R1]
 7860STRB R0,[mem,R1]
 7870MOV PC,R14
 7880
 7890.strb_rom
 7900SUB R12,mem,#-ROMRAM
 7910LDRB R13,[mem,#rom]
 7920LDRB R13,[R12,R13]
 7930CMP R13,#0
 7940STREQB R0,[mem,R1]
 7950MOV PC,R14
 7960;B strb_rom_ret
 7970
 7980.romsel
 7990LDRB R12,[mem,#ROMSEL_ON]
 8000CMP R12,#0
 8010MOVNE PC,R14
 8020
 8030LDRB R1,[mem,#rom]
 8040
 8050LDR R12,roms_addr
 8060AND R2,R0,#&F ; socket number
 8070LDRB R1,[mem,#rom]
 8080CMP R2,R1:MOVEQ PC,R14
 8090AND R1,R1,#&F
 8100AND R0,R0,#&F
 8110STRB R0,[mem,#rom]
 8120SUB R13,mem,#-ROMRAM
 8130LDRB R13,[R13,R1]
 8140CMP R13,#0 ; is the bank being paged out RAM?
 8150BNE romsel2
 8160
 8170TST R0,#%10000000 ; private RAM mapped in?
 8180MOVEQ R13,#&8000
 8190MOVNE R13,#&9000
 8200AND R0,R0,#&F
 8210
 8220ADD R2,R12,R1,LSL#14
 8230ADDNE R2,R2,#&1000
 8240ADD R12,R12,R0,LSL#14 ; R0*16*1024
 8250ADDNE R12,R12,#&1000
 8260ADR R1,romsel_loop_temp
 8270STMIA R1,{R0,R4-R8,R14}
 8280ADD mem,mem,R13
 8290RSB R13,R13,#&C000
 8300.romsel_loop
 8310LDMIA mem,{R0,R1,R4,R5,R6,R7,R8,R14}
 8320STMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R14}
 8330LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R14}
 8340STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
 8350SUBS R13,R13,#4*8
 8360BNE romsel_loop
 8370SUB mem,mem,#&C000
 8380ADR R1,romsel_loop_temp
 8390LDMIA R1,{R0,R4-R8,PC}
 8400.romsel_loop_temp
 8410EQUD 0:EQUD 0:EQUD 0:EQUD 0
 8420EQUD 0:EQUD 0:EQUD 0:EQUD 0
 8430
 8440.romsel_empty
 8450ADD R13,R2,R2,LSL#8
 8460ADD R13,R13,R13,LSL#16
 8470ADD R0,mem,#&8000
 8480STR R13,[R0,#0]
 8490STR R13,[R0,#4]
 8500STR R13,[R0,#8]
 8510STR R13,[R0,#12]
 8520MOV PC,R14
 8530
 8540.romsel2
 8550
 8560SUB R13,mem,#-ROMRAM
 8570LDRB R13,[R13,R2]
 8580CMP R13,#2 ; is the bank being paged out empty?
 8590BEQ romsel_empty
 8600
 8610TST R0,#%10000000 ; private RAM mapped in?
 8620MOVEQ R13,#&8000
 8630MOVNE R13,#&9000
 8640AND R0,R0,#&F
 8650
 8660
 8670ADD R12,R12,R0,LSL#14 ; R0*16*1024
 8680ADDNE R12,R12,#&1000
 8690ADD mem,mem,R13
 8700RSB R13,R13,#&C000
 8710ADR R1,romsel_loop_temp
 8720STMIA R1,{R0,R4-R8,R14}
 8730.romsel2_loop
 8740LDMIA  R12 !,{R0,R1,R4,R5,R6,R7,R8,R14}
 8750STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
 8760;LDR R1,[R12],#4
 8770;STR R1,[mem],#4 ; store byte from ROM in main memory map
 8780SUBS R13,R13,#4*8
 8790BNE romsel2_loop
 8800SUB mem,mem,#&C000
 8810ADR R1,romsel_loop_temp
 8820LDMIA R1,{R0,R4-R8,PC}
 8830
 8840.link
 8850EQUD 0
 8860
 8870FNscreen
 8880
 8890.write_palette
 8900AND R1,R1,#7
 8910SUB R12,mem,#-pal_regs
 8920LDRB R2,[R12,R1]
 8930CMP R0,R2:MOVEQ PC,R14
 8940STRB R0,[R12,R1]
 8950
 8960LDR R1,[mem,#Palette]
 8970CMP R1,#0
 8980MOVNE PC,R14
 8990
 9000MOV R1,#255:STRB R1,[mem,#pal_tamper]
 9010MOV PC,R14
 9020
 9030.update_pal
 9040LDR R1,[mem,#Palette]
 9050CMP R1,#0
 9060MOVNE PC,R14
 9070.force_update_pal
 9080LDRB R1,[mem,#fe20]
 9090;TST R1,#%10
 9100;MOVNE PC,R14 ; mode 7
 9110AND R1,R1,#%11100
 9120CMP R1,#%11100 : BEQ twocolpal
 9130CMP R1,#%01000 : BEQ twocolpal
 9140CMP R1,#%11000 : BEQ fourcolpal
 9150CMP R1,#%00100 : BEQ fourcolpal
 9160
 9170
 9180.sixteencolpal
 9190LDRB R1,[mem,#pal_regs+0]
 9200LDRB R2,[mem,#pal_regs+1]
 9210
 9220MOV R0,#0
 9230TST R2,#%1 ; r0
 9240ORREQ R0,R0,#%1
 9250TST R2,#%10000 ; g0
 9260ORREQ R0,R0,#%10
 9270TST R1,#%10000 ; b0
 9280ORREQ R0,R0,#%100
 9290
 9300SWI &100+19
 9310SWI &100+0
 9320SWI "OS_WriteC"
 9330SWI &100
 9340SWI &100
 9350SWI &100
 9360
 9370MOV R0,#0
 9380TST R2,#%10 ; r2
 9390ORREQ R0,R0,#%1
 9400TST R2,#%100000 ; g2
 9410ORREQ R0,R0,#%10
 9420TST R1,#%100000 ; b2
 9430ORREQ R0,R0,#%100
 9440
 9450SWI &100+19
 9460SWI &100+2
 9470SWI "OS_WriteC"
 9480SWI &100
 9490SWI &100
 9500SWI &100
 9510
 9520MOV R0,#0
 9530TST R2,#%100 ; r8
 9540ORREQ R0,R0,#%1
 9550TST R1,#%100 ; g8
 9560ORREQ R0,R0,#%10
 9570TST R1,#%1000000 ; b8
 9580ORREQ R0,R0,#%100
 9590
 9600SWI &100+19
 9610SWI &100+8
 9620SWI "OS_WriteC"
 9630SWI &100
 9640SWI &100
 9650SWI &100
 9660
 9670MOV R0,#0
 9680TST R2,#%1000 ; r10
 9690ORREQ R0,R0,#%1
 9700TST R1,#%1000 ; g10
 9710ORREQ R0,R0,#%10
 9720TST R1,#%10000000 ; b10
 9730ORREQ R0,R0,#%100
 9740
 9750SWI &100+19
 9760SWI &100+10
 9770SWI "OS_WriteC"
 9780SWI &100
 9790SWI &100
 9800SWI &100
 9810
 9820LDRB R1,[mem,#pal_regs+2]
 9830LDRB R2,[mem,#pal_regs+3]
 9840
 9850MOV R0,#0
 9860TST R2,#%1 ; r4
 9870ORREQ R0,R0,#%1
 9880TST R2,#%10000 ; g4
 9890ORREQ R0,R0,#%10
 9900TST R1,#%10000 ; b4
 9910ORREQ R0,R0,#%100
 9920
 9930SWI &100+19
 9940SWI &100+4
 9950SWI "OS_WriteC"
 9960SWI &100
 9970SWI &100
 9980SWI &100
 9990
10000MOV R0,#0
10010TST R2,#%10 ; r6
10020ORREQ R0,R0,#%1
10030TST R2,#%100000 ; g6
10040ORREQ R0,R0,#%10
10050TST R1,#%100000 ; b6
10060ORREQ R0,R0,#%100
10070
10080SWI &100+19
10090SWI &100+6
10100SWI "OS_WriteC"
10110SWI &100
10120SWI &100
10130SWI &100
10140
10150MOV R0,#0
10160TST R2,#%100 ; r12
10170ORREQ R0,R0,#%1
10180TST R1,#%100 ; g12
10190ORREQ R0,R0,#%10
10200TST R1,#%1000000 ; b12
10210ORREQ R0,R0,#%100
10220
10230SWI &100+19
10240SWI &100+12
10250SWI "OS_WriteC"
10260SWI &100
10270SWI &100
10280SWI &100
10290
10300MOV R0,#0
10310TST R2,#%1000 ; r14
10320ORREQ R0,R0,#%1
10330TST R1,#%1000 ; g14
10340ORREQ R0,R0,#%10
10350TST R1,#%10000000 ; b14
10360ORREQ R0,R0,#%100
10370
10380SWI &100+19
10390SWI &100+14
10400SWI "OS_WriteC"
10410SWI &100
10420SWI &100
10430SWI &100
10440
10450LDRB R1,[mem,#pal_regs+4]
10460LDRB R2,[mem,#pal_regs+5]
10470
10480MOV R0,#0
10490TST R2,#%1 ; r5
10500ORREQ R0,R0,#%1
10510TST R2,#%10000 ; g5
10520ORREQ R0,R0,#%10
10530TST R1,#%10000 ; b5
10540ORREQ R0,R0,#%100
10550
10560SWI &100+19
10570SWI &100+5
10580SWI "OS_WriteC"
10590SWI &100
10600SWI &100
10610SWI &100
10620
10630MOV R0,#0
10640TST R2,#%10 ; r7
10650ORREQ R0,R0,#%1
10660TST R2,#%100000 ; g7
10670ORREQ R0,R0,#%10
10680TST R1,#%100000 ; b7
10690ORREQ R0,R0,#%100
10700
10710SWI &100+19
10720SWI &100+7
10730SWI "OS_WriteC"
10740SWI &100
10750SWI &100
10760SWI &100
10770
10780MOV R0,#0
10790TST R2,#%100 ; r13
10800ORREQ R0,R0,#%1
10810TST R1,#%100 ; g13
10820ORREQ R0,R0,#%10
10830TST R1,#%1000000 ; b13
10840ORREQ R0,R0,#%100
10850
10860SWI &100+19
10870SWI &100+13
10880SWI "OS_WriteC"
10890SWI &100
10900SWI &100
10910SWI &100
10920
10930MOV R0,#0
10940TST R2,#%1000 ; r15
10950ORREQ R0,R0,#%1
10960TST R1,#%1000 ; g15
10970ORREQ R0,R0,#%10
10980TST R1,#%10000000 ; b15
10990ORREQ R0,R0,#%100
11000
11010SWI &100+19
11020SWI &100+15
11030SWI "OS_WriteC"
11040SWI &100
11050SWI &100
11060SWI &100
11070
11080LDRB R1,[mem,#pal_regs+6]
11090LDRB R2,[mem,#pal_regs+7]
11100
11110MOV R0,#0
11120TST R2,#%1 ; r1
11130ORREQ R0,R0,#%1
11140TST R2,#%10000 ; g1
11150ORREQ R0,R0,#%10
11160TST R1,#%10000 ; b1
11170ORREQ R0,R0,#%100
11180
11190SWI &100+19
11200SWI &100+1
11210SWI "OS_WriteC"
11220SWI &100
11230SWI &100
11240SWI &100
11250
11260MOV R0,#0
11270TST R2,#%10 ; r3
11280ORREQ R0,R0,#%1
11290TST R2,#%100000 ; g3
11300ORREQ R0,R0,#%10
11310TST R1,#%100000 ; b3
11320ORREQ R0,R0,#%100
11330
11340SWI &100+19
11350SWI &100+3
11360SWI "OS_WriteC"
11370SWI &100
11380SWI &100
11390SWI &100
11400
11410MOV R0,#0
11420TST R2,#%100 ; r9
11430ORREQ R0,R0,#%1
11440TST R1,#%100 ; g9
11450ORREQ R0,R0,#%10
11460TST R1,#%1000000 ; b9
11470ORREQ R0,R0,#%100
11480
11490SWI &100+19
11500SWI &100+9
11510SWI "OS_WriteC"
11520SWI &100
11530SWI &100
11540SWI &100
11550
11560MOV R0,#0
11570TST R2,#%1000 ; r11
11580ORREQ R0,R0,#%1
11590TST R1,#%1000 ; g11
11600ORREQ R0,R0,#%10
11610TST R1,#%10000000 ; b11
11620ORREQ R0,R0,#%100
11630
11640SWI &100+19
11650SWI &100+11
11660SWI "OS_WriteC"
11670SWI &100
11680SWI &100
11690SWI &100
11700
11710MOV PC,R14
11720
11730.twocolpal
11740LDRB R1,[mem,#pal_regs+0]
11750LDRB R2,[mem,#pal_regs+1]
11760MOV R0,#0
11770TST R2,#%1 ; r0
11780ORREQ R0,R0,#%1
11790TST R2,#%10000 ; g0
11800ORREQ R0,R0,#%10
11810TST R1,#%10000 ; b0
11820ORREQ R0,R0,#%100
11830
11840SWI &100+19
11850SWI &100+0
11860SWI "OS_WriteC"
11870SWI &100
11880SWI &100
11890SWI &100
11900
11910MOV R0,#0
11920TST R2,#%100 ; r1
11930ORREQ R0,R0,#%1
11940TST R1,#%100 ; g1
11950ORREQ R0,R0,#%10
11960TST R1,#%1000000 ; b1
11970ORREQ R0,R0,#%100
11980
11990SWI &100+19
12000SWI &100+3 ; mode 4 fix
12010SWI "OS_WriteC"
12020SWI &100
12030SWI &100
12040SWI &100
12050MOV PC,R14
12060
12070.fourcolpal
12080LDRB R1,[mem,#pal_regs+0]
12090LDRB R2,[mem,#pal_regs+1]
12100MOV R0,#0
12110TST R2,#%1 ; r0
12120ORREQ R0,R0,#%1
12130TST R2,#%10000 ; g0
12140ORREQ R0,R0,#%10
12150TST R1,#%10000 ; b0
12160ORREQ R0,R0,#%100
12170
12180SWI &100+19
12190SWI &100+0
12200SWI "OS_WriteC"
12210SWI &100
12220SWI &100
12230SWI &100
12240
12250MOV R0,#0
12260TST R2,#%10 ; r1
12270ORREQ R0,R0,#%1
12280TST R2,#%100000 ; g1
12290ORREQ R0,R0,#%10
12300TST R1,#%100000 ; b1
12310ORREQ R0,R0,#%100
12320
12330SWI &100+19
12340SWI &100+1
12350SWI "OS_WriteC"
12360SWI &100
12370SWI &100
12380SWI &100
12390
12400MOV R0,#0
12410TST R2,#%100 ; r2
12420ORREQ R0,R0,#%1
12430TST R1,#%100 ; g2
12440ORREQ R0,R0,#%10
12450TST R1,#%1000000 ; b2
12460ORREQ R0,R0,#%100
12470
12480SWI &100+19
12490SWI &100+2
12500SWI "OS_WriteC"
12510SWI &100
12520SWI &100
12530SWI &100
12540
12550MOV R0,#0
12560TST R2,#%1000 ; r3
12570ORREQ R0,R0,#%1
12580TST R1,#%1000 ; g3
12590ORREQ R0,R0,#%10
12600TST R1,#%10000000 ; b3
12610ORREQ R0,R0,#%100
12620
12630SWI &100+19
12640SWI &100+3
12650SWI "OS_WriteC"
12660SWI &100
12670SWI &100
12680SWI &100
12690
12700MOV PC,R14
12710
12720.write_screen_start_low
12730AND R0,R0,#%11100000
12740STRB R0,[mem,#crt_regs+13]
12750MOV R0,#1 : STRB R0,[mem,#tamper]
12760MOV PC,R14
12770
12780.read_screen_start_low
12790LDRB R0,[mem,#crt_regs+13]
12800MOV PC,R14
12810
12820.write_screen_start_high
12830AND R0,R0,#%00111111
12840STRB R0,[mem,#crt_regs+12]
12850MOV R0,#1 : STRB R0,[mem,#tamper]
12860MOV PC,R14
12870
12880.read_screen_start_high
12890LDRB R0,[mem,#crt_regs+12]
12900MOV PC,R14
12910
12920.write_iscr ; &FE00
12930
12940LDRB R1,[mem,#Eier]
12950
12960TST R0,#&80
12970ORREQ R1,R1,R0
12980BICNE R1,R1,R0
12990AND R1,R1,#%01111100
13000STRB R1,[mem,#Eier]
13010MOV PC,R14
13020
13030
13040
13050TST R0,#&80
13060;SWIEQ &100+ASC"["
13070;SWINE &100+ASC"]"
13080AND R0,R0,#%01111100
13090STRB R0,[mem,#Eier]
13100;SWI &100+ASC"["
13110;MOV R12,R0,LSL#24
13120;FNprint2(12)
13130MOV PC,R14
13140
13150.read_iscr  ; &FE00
13160LDRB R0,[mem,#Eifr]
13170BIC R1,R0,#%10
13180STRB R1,[mem,#Eifr]
13190
13200;LDRB R1,[mem,#Eier]
13210;ANDS R1,R1,R0
13220BICS R1,R0,#%11
13230ORRNE R0,R0,#%1 ; master IRQ bit
13240
13250;BIC R0,R0,#%1000000
13260;LDRB R1,[mem,#&C2]
13270;CMP R1,#1
13280;ORREQ R0,R0,#%1000000
13290;CMP R1,#2
13300;BICEQ R0,R0,#%1000000
13310;ORREQ R0,R0,#%1000000
13320
13330MOV PC,R14
13340
13350.recalc_wrap
13360LDRB R0,[mem,#Elatch]
13370AND R0,R0,#%00111000 ; screen mode
13380MOV R0,R0,LSR#1
13390ADR R1,mode_table
13400LDR R0,[R1,R0]
13410
13420BIC F,F,#&FF000000
13430BIC F,F,#&00FF0000
13440ORR F,F,R0,LSL#16 ; wrap_addr
13450
13460MOV PC,R14
13470
13480.counter_last
13490EQUD 0
13500
13510.write_counter
13520LDRB R1,R14store+4
13530CMP R0,R1:MOVEQ PC,R14
13540
13550STR R14,R14store
13560ADD R0,R0,#1
13570STRB R0,R14store+4
13580
13590LDR R0,[mem,#min]
13600SUB R0,R0,time
13610LDR R1,[mem,#sound_timer]
13620SUB R1,R1,R0
13630LDR R2,counter_last
13640STR R1,counter_last
13650SUB R1,R2,R1
13660CMP R1,#200
13670;SWILT &100+ASC"s"
13680BGE skip_noise
13690
13700MOV R0,#%11100100 ; low frequency noise
13710STRB R0,sound_data
13720MOV R0,#0 : BL sound_latch
13730MOV R0,#%11110000 ; maximum volume noise
13740STRB R0,sound_data
13750MOV R0,#0 : BL sound_latch
13760MOV R0,#%11011111 ; channel 1 volume 0
13770STRB R0,sound_data
13780MOV R0,#0 : BL sound_latch
13790
13800LDR PC,R14store
13810;B skip_noise2
13820
13830.skip_noise
13840MOV R0,#%11111111 ; noise volume 0
13850STRB R0,sound_data
13860MOV R0,#0 : BL sound_latch
13870
13880.skip_noise2
13890LDRB R0,R14store+4
13900
13910MOV R0,R0,LSL#2
13920AND R0,R0,#%1111
13930ORR R0,R0,#%11000000 ; tone 1 freq
13940STRB R0,sound_data
13950MOV R0,#0
13960BL sound_latch
13970LDRB R0,R14store+4
13980MOV R0,R0,LSR#2
13990STRB R0,sound_data
14000LDR R14,R14store
14010MOV R0,#0
14020B sound_latch
14030
14040.R14store
14050EQUD 0
14060EQUD 0
14070
14080.write_latch
14090STRB R0,[mem,#Elatch]
14100
14110STR R14,R14store
14120TST R0,#%10
14130MOVEQ R0,#%11011111 ; channel 1 volume 0
14140MOVNE R0,#%11010000 ; channel 1 volume 15
14150STRB R0,sound_data
14160MOV R0,#0
14170BL sound_latch
14180
14190MOV R0,#%11111111 ; noise volume 0
14200STRB R0,sound_data
14210MOV R0,#0 : BL sound_latch
14220
14230LDR R14,R14store
14240LDRB R0,[mem,#Elatch]
14250
14260AND R0,R0,#%00111000 ; screen mode
14270LDRB R1,mode
14280CMP R0,R1
14290MOVEQ PC,R14
14300STRB R0,mode
14310
14320MOV R1,#1 : STRB R1,[mem,#tamper]
14330
14340CMP R0,#7 << 3
14350ORREQ F,F,#1 << 12
14360BICNE F,F,#1 << 12
14370SWIEQ &100+12
14380
14390CMP R0,#3 << 3
14400MOVLE R1,#80
14410MOVGT R1,#40
14420STRB R1,[mem,#crt_regs+1] ; horizontal characters
14430MOV R0,R0,LSR#1
14440ADR R1,mode_table
14450LDR R0,[R1,R0]
14460
14470BIC F,F,#&FF000000
14480BIC F,F,#&00FF0000
14490ORR F,F,R0,LSL#16 ; wrap_addr
14500
14510MOV R0,R0,LSR#16
14520AND R1,R0,#&FF
14530STRB R1,[mem,#crt_regs+6] ; vertical characters
14540MOV R1,#&24
14550STRB R1,[mem,#crt_regs+3] ; misc.
14560MOV R0,R0,LSR#8
14570STRB R0,[mem,#fe20]
14580B poke_updatepixelV ; includes MOV PC,R14
14590
14600.mode
14610EQUD 0
14620
14630.mode_table
14640EQUD &9C203000 ; mode 0
14650EQUD &D8203000 ; mode 1
14660EQUD &F4203000 ; mode 2
14670EQUD &9C194000 ; mode 3
14680EQUD &88205800 ; mode 4
14690EQUD &C4205800 ; mode 5
14700EQUD &88196000 ; mode 6
14710EQUD &88196000 ; (mode 7)
14720
14730.read_latch
14740LDRB R0,[mem,#Elatch]
14750MOV PC,R14
14760
14770.write_ROMint
14780STRB R0,[mem,#ROMint]
14790LDRB R1,[mem,#Eifr]
14800TST R0,#%10000
14810BICNE R1,R1,#%100
14820;SWINE &100+ASC"/"
14830TST R0,#%100000
14840BICNE R1,R1,#%1000
14850;SWINE &100+ASC"."
14860TST R0,#%1000000
14870BICNE R1,R1,#%1000000 ; clear (some?) tape interrupts
14880;SWINE &100+ASC","
14890STRB R1,[mem,#Eifr]
14900AND R0,R0,#%1111
14910CMP R0,#8
14920CMPNE R0,#9
14930ORREQ F,F,#1 << 11
14940BICNE F,F,#1 << 11
14950;SWIEQ &100+ASC"1"
14960;SWINE &100+ASC"0"
14970BNE romsel
14980MOV PC,R14
14990
15000.read_ROMint
15010.read_counter
15020.write_tape_data
15030.read_palette
15040MOV PC,R14
15050
15060FNsound_latch
15070FNsound_misc
15080
15090.osbput
15100MOV R0,A,LSR#24
15110MOV R1,Y,LSR#24
15120SWI "XOS_BPut"
15130BVS swi_error
15140B opcode(&60) ; rts
15150
15160.osbget
15170MOV R0,A,LSR#24
15180MOV R1,Y,LSR#24
15190SWI "XOS_BGet"
15200BVS swi_error
15210MOV A,R0,LSL#24
15220FNsetupC
15230B opcode(&60) ; rts
15240
15250.swi_error
15260ADD mem,mem,#&100
15270ADD mem,mem,#&002
15280MOV R1,#0 ; BRK
15290STRB R1,[mem,#-2]
15300LDRB R1,[R0] ; error no
15310STRB R1,[mem,#-1]
15320ADD R0,R0,#4
15330MOV R14,#0
15340
15350.swi_err_loop
15360LDRB R13,[R0,R14]
15370CMP R13,#0
15380;MOV R13,#ASC"A"
15390STRB R13,[mem,R14]
15400ADD R14,R14,#1
15410MOVEQ R14,#255
15420CMP R14,#253
15430BLE swi_err_loop
15440
15450MOV zpc,#&100 << 16
15460SUB mem,mem,#&100
15470SUB mem,mem,#&002
15480FNfetch2
15490
15500
15510
15520
15530.strb_rom_ret
15540
15550.sheila
15560SUBS R2,R1,#&FE00
15570MOVLT PC,R14
15580SUBS R2,R2,#&100
15590MOVGE PC,R14
15600;BGE FFpage
15610
15620TST time,#%1
15630SUBNE time,time,#1
15640SUBEQ time,time,#2
15650
15660;STRB R0,[mem,R1]
15670BIC R1,R1,#&F0 ; elk
15680SUB R2,mem,#&10000:STRB R0,[R2,R1]
15690
15700AND R2,R1,#&F
15710;ADR R1,sheila_writetab
15720LDR PC,[PC,R2,LSL#2]
15730EQUD 0 ; padding for pipeline
15740.sheila_writetab
15750]
15760FOR II%=0 TO 15
15770[OPTp
15780EQUD write_iscr
15790EQUD dummy
15800EQUD write_screen_start_low
15810EQUD write_screen_start_high
15820EQUD write_tape_data
15830EQUD write_ROMint
15840EQUD write_counter
15850EQUD write_latch
15860FNequd(8,write_palette)
15870]
15880NEXT
15890[OPTp
15900
15910.ldrb_FFpage
15920;SUB time,time,#1
15930MOV PC,R14
15940
15950.ldrb8000 ; greater than 8000
15960
15970CMP R1,#&FE00
15980BHS ldrb_sheila
15990
16000LDRB R0,[mem,R1]
16010MOV PC,R14
16020
16030
16040;MOV R1,R1,LSR#16
16050]
16060IF master THEN
16070[OPTp
16080.ldrb16_8000 ; greater than 8000
16090
16100CMP R1,#&FE00 << 16
16110BHS ldrb16_sheila
16120
16130LDRB R0,[mem,R1,LSR#16]
16140MOV PC,R14
16150
16160.ldrb16_screen
16170CMP R1,#&8000 << 16
16180BHS ldrb16_8000
16190
16200LDRB R12,[mem,#ACCCON]
16210
16220CMP zpc,#&C000 << 16
16230MOVLT R13,R12,LSR#1
16240MOVGE R13,R12
16250CMP zpc,#&E000 << 16
16260MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
16270                       ; we must look at
16280
16290TST R13,#%10
16300SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
16310;MOVEQ R13,mem
16320LDRNEB R0,[R13,R1,LSR#16]
16330LDREQB R0,[mem,R1,LSR#16]
16340MOV PC,R14
16350]
16360ELSE
16370[OPTp
16380.ldrb16_screen
16390CMP R1,#&FE00 << 16
16400BHS ldrb16_sheila
16410
16420LDRB R0,[mem,R1,LSR#16]
16430MOV PC,R14
16440]
16450ENDIF
16460
16470IF master THEN
16480[OPTp
16490
16500.ldrb_screen
16510.ldrb3000 ; greater than 3000
16520
16530CMP R1,#&8000
16540BHS ldrb8000
16550
16560LDRB R12,[mem,#ACCCON]
16570
16580CMP zpc,#&C000 << 16
16590MOVLT R13,R12,LSR#1
16600MOVGE R13,R12
16610CMP zpc,#&E000 << 16
16620MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
16630                       ; we must look at
16640
16650TST R13,#%10
16660SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
16670;MOVEQ R13,mem
16680LDRNEB R0,[R13,R1]
16690LDREQB R0,[mem,R1]
16700MOV PC,R14
16710]
16720ELSE
16730[OPTp
16740.ldrb_screen
16750.ldrb3000 ; greater than 3000
16760CMP R1,#&FE00
16770BHS ldrb_sheila
16780LDRB R0,[mem,R1]
16790MOV PC,R14
16800]
16810ENDIF
16820
16830[OPTp
16840
16850.ldrb16_sheila
16860MOV R12,R1,LSR#16
16870B ldrb_sheila2
16880
16890.ldrb16_8000
16900MOV R1,R1,LSR#16
16910
16920.ldrb_8000
16930CMP R1,#&FE00
16940BHS ldrb_sheila
16950CMP R1,#&C000
16960MOVHS PC,R14
16970
16980CMP zpc,#&8000<<16
16990BLO key_skip ; fix for stryker's run
17000
17010TST F,#1 << 11
17020MOVEQ PC,R14
17030.key_skip
17040
17050;SWI &100+ASC"K"
17060
17070STMFD mem,{R1-R2,R12-R13}
17080
17090; electron keyboard
17100EOR R0,R1,#&FF
17110EOR R0,R0,#&FF00
17120BIC R0,R0,#%1100000000000000
17130LDR R2,[mem,#key_addr]
17140MOV R12,#&F0
17150
17160LDR R13,[R2,#0]
17170ANDS R13,R13,R0
17180ORRNE R12,R12,#1
17190
17200LDR R13,[R2,#4]
17210ANDS R13,R13,R0
17220ORRNE R12,R12,#2
17230
17240LDR R13,[R2,#8]
17250ANDS R13,R13,R0
17260ORRNE R12,R12,#4
17270
17280LDR R13,[R2,#12]
17290ANDS R13,R13,R0
17300ORRNE R12,R12,#8
17310
17320MOV R0,R12
17330;ANDS R12,R12,#&F
17340;SWINE &100+ASC"K"
17350LDMEA mem,{R1-R2,R12-R13}
17360MOV PC,R14
17370
17380.ldrb_sheila
17390MOV R12,R1
17400
17410.ldrb_sheila2
17420LDRB R0,[mem,R12]
17430
17440SUBS R2,R12,#&FE00
17450MOVLT PC,R14
17460SUBS R2,R2,#&100
17470BGE ldrb_FFpage
17480
17490BIC R12,R12,#&F0 ; elk
17500SUB R2,mem,#&10000:LDRB R0,[R2,R12]
17510
17520SUB time,time,#1
17530
17540AND R2,R12,#&FF
17550;ADR R1,sheila_readtab
17560LDR PC,[PC,R2,LSL#2]
17570EQUD 0 ; padding for pipeline
17580.sheila_readtab
17590]
17600FOR II%=0 TO 15
17610[OPTp
17620EQUD read_iscr
17630EQUD dummy
17640EQUD read_screen_start_low
17650EQUD read_screen_start_high
17660EQUD read_tape_data
17670EQUD read_ROMint
17680EQUD read_counter
17690EQUD read_latch
17700FNequd(8,read_palette)
17710]
17720NEXT
17730[OPTp
17740
17750FNalign16 ; fit into cache better?
17760
17770FNopcodes
17780
17790.patch_screen
17800MOV PC,R14
17810.patch_pixel
17820MOV PC,R14
17830
17840.end
17850]
17860NEXT
17870OSCLI"Load <6502Em$Dir>.SRC.revtable "+STR$~(code+mode0tab)
17880OSCLI"Load <6502Em$Dir>.SRC.mode1tab "+STR$~(code+mode1tab)
17890OSCLI"Load <6502Em$Dir>.SRC.Hmode2tab "+STR$~(code+mode2tab)
17900OSCLI"Load <6502Em$Dir>.SRC.Hmode4tab "+STR$~(code+mode4tab)
17910OSCLI"Load <6502Em$Dir>.SRC.Hmode5tab "+STR$~(code+mode5tab)
17920
17930ENDPROC
17940
17950DE
17960DEFF
17970
17980
17990DEFFNldrb2(R,S)
18000IF R<>0 OR S<>1 THEN STOP
18010IF master THEN
18020[OPTp
18030;LDRB R,[mem,S]
18040;CMP S,#&FE00
18050;BLHS ldrb_sheila
18060CMP S,#&3000
18070LDRLOB R,[mem,S]
18080BLHS ldrb_screen
18090]
18100ELSE
18110[OPTp
18120LDRB R,[mem,S]
18130;CMP S,#&FE00
18140;BLHS ldrb_sheila
18150CMP S,#&8000
18160BLHS ldrb_8000
18170]
18180ENDIF
18190=""
18200
18210DEFFNldrb16(R,S)
18220IF R<>0 OR S<>1 THEN STOP
18230IF master THEN
18240[OPTp
18250;LDRB R,[mem,S,LSR#16]
18260;CMP S,#&FE00 << 16
18270;BLHS ldrb16_sheila
18280CMP S,#&3000 << 16
18290LDRLOB R,[mem,S,LSR#16]
18300BLHS ldrb16_screen
18310]
18320ELSE
18330[OPTp
18340LDRB R,[mem,S,LSR#16]
18350;CMP S,#&FE00 << 16
18360;BLHS ldrb16_sheila
18370CMP S,#&8000 << 16
18380BLHS ldrb16_8000
18390]
18400ENDIF
18410=""
18420
18430DEFFNstrb(R,S)
18440IF R<>0 OR S<>1 THEN ERROR
18450[OPTp
18460CMP S,F,LSR#16 ; wrap_addr
18470;CMP S,#&3000
18480STRLTB R,[mem,S]
18490BLGE strb
18500]
18510=""
18520
18530DEFFNstrb16(R,S)
18540IF R<>0 OR S<>1 THEN ERROR
18550[OPTp
18560;CMP S,#&C000 << 16
18570;STRLOB R,[mem,S,LSR#16]
18580MOV S,S,LSR#16
18590CMP S,F,LSR#16 ; wrap_addr
18600;CMP S,#&3000
18610STRLTB R,[mem,S]
18620BLGE strb ; 16
18630]
18640=""
18650
18660DEFFNshowregs
18670[OPTp
18680FNprint(zpc)
18690FNprint(A)
18700FNprint(X)
18710FNprint(Y)
18720FNprint(SP)
18730FNprint(F)
18740ADD R12,mem,#&DF00
18750LDRB R12,[R12,#&DA]
18760MOV R12,R12,LSL#24
18770FNprint2(12)
18780SWI &10A
18790;SWI "OS_NewLine"
18800]
18810=""
18820
18830DEFFNprint(R)
18840CASE R OF
18850WHEN zpc : A$=FNprint4(R)
18860WHEN F   : [OPTp:MOV R2,F,LSL#24:FNprint2(2):]
18870OTHERWISE
18880A$=FNprint2(R)
18890ENDCASE
18900=""
18910
18920WHEN A   : A$=FNprint2(R)
18930WHEN X   : A$=FNprint2(R)
18940WHEN Y   : A$=FNprint2(R)
18950WHEN SP  : [OPTp:SWI &100+ASC"1":FNprint2(SP):]
18960WHEN F   : A$=FNprintflags
18970ENDCASE
18980=""
18990
19000DEFFNprintflags
19010[OPTp
19020TST F,#%1<<7 : SWIEQ &100+ASC"n" : SWINE &100+ASC"N"
19030TST F,#%1<<6 : SWIEQ &100+ASC"v" : SWINE &100+ASC"V"
19040TST F,#%1<<5 : SWIEQ &100+ASC"0" : SWINE &100+ASC"1"
19050TST F,#%1<<4 : SWIEQ &100+ASC"b" : SWINE &100+ASC"B"
19060TST F,#%1<<3 : SWIEQ &100+ASC"d" : SWINE &100+ASC"D"
19070TST F,#%1<<2 : SWIEQ &100+ASC"i" : SWINE &100+ASC"I"
19080TST F,#%1<<1 : SWIEQ &100+ASC"z" : SWINE &100+ASC"Z"
19090TST F,#%1<<0 : SWIEQ &100+ASC"c" : SWINE &100+ASC"C"
19100SWI &120
19110]
19120=""
19130
19140DEFFNprint2(R)
19150LOCALI%
19160[OPTp
19170MOV R1,R
19180]
19190FORI%=0 TO 1
19200[OPT p
19210MOV R1,R1,ROR#28
19220AND R0,R1,#&F
19230CMP R0,#10
19240ADDGE R0,R0,#7
19250ADD R0,R0,#48
19260SWI "OS_WriteC"
19270]
19280NEXT
19290[OPTp
19300SWI &120
19310]
19320=""
19330
19340DEFFNprint4(R)
19350LOCALI%
19360[OPTp
19370MOV R1,R
19380]
19390FORI%=0 TO 3
19400[OPT p
19410MOV R1,R1,ROR#28
19420AND R0,R1,#&F
19430CMP R0,#10
19440ADDGE R0,R0,#7
19450ADD R0,R0,#48
19460SWI "OS_WriteC"
19470]
19480NEXT
19490[OPTp
19500SWI &120
19510]
19520=""
19530
19540DEFFNprint32(R)
19550LOCALI%
19560[OPTp
19570MOV R1,R
19580]
19590FORI%=0 TO 31
19600[OPT p
19610MOV R1,R1,ROR#28
19620AND R0,R1,#&F
19630CMP R0,#10
19640ADDGE R0,R0,#7
19650ADD R0,R0,#48
19660SWI "OS_WriteC"
19670]
19680NEXT
19690[OPTp
19700SWI &120
19710]
19720=""
19730
19740DEFFNprints(A$)
19750[OPTp
19760SWI "OS_WriteS"
19770EQUS A$
19780EQUB 10
19790EQUB 13
19800EQUB 0
19810ALIGN
19820]
19830=""
19840
19850DEFFNundoc(A%)
19860IF opcode%<>A% THEN STOP
19870[OPTp
19880;TST F,#%1000
19890;SWIEQ &100+ASC"d"
19900;SWINE &100+ASC"D"
19910
19920;SWI &100+ASC(LEFT$(RIGHT$("0"+STR$~A%,2),1))
19930;SWI &100+ASC(RIGHT$(STR$~A%,1))
19940;SWI &100+ASC" "
19950;FNprint(zpc)
19960;SWI &100+ASC" ":;SWI &100+ASC" "
19970
19980;MOV R0,#15 : ;SWI "OS_Byte"
19990;SWI 4
20000]
20010=""
20020
20030DEFFNequd(A%,B%)
20040LOCALI%
20050FORI%=1 TO A%
20060[OPTp
20070EQUD B%
20080]
20090NEXT
20100=""
20110
20120DEFFNdo_interrupt
20130[OPTp
20140;SWI &100+ASC"I"
20150MOV R0,zpc,LSR#24
20160FNpush(0)
20170MOV R0,zpc,LSR#16
20180FNpush(0)
20190BIC F,F,#%10000 ; clear BRK flag
20200FNpush(F)
20210ORR F,F,#%100 ; !!!!!!
20220MOV R0,#&FF00 : ADD R0,R0,#&FE
20230LDR zpc,[mem,R0]
20240MOV zpc,zpc,LSL#16
20250]
20260=""
20270
20280DEFFNdivmod(A,B,C,D,E)
20290div%+=1
20300[OPTp
20310MOV C,#1
20320MOV D,#0
20330MOV E,B
20340.divloop1(div%)
20350MOV B,B,LSL#1
20360MOV C,C,LSL#1
20370CMP B,A
20380BLO divloop1(div%)
20390
20400.divloop2(div%)
20410CMP B,A : BLS divjump(div%)
20420CMP B,E : BLS divjump(div%)
20430MOV B,B,LSR#1
20440MOV C,C,LSR#1
20450B divloop2(div%)
20460.divjump(div%)
20470CMP B,A
20480SUBLS A,A,B
20490ADDLS D,D,C
20500CMP B,E
20510BHI divloop2(div%)
20520]
20530=""
20540
20550DEFFNshadow
20560IF master THEN
20570[OPTp
20580LDRB R2,[mem,#ACCCON]
20590;EOR R2,R2,R2,LSR#2
20600TST R2,#%1
20610SUBNE R13,mem,#&13000
20620MOVEQ R13,mem
20630]
20640ELSE
20650[OPTp
20660MOV R13,mem
20670]
20680ENDIF
20690=""
20691
20700DEFPROCclearmem(S%,E%)
20710P%=buffer
20720[OPT2
20730EQUD S% ; memory
20740EQUD E% ; memory+&8000
20750.clear
20760MOV R0,#0
20770LDR R1,buffer
20780LDR R2,buffer+4
20790.loop
20800STR R0,[R1],#4
20810CMP R1,R2
20820BNE loop
20830MOV PC,R14
20840]
20850CALL clear
20860ENDPROC
20870
20880DEFFNfetch2
20890[OPTp
20900LDRB R2,[mem,zpc,LSR#16]
20910ADD PC,table,R2,LSL#8
20920]
20930=""
20940
20950DEFFNfetch3(N%,T%)
20960IF N%<>0 THEN [OPTp:ADD zpc,zpc,#N% << 16:]
20970[OPTp
20980FNshowregs2
20990SUBS time,time,#T%
21000LDRPLB R2,[mem,zpc,LSR#16]
21010ADDPL PC,table,R2,LSL#8
21020B fetch2
21030]
21040=""
21050
21060DEFFNfetch(N%,T%)
21070IF N%<>0 THEN [OPTp:ADD zpc,zpc,#N% << 16:]
21080[OPTp
21090FNshowregs2
21100SUBS time,time,#T%
21110LDRPLB R2,[mem,zpc,LSR#16]
21120ADDPL PC,table,R2,LSL#8
21130B fetch2
21140]
21150opcode%+=1
21160IF bcd_loop%=0 THEN
21170IF opcode(opcode%-1)=0 THEN STOP
21180IF opcode(opcode%)<>0 AND p=0 THEN STOP
21190IF P%-opcode(0)>opcode%*4*64 THEN PRINT~opcode%
21200P%=opcode(0)+opcode%*4*64
21210O%=code+P%
21220ELSE
21230P%=bcd(0)+opcode%*4*64
21240O%=code+P%
21250ENDIF
21260=""
21270DEFFNbcd(A%) :
21280IF P%>opcode(0)+(A%+256)*4*64 THEN STOP
21290P%=opcode(0)+(A%+256)*4*64 : O%=code+P% : =""
21300
21310DEFFNalign16
21320WHILE (P% AND 15)<>0
21330P%+=1 : O%+=1
21340ENDWHILE
21350=""
21360DEF PROCerror
21370REPORT:PRINT " at line ";ERL
21380END
21390
21400DEFFNshowregs2
21410[OPTp
21420;BL show_regs
21430]
21440=""

� > 6502Em
master=�
;*RMENSURE 6502Support 0.00 RMRun <6502Em$Res>.65Support
(� � �error
2� 
<
FIO_Podule%=�
P
Z9� opcode(&100), bcd(&100), code 500*1024, buffer 1000
d
� l%(100)
n+� divloop1(10),divloop2(10),divjump(10)
x
div%=0
� ț "<6502Em$Dir>.Src.Sound6"
�!ț "<6502Em$Dir>.Src.Opcodes"
� ț "<6502Em$Dir>.Src.Screen"
�
�electron%=�
�
�assemble
�
��(end-start)/1024
�8� "Save <6502Em$Dir>.CodeE "+�~code+" "+�~(end+code)
�'� "SetType <6502Em$Dir>.CodeE Data"
�
��
�
0�"LOAD <6502Em$Dir>.OS1,2 "+�~(memory+&C000)
2�"LOAD <6502Em$Dir>.BASICII "+�~(memory+&8000)

"� 12
,� init+code
6
�"BOO"
@
J!pc_store=&D9CD << 16
T
^D%=memory : � R3
h� start+code
r
|�
���assemble
�!�clearmem(code,code+200*1024)
�R=1000 : S=1000 : T=1000
�
�A=4
�X=5
�Y=6
�F=7
�SP=8
�	mem=3
�
time=9
�
zpc=10
�table=11


a=-&100+0

x=-&100+4
&
y=-&100+8
0f=-&100+12
:sp=-&100+16
Dpc_store=-&100+20
NT1mode=-&100+24
XT2mode=-&100+25
bT3mode=-&100+26
lT4mode=-&100+27
vT1=-&100+28
�T1R=-&100+32
�T2=-&100+36
�T2R=-&100+40
�T3=-&100+44
�T3R=-&100+48
�T4=-&100+52
�T4R=-&100+56
�screen=-&100+60
�screenR=-&100+64
�min=-&100+68
�sound_timer=-&100+72
�ifr=-&100+76
�ier=-&100+77
ifr2=-&100+78
ier2=-&100+79
arc_screenstart=-&100+80
 tamper=-&100+84
*cursor_tamper=-&100+88
4ROMSEL_ON=-&100+92
>rom=-&100+96
HROMRAM=-&100+100
Rfe20=-&100+116
\tape_handle=-&100+117
fcrt_regs=-&100+120
pscratch=-&100+140
zpal_regs=-&100+148
�Palette=-&100+164
�ACCCON=-&100+172
�patch_on=-&100+176
�pal_tamper=-&100+177
�lastmode=-&100+178
�fe10=-&100+179
�tape_count=-&100+180
�key_addr=-&100+184
�Elatch=-&100+188
�Eifr=-&100+189
�Eier=-&100+190
�ROMint=-&100+191
�speedR=-&100+196
enD=-&100+192

(enD=-&100+200 : � don't go past this
$
.�p=4 � 6 � 2
8
div%=0
BO%=code
Ll%=0
VP%=0
`
opcode%=0
j	[OPTp
t).Oa                            EQUD 0
~).Ox                            EQUD 0
�).Oy                            EQUD 0
�).Of                            EQUD 0
�).Osp                           EQUD 0
�).Opc_store                     EQUD 0
�,.start_offset                 EQUD start
�(.trace                        EQUD 0
�(.trace2                       EQUD 0
�+.init_addr                    EQUD init
�7.crt_addr                     EQUD 0 ; was crt_regs
�1.T1_addr                      EQUD 0 ; was T1
�..ifr_addr                     EQUD 0 ; ifr
�9.column_counter_addr          EQUD 0 ; column_counter
1.ROMSEL_addr                  EQUD 0 ; ROMSEL

2.Palette_addr                 EQUD 0 ; Palette
5.speed_addr                   EQUD screen_count+4
0.elite_addr                   EQUD 0 ; elite
(>.opco_addr                    EQUD opcode(0) ; opcodetable
2-.bcd_addr                     EQUD bcd(0)
<6.sheila_writetab_addr         EQUD sheila_writetab
F5.sheila_readtab_addr          EQUD sheila_readtab
P7.sound_vectors_addr           EQUD sound_buffs_addr
Z3.patch_addr                   EQUD patch_screen
d
n0.init ; only called once, before code called
xADR R0,0
�;LDR R1,opco_addr
�;ADD R1,R1,R0
�;LDR R2,bcd_addr
�;ADD R2,R2,R0
�LDR R5,sheila_writetab_addr
�ADD R5,R5,R0
�LDR R6,sheila_readtab_addr
�ADD R6,R6,R0
�MOV R3,#255
�.init_loop
�;LDR R4,[R1,R3,LSL#2]
�;ADD R4,R4,R0
�;STR R4,[R1,R3,LSL#2]
;LDR R4,[R2,R3,LSL#2]
;ADD R4,R4,R0
;STR R4,[R2,R3,LSL#2]
"LDR R4,[R5,R3,LSL#2]
,ADD R4,R4,R0
6STR R4,[R5,R3,LSL#2]
@LDR R4,[R6,R3,LSL#2]
JADD R4,R4,R0
TSTR R4,[R6,R3,LSL#2]
^SUBS R3,R3,#1
hBPL init_loop
rMOV PC,R14
|
�
.start
�STMFD R13!,{R1-R12,R14}
�STR R13,return_addr
�STR R0,roms_addr
�;LDR R0,crt_addr
�
;ADR R1,0
�;ADD R0,R0,R1
�;SWI "6502_Init"
�
�;MOV R0,#&4000
�
�
�
;STR R0,[mem,#screenR]
$;MOV R0,#&9C00 : ;ADD R0,R0,#&40
;STR R0,[mem,#T1R]
&;
0MOV R0,R0,LSR#2
:STR R0,[mem,#T1]
DMOV R0,R0,LSR#2
NSTR R0,[mem,#screen]
X
b;SWI "6502_Getkeyaddr"
lSWI "6502_GetElectronKeys"
vSTR R0,[mem,#key_addr]
�
�ADR R0,block1
�ADD R1,R0,#8
�SWI "OS_ReadVduVariables"
�!LDR R9,[R1]     ; screenstart
�!STR R9,[mem,#arc_screenstart]
�
MOV R9,#1
�STRB R9,[mem,#tamper]
�STRB R9,[mem,#pal_tamper]
� STRB R9,[mem,#cursor_tamper]
�
�LDR A,[mem,#a]
�LDR X,[mem,#x]
LDR Y,[mem,#y]
"LDR SP,[mem,#sp] : �R SP,SP,#1
LDR F,[mem,#f]
 LDR zpc,[mem,#pc_store]
*
4BL recalc_wrap
>LDRB R0,[mem,#patch_on]
H� R0,R0,#%111
RBIC F,F,#&FF00
\�R F,F,R0,LSL#8
f
pMOV time,#0
z
�LDRB R0,fe08_read
�BIC R0,R0,#&81
�STRB R0,fe08_read
�
�ADR R0,0
�TST F,#%1000
�LDREQ table,opco_addr
�LDRNE table,bcd_addr
�ADD table,table,R0
�;SWI "6502_ReInit"
�;SWI "6502_UpdateScreen
�BL poke_updatepixelV
�BL updatescreen
	B fetch2
	
	.reset_bcdflag
	$ADR R1,0
	.TST F,#%1000
	8LDREQ table,opco_addr
	BLDRNE table,bcd_addr
	LADD table,table,R1
	VMOV PC,R14
	`
	j.block1
	tEQUD 149 : EQUD -1
	~.block2
	�EQUD 0 : EQUD 0
	�
	�.screen_count
	�
EQUD 0
	�
EQUD 0
	�
	�
.reg_comp
	�EQUD &F4DF << 16
	�
	�
.trace_on
	�MOV R12,#1
	�STRB R12,trace
MOV PC,R14


.show_regs

(CMP zpc,#&8000 << 16
2MOVHS PC,R14
<
FLDRB R0,trace2
P
CMP R0,#1
ZBEQ trace_skip
d;MOVNE PC,R14
n
x;LDR R0,reg_comp
�;CMP R0,zpc
�;SWIEQ &100+�"X"
�;MOVNE PC,R14
�
�SWI "6502_Checkkdata"
�CMP R0,#&1F ; Insert
��Q R1,#1
�STREQ R1,trace2
�
�MOV PC,R14
�
��Q R0,#1
�STREQB R0,trace

LDRB R0,trace

CMP R0,#1
"MOVNE PC,14
,
6.trace_skip
@
�showregs
JMOV PC,R14
T
^
h
r.keychk
|
EQUD 0
�
�.fetch2
�
�LDR R0,[mem,#min]
�SUB R0,R0,time
�LDR R1,[mem,#sound_timer]
�SUB R1,R1,R0
�STR R1,[mem,#sound_timer]
�
�
�MOV R0,#0 : STR R0,keychk
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
LDR R1,[mem,#screen]
SUBS R1,R1,R0
STRGT R1,[mem,#screen]
&BLLE vsync
0
:LDR R0,[mem,#min]
DSUB R0,R0,time ; ***
NLDR R1,speed
XSUBS R1,R1,R0
bSTRGT R1,speed
lBLLE speed_control
v
�; LDR R0,[mem,#T1mode]
�; TST R0,#%1
�; BEQ skip_timer1
�
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
�LDR R1,[mem,#T1]
�SUBS R1,R1,R0
�STRGT R1,[mem,#T1]
�BLLE timer1
�.skip_timer1
�
�LDR R0,[mem,#min]

SUB R0,R0,time

LDR R1,[mem,#tape_count]

SUBS R1,R1,R0

 STRGT R1,[mem,#tape_count]

*BLLE tape_fetch

4

>

HTST F,#%100

RBNE skip_do_interrupt

\

f;.do_interrupt

p

zLDRB R1,[mem,#Eifr]

�;TST R1,#%1000000

�;SWINE &100+�"6"

�� R1,R1,#%01111100

�

�

�*;� R1,R1,#%01110000 ; ????????????????

�

�

�

�LDRB R2,[mem,#Eier]

�

��S R1,R1,R2

�
;TST R1,#%1000000
;SWINE &100+�"6"
;TST R1,#%100000
$;SWINE &100+�"5"
.;TST R1,#%10000
8;SWINE &100+�"4"
B;TST R1,#%1000
L
V;SWINE &100+�"3"
`;TST R1,#%100
j;SWINE &100+�"2"
t;CMP R1,#0
~
�BEQ skip_do_interrupt
�
�.do_interrupt
��do_interrupt
�
�.skip_do_interrupt
�
�;BL keyboard �D � CLI!!!
�BL keys2
�.skip_keys
�LDR time,[mem,#T1]
�;MOV time,time,LSR#15
LDR R1,[mem,#screen]

CMP R1,#0 : �Q R1,time
CMP R1,time
MOVLT time,R1
(
2LDR R1,[mem,#tape_count]
<CMP R1,time
FMOVLT time,R1
P
ZCMP time,#0 : �Q time,#1
dSTR time,[mem,#min]
n�fetch2
x
�.interrupt ; called by CLI
�MOV PC,R14
�
�LDRB R1,[mem,#Eifr]
�;� R1,R1,#%00110000
�LDRB R2,[mem,#Eier]
�
��S R1,R1,R2
�
�Q PC,R14
�
�;TST R1,#%100000
�;SWINE &100+�"5"
�;TST R1,#%1000000
;SWINE &100+�"6"

�do_interrupt
"
,MOV PC,R14
6
@.F10temp
J
EQUD 0
T
^.F10
hSWI "6502_Getkdata"
rSTR R14,F10temp
|MOV R0,#255
�STRB R0,[mem,#lastmode]
�BL updatescreen
�;BL force_update_pal
�LDR PC,F10temp
�
�;.fetch3
�
.keys2
�SWI "6502_Checkkdata"
�CMP R0,#&1F ; Insert
��Q R1,#1
�STREQ R1,trace2
�CMP R0,#10 ; F10
�BEQ F10
CMP R0,#11 ; F11
CMPNE R0,#12 ; F12
CMPNE R0,#15 ; break
&BEQ raw_exit2
0MOV PC,R14
:
D.keyboard ; called by CLI
N
XMOV R0,#1 : STR R0,keychk
bSWI "6502_Getkdata"
lCMP R0,#&FF : �Q PC,R14
vCMP R0,#&1F ; Insert
��Q R1,#1
�STREQ R1,trace2
�CMP R0,#10 ; F10
�BEQ F10
�CMP R0,#15
�CMPNE R0,#12
�CMPNE R0,#11 ; F11
�BEQ raw_exit
�
�;CMP R0,#0 ; escape
�;LDREQB R0,[mem,#&FF]
�;�REQ R0,R0,#&80
�;STREQB R0,[mem,#&FF]
LDRB R0,[R1,R0]
CMP R0,#&FF
;BEQ not_keyboard
 
�Q PC,R14
*
4;B not_keyboard
>CMP R0,#10 ; shift, ctrl
HMOVLT PC,R14
RLDRB R1,[mem,#ifr]
\-�R R1,R1,#%1 ; interrupt is from keyboard
fSTRB R1,[mem,#ifr]
pLDRB R0,[mem,#ier]
zTST R0,#%1
�
�Q PC,R14
��do_interrupt
�MOV PC,R14
�
�
�
�.mono_time
�
EQUD 0
�
.speed
�
EQUD 0
�
�.speed_control
�LDR R0,[mem,#speedR]
ADD R1,R1,R0
STR R1,speed

$LDR R1,mono_time
..mono_loop
8SWI "OS_ReadMonotonicTime"
BMOV R0,R0,LSR#1
L
CMP R0,R1
VBEQ mono_loop
`STR R0,mono_time
j
tMOV PC,R14
~
�
.vsync
�STR R14,vsyncR14
�;MOV R0,#19
�;SWI "OS_Byte"
�
�;LDRB R0,ldrb40_tamper
�$;CMP R0,#1 : ;BLEQ ldrb40_update
�
�
�"LDR R0,[mem,#speedR] ; screenR
�ADD R1,R1,R0
�STR R1,[mem,#screen]



;BL trace_on

(;LDRB R1,screen_count
2;SUBS R1,R1,#1
<;LDRMIB R1,screen_count+4
F;STRB R1,screen_count
PLDR R0,[mem,#tamper]
Z
CMP R0,#0
d
nBEQ no_tamper
x
MOV R0,#0
�STR R0,[mem,#tamper]
�;SWI "6502_UpdateScreen"
�BL recalc_wrap
�BL updatescreen
�TST F,#1 << 10 ; cursor on?
�;BLNE define_cursor
�;BLNE cursor
�.no_tamper
�LDRB R0,[mem,#pal_tamper]
�
CMP R0,#0
�BLNE update_pal
�
�
LDR R0,[mem,#cursor_tamper]

CMP R0,#0
;BLNE cursor
"
,
6;SUB R0,mem,#512 ; sheila
@;LDRB R1,[R0,#&20]
J;TST R1,#%10 ; teletext?
T;SWINE "6502_UpdateScreen"
^;BLNE updatescreen
h;ADD R0,R0,#&4D
r;LDRB R1,[R0]
|;LDRB R2,[R0,#1]
�
�
�
�LDRB R1,[mem,#Eifr]
�,�R R1,R1,#%100 ; interrupt is from vsync
�STRB R1,[mem,#Eifr]
�
�;TST F,#1 << 9
�;BEQ skip_exact
�
�;LDR R1,mono_time
�;.mono_loop
�;SWI "OS_ReadMonotonicTime"
;MOV R0,R0,LSR#1
;CMP R0,R1
;BEQ mono_loop
&;STR R0,mono_time
0
:.skip_exact
D
NLDR PC,vsyncR14
X
.vsyncR14
b
EQUD 0
l
v
�
�.timer1
�"LDR R0,[mem,#speedR] ; was T1R
�ADD R1,R1,R0
�STR R1,[mem,#T1]
�
�LDRB R1,[mem,#Eifr]
�+�R R1,R1,#%1000 ; interrupt is from RTC
�STRB R1,[mem,#Eifr]
�
�MOV PC,R14
�
�

;.trace2
;EQUD 0
 
*
.reset
4;MOV R1,#1
>;STR R1,trace
H*MOV R0,#15 : MOV R1,#0 : SWI "OS_Byte"
RMOV R0,#&10000
\SUB R0,R0,#4
fLDR R0,[mem,R0]
pMOV zpc,R0,LSL#16
z'BIC F,F,#%1000 ; clear Decimal mode
�)�R F,F,#%100  ; set interrupt disable
��fetch2
�
�
�	.exit
�
MOV R0,#0
�.raw_exit2
�SWI "6502_Getkdata"
�
.raw_exit
�STR A,[mem,#a]
�STR X,[mem,#x]
�STR Y,[mem,#y]
�STR SP,[mem,#sp]
STR F,[mem,#f]
STR zpc,[mem,#pc_store]
LDR R13,return_addr
$LDMFD R13!,{R1-R12,PC}
.;MOV PC,R14
8
B.return_addr
L
EQUD 0
V
`.roms_addr
j
EQUD 0
t
~
�.fe08_read
�.casette_read
�
EQUB 0
�.fe08_write
�
EQUB 0
�	.fe09
�
EQUB 0
�
;.fe10
�;EQUB 0
�	ALIGN
�.tbuffer
�
EQUD 0


.read_tape_data
LDRB R0,[mem,#Eifr]
BIC R0,R0,#%10000
(
2STRB R0,[mem,#Eifr]
<LDRB R0,fe09
F;CMP R0,#�"*"
P;SWIEQ &100+�"h"
Z;SWINE &100+�"H"
d;MOV R0,#�"*"
n
xMOV PC,R14
�
�.tape_fetch
�;SWI &100+�"b"
�;LDR R0,[mem,#tapeR]
�0;MOV R0,#&3400 ; 2000000/(1200/8)~=1200 baud
�MOV R0,#&6000
�ADDS R1,R1,R0
�MOVLE R1,#&6000
�
�LDR R0,[mem,#Elatch]
�&TST R0,#%110 ; casette input mode?
�MOVNE R1,#&100000
�
$TST R0,#%1000000 ; is *Motor on?
�Q R1,#&100000

"STR R1,[mem,#tape_count]
,
6
�Q PC,R14
@
JLDRB R1,[mem,#tape_handle]
T
CMP R1,#0
^
�Q PC,R14
h
r
.tape_get
|;SWI &100+�"B"
�SWI "XOS_BGet"
�MOVVS R1,#0
� STRVSB R1,[mem,#tape_handle]
�MOVVS PC,R14
�
�BCC tape_skip10
�
�
MOV R0,#1
�
MOV R2,#0
�)SWI "XOS_Args" ; rewind tape to start
�MOVVS R1,#0
� STRVSB R1,[mem,#tape_handle]
�MOVVS PC,R14

.tape_skip10
;CMP R0,#�"*"
&;SWIEQ &100+�"*"
0
:CMP R0,#&FF
DBNE not_FF
NSWIEQ "XOS_BGet"
XCMP R0,#&FF
bBEQ not_FF
l
v;MOV R0,R0,LSL#4
�
�;LDRB R1,fe08_read
�LDRB R1,[mem,#Eifr]
�
�TST R0,#%100
�BICEQ R1,R1,#%1000000
��RNE R1,R1,#%1000000
�
�STRB R1,[mem,#Eifr]
�
�
�Q PC,R14
�
�LDRB R0,[mem,#ier]
TST R0,#%1000000

�Q PC,R14

 ;�R R1,R1,#&80
*;STRB R1,fe08_read
4;SWI &100+�"F"
>B do_interrupt
H;B interrupt
R;B skip_do_interrupt
\
f.not_FF
pSTRB R0,fe09
z
�;SWI &100+�"B"
�
�;LDRB R0,fe08_write
�/;TST R0,#&80 ; receive interrupt enable bit
�;�Q PC,R14
�
�;LDRB R0,fe08_read
�;�R R0,R0,#&81
�;STRB R0,fe08_read
�LDRB R0,[mem,#Eifr]
��R R0,R0,#%10000
�STRB R0,[mem,#Eifr]
�
;LDRB R12,[mem,#&C2]
;MOV R12,R12,LSL#24
;�print2(12)
$;SWI &100+�" "
.
8LDRB R0,[mem,#Eier]
B1TST R0,#%10000 ; receive interrupt enable bit
L;SWIEQ &100+�"Q"
V;�Q PC,R14
`;SWI &100+�"i"
jB do_interrupt
t;B interrupt
~;MOV PC,R14
�
�
.dummy
�MOV PC,R14
�
�
�&.strb8000      ; greater than 8000
�]
�� master �
�	[OPTp
�CMP R1,#&E000
�BGE strb_rom_ret
�CMP R1,#&C000
BGE strb_rom_ret2

CMP R1,#&9000
BGE strb_rom
]
(�
2	[OPTp
<CMP R1,#&C000
FBGE strb_rom_ret
P]
Z�
d	[OPTp
n
xLDRB R12,[mem,#rom]
�TST R12,#&80
�BEQ strb_rom
�
�0;SUB R13,mem,#(&8000+&B000) ; 4k Private RAM
�;STRB R0,[R13,R1]
�STRB R0,[mem,R1]
�MOV PC,R14
�
�
.strb_rom
�SUB R12,mem,#-ROMRAM
�LDRB R13,[mem,#rom]
�LDRB R13,[R12,R13]
�CMP R13,#0
STREQB R0,[mem,R1]
MOV PC,R14
;B strb_rom_ret
"
,.romsel
6LDRB R12,[mem,#ROMSEL_ON]
@CMP R12,#0
JMOVNE PC,R14
T
^LDRB R1,[mem,#rom]
h
rLDR R12,roms_addr
|� R2,R0,#&F ; socket number
�LDRB R1,[mem,#rom]
�CMP R2,R1:�Q PC,R14
�� R1,R1,#&F
�� R0,R0,#&F
�STRB R0,[mem,#rom]
�SUB R13,mem,#-ROMRAM
�LDRB R13,[R13,R1]
�1CMP R13,#0 ; is the bank being paged out RAM?
�BNE romsel2
�
�.TST R0,#%10000000 ; private RAM mapped in?
��Q R13,#&8000
�MOVNE R13,#&9000
 � R0,R0,#&F
 
 ADD R2,R12,R1,LSL#14
 &ADDNE R2,R2,#&1000
 0&ADD R12,R12,R0,LSL#14 ; R0*16*1024
 :ADDNE R12,R12,#&1000
 DADR R1,romsel_loop_temp
 NSTMIA R1,{R0,R4-R8,R14}
 XADD mem,mem,R13
 bRSB R13,R13,#&C000
 l.romsel_loop
 v(LDMIA mem,{R0,R1,R4,R5,R6,R7,R8,R14}
 �(STMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R14}
 �)LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R14}
 �+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
 �SUBS R13,R13,#4*8
 �BNE romsel_loop
 �SUB mem,mem,#&C000
 �ADR R1,romsel_loop_temp
 �LDMIA R1,{R0,R4-R8,PC}
 �.romsel_loop_temp
 �EQUD 0:EQUD 0:EQUD 0:EQUD 0
 �EQUD 0:EQUD 0:EQUD 0:EQUD 0
 �
 �.romsel_empty
!ADD R13,R2,R2,LSL#8
!ADD R13,R13,R13,LSL#16
!ADD R0,mem,#&8000
! STR R13,[R0,#0]
!*STR R13,[R0,#4]
!4STR R13,[R0,#8]
!>STR R13,[R0,#12]
!HMOV PC,R14
!R
!\.romsel2
!f
!pSUB R13,mem,#-ROMRAM
!zLDRB R13,[R13,R2]
!�3CMP R13,#2 ; is the bank being paged out empty?
!�BEQ romsel_empty
!�
!�.TST R0,#%10000000 ; private RAM mapped in?
!��Q R13,#&8000
!�MOVNE R13,#&9000
!�� R0,R0,#&F
!�
!�
!�&ADD R12,R12,R0,LSL#14 ; R0*16*1024
!�ADDNE R12,R12,#&1000
!�ADD mem,mem,R13
!�RSB R13,R13,#&C000
"ADR R1,romsel_loop_temp
"STMIA R1,{R0,R4-R8,R14}
".romsel2_loop
"$+LDMIA  R12 !,{R0,R1,R4,R5,R6,R7,R8,R14}
".+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
"8;LDR R1,[R12],#4
"B=;STR R1,[mem],#4 ; store byte from ROM in main memory map
"LSUBS R13,R13,#4*8
"VBNE romsel2_loop
"`SUB mem,mem,#&C000
"jADR R1,romsel_loop_temp
"tLDMIA R1,{R0,R4-R8,PC}
"~
"�	.link
"�
EQUD 0
"�
"��screen
"�
"�.write_palette
"�� R1,R1,#7
"�SUB R12,mem,#-pal_regs
"�LDRB R2,[R12,R1]
"�CMP R0,R2:�Q PC,R14
"�STRB R0,[R12,R1]
"�
#LDR R1,[mem,#Palette]
#

CMP R1,#0
#MOVNE PC,R14
#
#()MOV R1,#255:STRB R1,[mem,#pal_tamper]
#2MOV PC,R14
#<
#F.update_pal
#PLDR R1,[mem,#Palette]
#Z
CMP R1,#0
#dMOVNE PC,R14
#n.force_update_pal
#xLDRB R1,[mem,#fe20]
#�;TST R1,#%10
#�;MOVNE PC,R14 ; mode 7
#�� R1,R1,#%11100
#�"CMP R1,#%11100 : BEQ twocolpal
#�"CMP R1,#%01000 : BEQ twocolpal
#�#CMP R1,#%11000 : BEQ fourcolpal
#�#CMP R1,#%00100 : BEQ fourcolpal
#�
#�
#�.sixteencolpal
#�LDRB R1,[mem,#pal_regs+0]
#�LDRB R2,[mem,#pal_regs+1]
#�
$
MOV R0,#0
$TST R2,#%1 ; r0
$�REQ R0,R0,#%1
$"TST R2,#%10000 ; g0
$,�REQ R0,R0,#%10
$6TST R1,#%10000 ; b0
$@�REQ R0,R0,#%100
$J
$TSWI &100+19
$^SWI &100+0
$hSWI "OS_WriteC"
$rSWI &100
$|SWI &100
$�SWI &100
$�
$�
MOV R0,#0
$�TST R2,#%10 ; r2
$��REQ R0,R0,#%1
$�TST R2,#%100000 ; g2
$��REQ R0,R0,#%10
$�TST R1,#%100000 ; b2
$��REQ R0,R0,#%100
$�
$�SWI &100+19
$�SWI &100+2
$�SWI "OS_WriteC"
%SWI &100
%SWI &100
%SWI &100
%&
%0
MOV R0,#0
%:TST R2,#%100 ; r8
%D�REQ R0,R0,#%1
%NTST R1,#%100 ; g8
%X�REQ R0,R0,#%10
%bTST R1,#%1000000 ; b8
%l�REQ R0,R0,#%100
%v
%�SWI &100+19
%�SWI &100+8
%�SWI "OS_WriteC"
%�SWI &100
%�SWI &100
%�SWI &100
%�
%�
MOV R0,#0
%�TST R2,#%1000 ; r10
%��REQ R0,R0,#%1
%�TST R1,#%1000 ; g10
%��REQ R0,R0,#%10
%�TST R1,#%10000000 ; b10
&�REQ R0,R0,#%100
&
&SWI &100+19
& SWI &100+10
&*SWI "OS_WriteC"
&4SWI &100
&>SWI &100
&HSWI &100
&R
&\LDRB R1,[mem,#pal_regs+2]
&fLDRB R2,[mem,#pal_regs+3]
&p
&z
MOV R0,#0
&�TST R2,#%1 ; r4
&��REQ R0,R0,#%1
&�TST R2,#%10000 ; g4
&��REQ R0,R0,#%10
&�TST R1,#%10000 ; b4
&��REQ R0,R0,#%100
&�
&�SWI &100+19
&�SWI &100+4
&�SWI "OS_WriteC"
&�SWI &100
&�SWI &100
&�SWI &100
'
'
MOV R0,#0
'TST R2,#%10 ; r6
'$�REQ R0,R0,#%1
'.TST R2,#%100000 ; g6
'8�REQ R0,R0,#%10
'BTST R1,#%100000 ; b6
'L�REQ R0,R0,#%100
'V
'`SWI &100+19
'jSWI &100+6
'tSWI "OS_WriteC"
'~SWI &100
'�SWI &100
'�SWI &100
'�
'�
MOV R0,#0
'�TST R2,#%100 ; r12
'��REQ R0,R0,#%1
'�TST R1,#%100 ; g12
'��REQ R0,R0,#%10
'�TST R1,#%1000000 ; b12
'��REQ R0,R0,#%100
'�
'�SWI &100+19
(SWI &100+12
(
SWI "OS_WriteC"
(SWI &100
(SWI &100
((SWI &100
(2
(<
MOV R0,#0
(FTST R2,#%1000 ; r14
(P�REQ R0,R0,#%1
(ZTST R1,#%1000 ; g14
(d�REQ R0,R0,#%10
(nTST R1,#%10000000 ; b14
(x�REQ R0,R0,#%100
(�
(�SWI &100+19
(�SWI &100+14
(�SWI "OS_WriteC"
(�SWI &100
(�SWI &100
(�SWI &100
(�
(�LDRB R1,[mem,#pal_regs+4]
(�LDRB R2,[mem,#pal_regs+5]
(�
(�
MOV R0,#0
(�TST R2,#%1 ; r5
)�REQ R0,R0,#%1
)TST R2,#%10000 ; g5
)�REQ R0,R0,#%10
)"TST R1,#%10000 ; b5
),�REQ R0,R0,#%100
)6
)@SWI &100+19
)JSWI &100+5
)TSWI "OS_WriteC"
)^SWI &100
)hSWI &100
)rSWI &100
)|
)�
MOV R0,#0
)�TST R2,#%10 ; r7
)��REQ R0,R0,#%1
)�TST R2,#%100000 ; g7
)��REQ R0,R0,#%10
)�TST R1,#%100000 ; b7
)��REQ R0,R0,#%100
)�
)�SWI &100+19
)�SWI &100+7
)�SWI "OS_WriteC"
)�SWI &100
)�SWI &100
*SWI &100
*
*
MOV R0,#0
*&TST R2,#%100 ; r13
*0�REQ R0,R0,#%1
*:TST R1,#%100 ; g13
*D�REQ R0,R0,#%10
*NTST R1,#%1000000 ; b13
*X�REQ R0,R0,#%100
*b
*lSWI &100+19
*vSWI &100+13
*�SWI "OS_WriteC"
*�SWI &100
*�SWI &100
*�SWI &100
*�
*�
MOV R0,#0
*�TST R2,#%1000 ; r15
*��REQ R0,R0,#%1
*�TST R1,#%1000 ; g15
*��REQ R0,R0,#%10
*�TST R1,#%10000000 ; b15
*��REQ R0,R0,#%100
*�
+SWI &100+19
+SWI &100+15
+SWI "OS_WriteC"
+ SWI &100
+*SWI &100
+4SWI &100
+>
+HLDRB R1,[mem,#pal_regs+6]
+RLDRB R2,[mem,#pal_regs+7]
+\
+f
MOV R0,#0
+pTST R2,#%1 ; r1
+z�REQ R0,R0,#%1
+�TST R2,#%10000 ; g1
+��REQ R0,R0,#%10
+�TST R1,#%10000 ; b1
+��REQ R0,R0,#%100
+�
+�SWI &100+19
+�SWI &100+1
+�SWI "OS_WriteC"
+�SWI &100
+�SWI &100
+�SWI &100
+�
+�
MOV R0,#0
,TST R2,#%10 ; r3
,�REQ R0,R0,#%1
,TST R2,#%100000 ; g3
,$�REQ R0,R0,#%10
,.TST R1,#%100000 ; b3
,8�REQ R0,R0,#%100
,B
,LSWI &100+19
,VSWI &100+3
,`SWI "OS_WriteC"
,jSWI &100
,tSWI &100
,~SWI &100
,�
,�
MOV R0,#0
,�TST R2,#%100 ; r9
,��REQ R0,R0,#%1
,�TST R1,#%100 ; g9
,��REQ R0,R0,#%10
,�TST R1,#%1000000 ; b9
,��REQ R0,R0,#%100
,�
,�SWI &100+19
,�SWI &100+9
,�SWI "OS_WriteC"
-SWI &100
-
SWI &100
-SWI &100
-
-(
MOV R0,#0
-2TST R2,#%1000 ; r11
-<�REQ R0,R0,#%1
-FTST R1,#%1000 ; g11
-P�REQ R0,R0,#%10
-ZTST R1,#%10000000 ; b11
-d�REQ R0,R0,#%100
-n
-xSWI &100+19
-�SWI &100+11
-�SWI "OS_WriteC"
-�SWI &100
-�SWI &100
-�SWI &100
-�
-�MOV PC,R14
-�
-�.twocolpal
-�LDRB R1,[mem,#pal_regs+0]
-�LDRB R2,[mem,#pal_regs+1]
-�
MOV R0,#0
-�TST R2,#%1 ; r0
.�REQ R0,R0,#%1
.TST R2,#%10000 ; g0
.�REQ R0,R0,#%10
."TST R1,#%10000 ; b0
.,�REQ R0,R0,#%100
.6
.@SWI &100+19
.JSWI &100+0
.TSWI "OS_WriteC"
.^SWI &100
.hSWI &100
.rSWI &100
.|
.�
MOV R0,#0
.�TST R2,#%100 ; r1
.��REQ R0,R0,#%1
.�TST R1,#%100 ; g1
.��REQ R0,R0,#%10
.�TST R1,#%1000000 ; b1
.��REQ R0,R0,#%100
.�
.�SWI &100+19
.�SWI &100+3 ; mode 4 fix
.�SWI "OS_WriteC"
.�SWI &100
.�SWI &100
/SWI &100
/MOV PC,R14
/
/&.fourcolpal
/0LDRB R1,[mem,#pal_regs+0]
/:LDRB R2,[mem,#pal_regs+1]
/D
MOV R0,#0
/NTST R2,#%1 ; r0
/X�REQ R0,R0,#%1
/bTST R2,#%10000 ; g0
/l�REQ R0,R0,#%10
/vTST R1,#%10000 ; b0
/��REQ R0,R0,#%100
/�
/�SWI &100+19
/�SWI &100+0
/�SWI "OS_WriteC"
/�SWI &100
/�SWI &100
/�SWI &100
/�
/�
MOV R0,#0
/�TST R2,#%10 ; r1
/��REQ R0,R0,#%1
/�TST R2,#%100000 ; g1
0�REQ R0,R0,#%10
0TST R1,#%100000 ; b1
0�REQ R0,R0,#%100
0 
0*SWI &100+19
04SWI &100+1
0>SWI "OS_WriteC"
0HSWI &100
0RSWI &100
0\SWI &100
0f
0p
MOV R0,#0
0zTST R2,#%100 ; r2
0��REQ R0,R0,#%1
0�TST R1,#%100 ; g2
0��REQ R0,R0,#%10
0�TST R1,#%1000000 ; b2
0��REQ R0,R0,#%100
0�
0�SWI &100+19
0�SWI &100+2
0�SWI "OS_WriteC"
0�SWI &100
0�SWI &100
0�SWI &100
0�
1
MOV R0,#0
1TST R2,#%1000 ; r3
1�REQ R0,R0,#%1
1$TST R1,#%1000 ; g3
1.�REQ R0,R0,#%10
18TST R1,#%10000000 ; b3
1B�REQ R0,R0,#%100
1L
1VSWI &100+19
1`SWI &100+3
1jSWI "OS_WriteC"
1tSWI &100
1~SWI &100
1�SWI &100
1�
1�MOV PC,R14
1�
1�.write_screen_start_low
1�� R0,R0,#%11100000
1�STRB R0,[mem,#crt_regs+13]
1�%MOV R0,#1 : STRB R0,[mem,#tamper]
1�MOV PC,R14
1�
1�.read_screen_start_low
1�LDRB R0,[mem,#crt_regs+13]
2MOV PC,R14
2

2.write_screen_start_high
2� R0,R0,#%00111111
2(STRB R0,[mem,#crt_regs+12]
22%MOV R0,#1 : STRB R0,[mem,#tamper]
2<MOV PC,R14
2F
2P.read_screen_start_high
2ZLDRB R0,[mem,#crt_regs+12]
2dMOV PC,R14
2n
2x.write_iscr ; &FE00
2�
2�LDRB R1,[mem,#Eier]
2�
2�TST R0,#&80
2��REQ R1,R1,R0
2�BICNE R1,R1,R0
2�� R1,R1,#%01111100
2�STRB R1,[mem,#Eier]
2�MOV PC,R14
2�
2�
2�
2�TST R0,#&80
3;SWIEQ &100+�"["
3;SWINE &100+�"]"
3� R0,R0,#%01111100
3"STRB R0,[mem,#Eier]
3,;SWI &100+�"["
36;MOV R12,R0,LSL#24
3@;�print2(12)
3JMOV PC,R14
3T
3^.read_iscr  ; &FE00
3hLDRB R0,[mem,#Eifr]
3rBIC R1,R0,#%10
3|STRB R1,[mem,#Eifr]
3�
3�;LDRB R1,[mem,#Eier]
3�;�S R1,R1,R0
3�BICS R1,R0,#%11
3�#�RNE R0,R0,#%1 ; master IRQ bit
3�
3�;BIC R0,R0,#%1000000
3�;LDRB R1,[mem,#&C2]
3�;CMP R1,#1
3�;�REQ R0,R0,#%1000000
3�;CMP R1,#2
3�;BICEQ R0,R0,#%1000000
3�;�REQ R0,R0,#%1000000
4
4MOV PC,R14
4
4&.recalc_wrap
40LDRB R0,[mem,#Elatch]
4:$� R0,R0,#%00111000 ; screen mode
4DMOV R0,R0,LSR#1
4NADR R1,mode_table
4XLDR R0,[R1,R0]
4b
4lBIC F,F,#&FF000000
4vBIC F,F,#&00FF0000
4� �R F,F,R0,LSL#16 ; wrap_addr
4�
4�MOV PC,R14
4�
4�.counter_last
4�
EQUD 0
4�
4�.write_counter
4�LDRB R1,R14store+4
4�CMP R0,R1:�Q PC,R14
4�
4�STR R14,R14store
4�ADD R0,R0,#1
5STRB R0,R14store+4
5
5LDR R0,[mem,#min]
5 SUB R0,R0,time
5*LDR R1,[mem,#sound_timer]
54SUB R1,R1,R0
5>LDR R2,counter_last
5HSTR R1,counter_last
5RSUB R1,R2,R1
5\CMP R1,#200
5f;SWILT &100+�"s"
5pBGE skip_noise
5z
5�+MOV R0,#%11100100 ; low frequency noise
5�STRB R0,sound_data
5�MOV R0,#0 : BL sound_latch
5�,MOV R0,#%11110000 ; maximum volume noise
5�STRB R0,sound_data
5�MOV R0,#0 : BL sound_latch
5�*MOV R0,#%11011111 ; channel 1 volume 0
5�STRB R0,sound_data
5�MOV R0,#0 : BL sound_latch
5�
5�LDR PC,R14store
5�;B skip_noise2
5�
6.skip_noise
6&MOV R0,#%11111111 ; noise volume 0
6STRB R0,sound_data
6$MOV R0,#0 : BL sound_latch
6.
68.skip_noise2
6BLDRB R0,R14store+4
6L
6VMOV R0,R0,LSL#2
6`� R0,R0,#%1111
6j%�R R0,R0,#%11000000 ; tone 1 freq
6tSTRB R0,sound_data
6~
MOV R0,#0
6�BL sound_latch
6�LDRB R0,R14store+4
6�MOV R0,R0,LSR#2
6�STRB R0,sound_data
6�LDR R14,R14store
6�
MOV R0,#0
6�B sound_latch
6�
6�
.R14store
6�
EQUD 0
6�
EQUD 0
6�
7.write_latch
7
STRB R0,[mem,#Elatch]
7
7STR R14,R14store
7(TST R0,#%10
72)�Q R0,#%11011111 ; channel 1 volume 0
7<-MOVNE R0,#%11010000 ; channel 1 volume 15
7FSTRB R0,sound_data
7P
MOV R0,#0
7ZBL sound_latch
7d
7n&MOV R0,#%11111111 ; noise volume 0
7xSTRB R0,sound_data
7�MOV R0,#0 : BL sound_latch
7�
7�LDR R14,R14store
7�LDRB R0,[mem,#Elatch]
7�
7�$� R0,R0,#%00111000 ; screen mode
7�LDRB R1,mode
7�
CMP R0,R1
7�
�Q PC,R14
7�STRB R0,mode
7�
7�%MOV R1,#1 : STRB R1,[mem,#tamper]
7�
8CMP R0,#7 << 3
8�REQ F,F,#1 << 12
8BICNE F,F,#1 << 12
8"SWIEQ &100+12
8,
86CMP R0,#3 << 3
8@MOVLE R1,#80
8JMOVGT R1,#40
8T5STRB R1,[mem,#crt_regs+1] ; horizontal characters
8^MOV R0,R0,LSR#1
8hADR R1,mode_table
8rLDR R0,[R1,R0]
8|
8�BIC F,F,#&FF000000
8�BIC F,F,#&00FF0000
8� �R F,F,R0,LSL#16 ; wrap_addr
8�
8�MOV R0,R0,LSR#16
8�� R1,R0,#&FF
8�3STRB R1,[mem,#crt_regs+6] ; vertical characters
8�MOV R1,#&24
8�%STRB R1,[mem,#crt_regs+3] ; misc.
8�MOV R0,R0,LSR#8
8�STRB R0,[mem,#fe20]
8�-B poke_updatepixelV ; includes MOV PC,R14
8�
9	.mode
9
EQUD 0
9
9&.mode_table
90EQUD &9C203000 ; mode 0
9:EQUD &D8203000 ; mode 1
9DEQUD &F4203000 ; mode 2
9NEQUD &9C194000 ; mode 3
9XEQUD &88205800 ; mode 4
9bEQUD &C4205800 ; mode 5
9lEQUD &88196000 ; mode 6
9vEQUD &88196000 ; (mode 7)
9�
9�.read_latch
9�LDRB R0,[mem,#Elatch]
9�MOV PC,R14
9�
9�.write_ROMint
9�STRB R0,[mem,#ROMint]
9�LDRB R1,[mem,#Eifr]
9�TST R0,#%10000
9�BICNE R1,R1,#%100
9�;SWINE &100+�"/"
9�TST R0,#%100000
9�BICNE R1,R1,#%1000
:;SWINE &100+�"."
:TST R0,#%1000000
:9BICNE R1,R1,#%1000000 ; clear (some?) tape interrupts
: ;SWINE &100+�","
:*STRB R1,[mem,#Eifr]
:4� R0,R0,#%1111
:>
CMP R0,#8
:HCMPNE R0,#9
:R�REQ F,F,#1 << 11
:\BICNE F,F,#1 << 11
:f;SWIEQ &100+�"1"
:p;SWINE &100+�"0"
:zBNE romsel
:�MOV PC,R14
:�
:�.read_ROMint
:�.read_counter
:�.write_tape_data
:�.read_palette
:�MOV PC,R14
:�
:��sound_latch
:��sound_misc
:�
:�.osbput
:�MOV R0,A,LSR#24
;MOV R1,Y,LSR#24
;SWI "XOS_BPut"
;BVS swi_error
;$B opcode(&60) ; rts
;.
;8.osbget
;BMOV R0,A,LSR#24
;LMOV R1,Y,LSR#24
;VSWI "XOS_BGet"
;`BVS swi_error
;jMOV A,R0,LSL#24
;t�setupC
;~B opcode(&60) ; rts
;�
;�.swi_error
;�ADD mem,mem,#&100
;�ADD mem,mem,#&002
;�MOV R1,#0 ; BRK
;�STRB R1,[mem,#-2]
;�LDRB R1,[R0] ; error no
;�STRB R1,[mem,#-1]
;�ADD R0,R0,#4
;�MOV R14,#0
;�
;�.swi_err_loop
<LDRB R13,[R0,R14]
<
CMP R13,#0
<;MOV R13,#�"A"
<STRB R13,[mem,R14]
<(ADD R14,R14,#1
<2�Q R14,#255
<<CMP R14,#253
<FBLE swi_err_loop
<P
<ZMOV zpc,#&100 << 16
<dSUB mem,mem,#&100
<nSUB mem,mem,#&002
<x�fetch2
<�
<�
<�
<�
<�.strb_rom_ret
<�
<�.sheila
<�SUBS R2,R1,#&FE00
<�MOVLT PC,R14
<�SUBS R2,R2,#&100
<�MOVGE PC,R14
<�;BGE FFpage
<�
=TST time,#%1
=SUBNE time,time,#1
=SUBEQ time,time,#2
="
=,;STRB R0,[mem,R1]
=6BIC R1,R1,#&F0 ; elk
=@&SUB R2,mem,#&10000:STRB R0,[R2,R1]
=J
=T� R2,R1,#&F
=^;ADR R1,sheila_writetab
=hLDR PC,[PC,R2,LSL#2]
=r!EQUD 0 ; padding for pipeline
=|.sheila_writetab
=�]
=�� II%=0 � 15
=�	[OPTp
=�EQUD write_iscr
=�EQUD dummy
=�EQUD write_screen_start_low
=� EQUD write_screen_start_high
=�EQUD write_tape_data
=�EQUD write_ROMint
=�EQUD write_counter
=�EQUD write_latch
=��equd(8,write_palette)
=�]
>�
>	[OPTp
>
>&.ldrb_FFpage
>0;SUB time,time,#1
>:MOV PC,R14
>D
>N!.ldrb8000 ; greater than 8000
>X
>bCMP R1,#&FE00
>lBHS ldrb_sheila
>v
>�LDRB R0,[mem,R1]
>�MOV PC,R14
>�
>�
>�;MOV R1,R1,LSR#16
>�]
>�� master �
>�	[OPTp
>�$.ldrb16_8000 ; greater than 8000
>�
>�CMP R1,#&FE00 << 16
>�BHS ldrb16_sheila
>�
?LDRB R0,[mem,R1,LSR#16]
?MOV PC,R14
?
? .ldrb16_screen
?*CMP R1,#&8000 << 16
?4BHS ldrb16_8000
?>
?HLDRB R12,[mem,#ACCCON]
?R
?\CMP zpc,#&C000 << 16
?fMOVLT R13,R12,LSR#1
?pMOVGE R13,R12
?zCMP zpc,#&E000 << 16
?�5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
?�,                       ; we must look at
?�
?�TST R13,#%10
?�8SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
?�;�Q R13,mem
?�LDRNEB R0,[R13,R1,LSR#16]
?�LDREQB R0,[mem,R1,LSR#16]
?�MOV PC,R14
?�]
?��
?�	[OPTp
?�.ldrb16_screen
@CMP R1,#&FE00 << 16
@BHS ldrb16_sheila
@
@$LDRB R0,[mem,R1,LSR#16]
@.MOV PC,R14
@8]
@B�
@L
@V� master �
@`	[OPTp
@j
@t.ldrb_screen
@~!.ldrb3000 ; greater than 3000
@�
@�CMP R1,#&8000
@�BHS ldrb8000
@�
@�LDRB R12,[mem,#ACCCON]
@�
@�CMP zpc,#&C000 << 16
@�MOVLT R13,R12,LSR#1
@�MOVGE R13,R12
@�CMP zpc,#&E000 << 16
@�5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
@�,                       ; we must look at
A
A
TST R13,#%10
A8SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
A;�Q R13,mem
A(LDRNEB R0,[R13,R1]
A2LDREQB R0,[mem,R1]
A<MOV PC,R14
AF]
AP�
AZ	[OPTp
Ad.ldrb_screen
An!.ldrb3000 ; greater than 3000
AxCMP R1,#&FE00
A�BHS ldrb_sheila
A�LDRB R0,[mem,R1]
A�MOV PC,R14
A�]
A��
A�
A�	[OPTp
A�
A�.ldrb16_sheila
A�MOV R12,R1,LSR#16
A�B ldrb_sheila2
A�
A�.ldrb16_8000
BMOV R1,R1,LSR#16
B
B.ldrb_8000
B"CMP R1,#&FE00
B,BHS ldrb_sheila
B6CMP R1,#&C000
B@MOVHS PC,R14
BJ
BTCMP zpc,#&8000<<16
B^(BLO key_skip ; fix for stryker's run
Bh
BrTST F,#1 << 11
B|
�Q PC,R14
B�
.key_skip
B�
B�;SWI &100+�"K"
B�
B�STMFD mem,{R1-R2,R12-R13}
B�
B�; electron keyboard
B�� R0,R1,#&FF
B�� R0,R0,#&FF00
B� BIC R0,R0,#%1100000000000000
B�LDR R2,[mem,#key_addr]
B�MOV R12,#&F0
B�
CLDR R13,[R2,#0]
C�S R13,R13,R0
C�RNE R12,R12,#1
C&
C0LDR R13,[R2,#4]
C:�S R13,R13,R0
CD�RNE R12,R12,#2
CN
CXLDR R13,[R2,#8]
Cb�S R13,R13,R0
Cl�RNE R12,R12,#4
Cv
C�LDR R13,[R2,#12]
C��S R13,R13,R0
C��RNE R12,R12,#8
C�
C�MOV R0,R12
C�;�S R12,R12,#&F
C�;SWINE &100+�"K"
C�LDMEA mem,{R1-R2,R12-R13}
C�MOV PC,R14
C�
C�.ldrb_sheila
C�MOV R12,R1
C�
D.ldrb_sheila2
DLDRB R0,[mem,R12]
D
D SUBS R2,R12,#&FE00
D*MOVLT PC,R14
D4SUBS R2,R2,#&100
D>BGE ldrb_FFpage
DH
DRBIC R12,R12,#&F0 ; elk
D\'SUB R2,mem,#&10000:LDRB R0,[R2,R12]
Df
DpSUB time,time,#1
Dz
D�� R2,R12,#&FF
D�;ADR R1,sheila_readtab
D�LDR PC,[PC,R2,LSL#2]
D�!EQUD 0 ; padding for pipeline
D�.sheila_readtab
D�]
D�� II%=0 � 15
D�	[OPTp
D�EQUD read_iscr
D�EQUD dummy
D�EQUD read_screen_start_low
D�EQUD read_screen_start_high
D�EQUD read_tape_data
EEQUD read_ROMint
EEQUD read_counter
EEQUD read_latch
E$�equd(8,read_palette)
E.]
E8�
EB	[OPTp
EL
EV%�align16 ; fit into cache better?
E`
Ej�opcodes
Et
E~.patch_screen
E�MOV PC,R14
E�.patch_pixel
E�MOV PC,R14
E�
E�.end
E�]
E��
E�8�"Load <6502Em$Dir>.SRC.revtable "+�~(code+mode0tab)
E�8�"Load <6502Em$Dir>.SRC.mode1tab "+�~(code+mode1tab)
E�9�"Load <6502Em$Dir>.SRC.Hmode2tab "+�~(code+mode2tab)
E�9�"Load <6502Em$Dir>.SRC.Hmode4tab "+�~(code+mode4tab)
E�9�"Load <6502Em$Dir>.SRC.Hmode5tab "+�~(code+mode5tab)
F
F
�
F
FDE
F(�F
F2
F<
FFݤldrb2(R,S)
FP� R<>0 � S<>1 � �
FZ� master �
Fd	[OPTp
Fn;LDRB R,[mem,S]
Fx;CMP S,#&FE00
F�;BLHS ldrb_sheila
F�CMP S,#&3000
F�LDRLOB R,[mem,S]
F�BLHS ldrb_screen
F�]
F��
F�	[OPTp
F�LDRB R,[mem,S]
F�;CMP S,#&FE00
F�;BLHS ldrb_sheila
F�CMP S,#&8000
F�BLHS ldrb_8000
F�]
G�
G=""
G
G"ݤldrb16(R,S)
G,� R<>0 � S<>1 � �
G6� master �
G@	[OPTp
GJ;LDRB R,[mem,S,LSR#16]
GT;CMP S,#&FE00 << 16
G^;BLHS ldrb16_sheila
GhCMP S,#&3000 << 16
GrLDRLOB R,[mem,S,LSR#16]
G|BLHS ldrb16_screen
G�]
G��
G�	[OPTp
G�LDRB R,[mem,S,LSR#16]
G�;CMP S,#&FE00 << 16
G�;BLHS ldrb16_sheila
G�CMP S,#&8000 << 16
G�BLHS ldrb16_8000
G�]
G��
G�=""
G�
G�ݤstrb(R,S)
H� R<>0 � S<>1 � �
H	[OPTp
HCMP S,F,LSR#16 ; wrap_addr
H&;CMP S,#&3000
H0STRLTB R,[mem,S]
H:
BLGE strb
HD]
HN=""
HX
Hbݤstrb16(R,S)
Hl� R<>0 � S<>1 � �
Hv	[OPTp
H�;CMP S,#&C000 << 16
H�;STRLOB R,[mem,S,LSR#16]
H�MOV S,S,LSR#16
H�CMP S,F,LSR#16 ; wrap_addr
H�;CMP S,#&3000
H�STRLTB R,[mem,S]
H�BLGE strb ; 16
H�]
H�=""
H�
H�ݤshowregs
H�	[OPTp
H��print(zpc)
I
�print(A)
I
�print(X)
I
�print(Y)
I �print(SP)
I*
�print(F)
I4ADD R12,mem,#&DF00
I>LDRB R12,[R12,#&DA]
IHMOV R12,R12,LSL#24
IR�print2(12)
I\SWI &10A
If;SWI "OS_NewLine"
Ip]
Iz=""
I�
I�ݤprint(R)
I�
Ȏ R �
I�� zpc : A$=�print4(R)
I�.� F   : [OPTp:MOV R2,F,LSL#24:�print2(2):]
I�
I�A$=�print2(R)
I��
I�=""
I�
I�� A   : A$=�print2(R)
I�� X   : A$=�print2(R)
I�� Y   : A$=�print2(R)
J-� SP  : [OPTp:SWI &100+�"1":�print2(SP):]
J� F   : A$=�printflags
J�
J$=""
J.
J8ݤprintflags
JB	[OPTp
JL4TST F,#%1<<7 : SWIEQ &100+�"n" : SWINE &100+�"N"
JV4TST F,#%1<<6 : SWIEQ &100+�"v" : SWINE &100+�"V"
J`4TST F,#%1<<5 : SWIEQ &100+�"0" : SWINE &100+�"1"
Jj4TST F,#%1<<4 : SWIEQ &100+�"b" : SWINE &100+�"B"
Jt4TST F,#%1<<3 : SWIEQ &100+�"d" : SWINE &100+�"D"
J~4TST F,#%1<<2 : SWIEQ &100+�"i" : SWINE &100+�"I"
J�4TST F,#%1<<1 : SWIEQ &100+�"z" : SWINE &100+�"Z"
J�4TST F,#%1<<0 : SWIEQ &100+�"c" : SWINE &100+�"C"
J�SWI &120
J�]
J�=""
J�
J�ݤprint2(R)
J��I%
J�	[OPTp
J�MOV R1,R
J�]
J�
�I%=0 � 1
K
[OPT p
K
MOV R1,R1,ROR#28
K� R0,R1,#&F
KCMP R0,#10
K(ADDGE R0,R0,#7
K2ADD R0,R0,#48
K<SWI "OS_WriteC"
KF]
KP�
KZ	[OPTp
KdSWI &120
Kn]
Kx=""
K�
K�ݤprint4(R)
K��I%
K�	[OPTp
K�MOV R1,R
K�]
K�
�I%=0 � 3
K�
[OPT p
K�MOV R1,R1,ROR#28
K�� R0,R1,#&F
K�CMP R0,#10
K�ADDGE R0,R0,#7
K�ADD R0,R0,#48
LSWI "OS_WriteC"
L]
L�
L"	[OPTp
L,SWI &120
L6]
L@=""
LJ
LTݤprint32(R)
L^�I%
Lh	[OPTp
LrMOV R1,R
L|]
L��I%=0 � 31
L�
[OPT p
L�MOV R1,R1,ROR#28
L�� R0,R1,#&F
L�CMP R0,#10
L�ADDGE R0,R0,#7
L�ADD R0,R0,#48
L�SWI "OS_WriteC"
L�]
L��
L�	[OPTp
L�SWI &120
L�]
M=""
M
Mݤprints(A$)
M&	[OPTp
M0SWI "OS_WriteS"
M:EQUS A$
MDEQUB 10
MNEQUB 13
MX
EQUB 0
Mb	ALIGN
Ml]
Mv=""
M�
M�ݤundoc(A%)
M�� opcode%<>A% � �
M�	[OPTp
M�;TST F,#%1000
M�;SWIEQ &100+�"d"
M�;SWINE &100+�"D"
M�
M�!;SWI &100+�(��"0"+�~A%,2),1))
M�;SWI &100+�(��~A%,1))
M�;SWI &100+�" "
M�;�print(zpc)
M�!;SWI &100+�" ":;SWI &100+�" "
N
N ;MOV R0,#15 : ;SWI "OS_Byte"
N
;SWI 4
N ]
N*=""
N4
N>ݤequd(A%,B%)
NH�I%
NR�I%=1 � A%
N\	[OPTp
NfEQUD B%
Np]
Nz�
N�=""
N�
N�ݤdo_interrupt
N�	[OPTp
N�;SWI &100+�"I"
N�MOV R0,zpc,LSR#24
N��push(0)
N�MOV R0,zpc,LSR#16
N��push(0)
N�$BIC F,F,#%10000 ; clear BRK flag
N��push(F)
N��R F,F,#%100 ; !!!!!!
N�"MOV R0,#&FF00 : ADD R0,R0,#&FE
OLDR zpc,[mem,R0]
OMOV zpc,zpc,LSL#16
O]
O$=""
O.
O8ݤdivmod(A,B,C,D,E)
OBdiv%+=1
OL	[OPTp
OVMOV C,#1
O`MOV D,#0
OjMOV E,B
Ot.divloop1(div%)
O~MOV B,B,LSL#1
O�MOV C,C,LSL#1
O�CMP B,A
O�BLO divloop1(div%)
O�
O�.divloop2(div%)
O�CMP B,A : BLS divjump(div%)
O�CMP B,E : BLS divjump(div%)
O�MOV B,B,LSR#1
O�MOV C,C,LSR#1
O�B divloop2(div%)
O�.divjump(div%)
O�CMP B,A
PSUBLS A,A,B
P
ADDLS D,D,C
PCMP B,E
PBHI divloop2(div%)
P(]
P2=""
P<
PFݤshadow
PP� master �
PZ	[OPTp
PdLDRB R2,[mem,#ACCCON]
Pn;� R2,R2,R2,LSR#2
PxTST R2,#%1
P�SUBNE R13,mem,#&13000
P��Q R13,mem
P�]
P��
P�	[OPTp
P�MOV R13,mem
P�]
P��
P�=""
P�
P���clearmem(S%,E%)
P�
P%=buffer
P�	[OPT2
P�EQUD S% ; memory
QEQUD E% ; memory+&8000
Q
.clear
Q
MOV R0,#0
Q"LDR R1,buffer
Q,LDR R2,buffer+4
Q6	.loop
Q@STR R0,[R1],#4
QJ
CMP R1,R2
QTBNE loop
Q^MOV PC,R14
Qh]
Qr� clear
Q|�
Q�
Q�ݤfetch2
Q�	[OPTp
Q�LDRB R2,[mem,zpc,LSR#16]
Q�ADD PC,table,R2,LSL#8
Q�]
Q�=""
Q�
Q�ݤfetch3(N%,T%)
Q�+� N%<>0 � [OPTp:ADD zpc,zpc,#N% << 16:]
Q�	[OPTp
Q��showregs2
Q�SUBS time,time,#T%
RLDRPLB R2,[mem,zpc,LSR#16]
RADDPL PC,table,R2,LSL#8
RB fetch2
R&]
R0=""
R:
RDݤfetch(N%,T%)
RN+� N%<>0 � [OPTp:ADD zpc,zpc,#N% << 16:]
RX	[OPTp
Rb�showregs2
RlSUBS time,time,#T%
RvLDRPLB R2,[mem,zpc,LSR#16]
R�ADDPL PC,table,R2,LSL#8
R�B fetch2
R�]
R�opcode%+=1
R�� bcd_loop%=0 �
R�� opcode(opcode%-1)=0 � �
R�"� opcode(opcode%)<>0 � p=0 � �
R�+� P%-opcode(0)>opcode%*4*64 � �~opcode%
R�P%=opcode(0)+opcode%*4*64
R�O%=code+P%
R��
R�P%=bcd(0)+opcode%*4*64
R�O%=code+P%
S�
S=""
Sݤbcd(A%) :
S $� P%>opcode(0)+(A%+256)*4*64 � �
S*1P%=opcode(0)+(A%+256)*4*64 : O%=code+P% : =""
S4
S>
ݤalign16
SHȕ (P% � 15)<>0
SRP%+=1 : O%+=1
S\�
Sf=""
Sp� �error
Sz�:� " at line ";�
S��
S�
S�ݤshowregs2
S�	[OPTp
S�;BL show_regs
S�]
S�=""
�
00000000  0d 00 0a 0e f4 20 3e 20  36 35 30 32 45 6d 0d 00  |..... > 6502Em..|
00000010  14 0c 6d 61 73 74 65 72  3d a3 0d 00 1e 3b 2a 52  |..master=....;*R|
00000020  4d 45 4e 53 55 52 45 20  36 35 30 32 53 75 70 70  |MENSURE 6502Supp|
00000030  6f 72 74 20 30 2e 30 30  20 52 4d 52 75 6e 20 3c  |ort 0.00 RMRun <|
00000040  36 35 30 32 45 6d 24 52  65 73 3e 2e 36 35 53 75  |6502Em$Res>.65Su|
00000050  70 70 6f 72 74 0d 00 28  0e ee 20 85 20 f2 65 72  |pport..(.. . .er|
00000060  72 6f 72 0d 00 32 06 f4  20 0d 00 3c 04 0d 00 46  |ror..2.. ..<...F|
00000070  10 49 4f 5f 50 6f 64 75  6c 65 25 3d a3 0d 00 50  |.IO_Podule%=...P|
00000080  04 0d 00 5a 39 de 20 6f  70 63 6f 64 65 28 26 31  |...Z9. opcode(&1|
00000090  30 30 29 2c 20 62 63 64  28 26 31 30 30 29 2c 20  |00), bcd(&100), |
000000a0  63 6f 64 65 20 35 30 30  2a 31 30 32 34 2c 20 62  |code 500*1024, b|
000000b0  75 66 66 65 72 20 31 30  30 30 0d 00 64 0d de 20  |uffer 1000..d.. |
000000c0  6c 25 28 31 30 30 29 0d  00 6e 2b de 20 64 69 76  |l%(100)..n+. div|
000000d0  6c 6f 6f 70 31 28 31 30  29 2c 64 69 76 6c 6f 6f  |loop1(10),divloo|
000000e0  70 32 28 31 30 29 2c 64  69 76 6a 75 6d 70 28 31  |p2(10),divjump(1|
000000f0  30 29 0d 00 78 0a 64 69  76 25 3d 30 0d 00 82 20  |0)..x.div%=0... |
00000100  c8 9b 20 22 3c 36 35 30  32 45 6d 24 44 69 72 3e  |.. "<6502Em$Dir>|
00000110  2e 53 72 63 2e 53 6f 75  6e 64 36 22 0d 00 8c 21  |.Src.Sound6"...!|
00000120  c8 9b 20 22 3c 36 35 30  32 45 6d 24 44 69 72 3e  |.. "<6502Em$Dir>|
00000130  2e 53 72 63 2e 4f 70 63  6f 64 65 73 22 0d 00 96  |.Src.Opcodes"...|
00000140  20 c8 9b 20 22 3c 36 35  30 32 45 6d 24 44 69 72  | .. "<6502Em$Dir|
00000150  3e 2e 53 72 63 2e 53 63  72 65 65 6e 22 0d 00 a0  |>.Src.Screen"...|
00000160  04 0d 00 aa 0f 65 6c 65  63 74 72 6f 6e 25 3d b9  |.....electron%=.|
00000170  0d 00 b4 0d f2 61 73 73  65 6d 62 6c 65 0d 00 be  |.....assemble...|
00000180  04 0d 00 c8 15 f1 28 65  6e 64 2d 73 74 61 72 74  |......(end-start|
00000190  29 2f 31 30 32 34 0d 00  d2 38 ff 20 22 53 61 76  |)/1024...8. "Sav|
000001a0  65 20 3c 36 35 30 32 45  6d 24 44 69 72 3e 2e 43  |e <6502Em$Dir>.C|
000001b0  6f 64 65 45 20 22 2b c3  7e 63 6f 64 65 2b 22 20  |odeE "+.~code+" |
000001c0  22 2b c3 7e 28 65 6e 64  2b 63 6f 64 65 29 0d 00  |"+.~(end+code)..|
000001d0  dc 27 ff 20 22 53 65 74  54 79 70 65 20 3c 36 35  |.'. "SetType <65|
000001e0  30 32 45 6d 24 44 69 72  3e 2e 43 6f 64 65 45 20  |02Em$Dir>.CodeE |
000001f0  44 61 74 61 22 0d 00 e6  04 0d 00 f0 05 e0 0d 00  |Data"...........|
00000200  fa 04 0d 01 04 30 ff 22  4c 4f 41 44 20 3c 36 35  |.....0."LOAD <65|
00000210  30 32 45 6d 24 44 69 72  3e 2e 4f 53 31 2c 32 20  |02Em$Dir>.OS1,2 |
00000220  22 2b c3 7e 28 6d 65 6d  6f 72 79 2b 26 43 30 30  |"+.~(memory+&C00|
00000230  30 29 0d 01 0e 32 ff 22  4c 4f 41 44 20 3c 36 35  |0)...2."LOAD <65|
00000240  30 32 45 6d 24 44 69 72  3e 2e 42 41 53 49 43 49  |02Em$Dir>.BASICI|
00000250  49 20 22 2b c3 7e 28 6d  65 6d 6f 72 79 2b 26 38  |I "+.~(memory+&8|
00000260  30 30 30 29 0d 01 18 04  0d 01 22 08 eb 20 31 32  |000)......".. 12|
00000270  0d 01 2c 0f d6 20 69 6e  69 74 2b 63 6f 64 65 0d  |..,.. init+code.|
00000280  01 36 0a f1 22 42 4f 4f  22 0d 01 40 04 0d 01 4a  |.6.."BOO"..@...J|
00000290  19 21 70 63 5f 73 74 6f  72 65 3d 26 44 39 43 44  |.!pc_store=&D9CD|
000002a0  20 3c 3c 20 31 36 0d 01  54 04 0d 01 5e 14 44 25  | << 16..T...^.D%|
000002b0  3d 6d 65 6d 6f 72 79 20  3a 20 f4 20 52 33 0d 01  |=memory : . R3..|
000002c0  68 10 d6 20 73 74 61 72  74 2b 63 6f 64 65 0d 01  |h.. start+code..|
000002d0  72 04 0d 01 7c 05 e0 0d  01 86 0e dd f2 61 73 73  |r...|........ass|
000002e0  65 6d 62 6c 65 0d 01 90  21 f2 63 6c 65 61 72 6d  |emble...!.clearm|
000002f0  65 6d 28 63 6f 64 65 2c  63 6f 64 65 2b 32 30 30  |em(code,code+200|
00000300  2a 31 30 32 34 29 0d 01  9a 1c 52 3d 31 30 30 30  |*1024)....R=1000|
00000310  20 3a 20 53 3d 31 30 30  30 20 3a 20 54 3d 31 30  | : S=1000 : T=10|
00000320  30 30 0d 01 a4 04 0d 01  ae 07 41 3d 34 0d 01 b8  |00........A=4...|
00000330  07 58 3d 35 0d 01 c2 07  59 3d 36 0d 01 cc 07 46  |.X=5....Y=6....F|
00000340  3d 37 0d 01 d6 08 53 50  3d 38 0d 01 e0 09 6d 65  |=7....SP=8....me|
00000350  6d 3d 33 0d 01 ea 0a 74  69 6d 65 3d 39 0d 01 f4  |m=3....time=9...|
00000360  0a 7a 70 63 3d 31 30 0d  01 fe 0c 74 61 62 6c 65  |.zpc=10....table|
00000370  3d 31 31 0d 02 08 04 0d  02 12 0d 61 3d 2d 26 31  |=11........a=-&1|
00000380  30 30 2b 30 0d 02 1c 0d  78 3d 2d 26 31 30 30 2b  |00+0....x=-&100+|
00000390  34 0d 02 26 0d 79 3d 2d  26 31 30 30 2b 38 0d 02  |4..&.y=-&100+8..|
000003a0  30 0e 66 3d 2d 26 31 30  30 2b 31 32 0d 02 3a 0f  |0.f=-&100+12..:.|
000003b0  73 70 3d 2d 26 31 30 30  2b 31 36 0d 02 44 15 70  |sp=-&100+16..D.p|
000003c0  63 5f 73 74 6f 72 65 3d  2d 26 31 30 30 2b 32 30  |c_store=-&100+20|
000003d0  0d 02 4e 13 54 31 6d 6f  64 65 3d 2d 26 31 30 30  |..N.T1mode=-&100|
000003e0  2b 32 34 0d 02 58 13 54  32 6d 6f 64 65 3d 2d 26  |+24..X.T2mode=-&|
000003f0  31 30 30 2b 32 35 0d 02  62 13 54 33 6d 6f 64 65  |100+25..b.T3mode|
00000400  3d 2d 26 31 30 30 2b 32  36 0d 02 6c 13 54 34 6d  |=-&100+26..l.T4m|
00000410  6f 64 65 3d 2d 26 31 30  30 2b 32 37 0d 02 76 0f  |ode=-&100+27..v.|
00000420  54 31 3d 2d 26 31 30 30  2b 32 38 0d 02 80 10 54  |T1=-&100+28....T|
00000430  31 52 3d 2d 26 31 30 30  2b 33 32 0d 02 8a 0f 54  |1R=-&100+32....T|
00000440  32 3d 2d 26 31 30 30 2b  33 36 0d 02 94 10 54 32  |2=-&100+36....T2|
00000450  52 3d 2d 26 31 30 30 2b  34 30 0d 02 9e 0f 54 33  |R=-&100+40....T3|
00000460  3d 2d 26 31 30 30 2b 34  34 0d 02 a8 10 54 33 52  |=-&100+44....T3R|
00000470  3d 2d 26 31 30 30 2b 34  38 0d 02 b2 0f 54 34 3d  |=-&100+48....T4=|
00000480  2d 26 31 30 30 2b 35 32  0d 02 bc 10 54 34 52 3d  |-&100+52....T4R=|
00000490  2d 26 31 30 30 2b 35 36  0d 02 c6 13 73 63 72 65  |-&100+56....scre|
000004a0  65 6e 3d 2d 26 31 30 30  2b 36 30 0d 02 d0 14 73  |en=-&100+60....s|
000004b0  63 72 65 65 6e 52 3d 2d  26 31 30 30 2b 36 34 0d  |creenR=-&100+64.|
000004c0  02 da 10 6d 69 6e 3d 2d  26 31 30 30 2b 36 38 0d  |...min=-&100+68.|
000004d0  02 e4 18 73 6f 75 6e 64  5f 74 69 6d 65 72 3d 2d  |...sound_timer=-|
000004e0  26 31 30 30 2b 37 32 0d  02 ee 10 69 66 72 3d 2d  |&100+72....ifr=-|
000004f0  26 31 30 30 2b 37 36 0d  02 f8 10 69 65 72 3d 2d  |&100+76....ier=-|
00000500  26 31 30 30 2b 37 37 0d  03 02 11 69 66 72 32 3d  |&100+77....ifr2=|
00000510  2d 26 31 30 30 2b 37 38  0d 03 0c 11 69 65 72 32  |-&100+78....ier2|
00000520  3d 2d 26 31 30 30 2b 37  39 0d 03 16 1c 61 72 63  |=-&100+79....arc|
00000530  5f 73 63 72 65 65 6e 73  74 61 72 74 3d 2d 26 31  |_screenstart=-&1|
00000540  30 30 2b 38 30 0d 03 20  13 74 61 6d 70 65 72 3d  |00+80.. .tamper=|
00000550  2d 26 31 30 30 2b 38 34  0d 03 2a 1a 63 75 72 73  |-&100+84..*.curs|
00000560  6f 72 5f 74 61 6d 70 65  72 3d 2d 26 31 30 30 2b  |or_tamper=-&100+|
00000570  38 38 0d 03 34 16 52 4f  4d 53 45 4c 5f 4f 4e 3d  |88..4.ROMSEL_ON=|
00000580  2d 26 31 30 30 2b 39 32  0d 03 3e 10 72 6f 6d 3d  |-&100+92..>.rom=|
00000590  2d 26 31 30 30 2b 39 36  0d 03 48 14 52 4f 4d 52  |-&100+96..H.ROMR|
000005a0  41 4d 3d 2d 26 31 30 30  2b 31 30 30 0d 03 52 12  |AM=-&100+100..R.|
000005b0  66 65 32 30 3d 2d 26 31  30 30 2b 31 31 36 0d 03  |fe20=-&100+116..|
000005c0  5c 19 74 61 70 65 5f 68  61 6e 64 6c 65 3d 2d 26  |\.tape_handle=-&|
000005d0  31 30 30 2b 31 31 37 0d  03 66 16 63 72 74 5f 72  |100+117..f.crt_r|
000005e0  65 67 73 3d 2d 26 31 30  30 2b 31 32 30 0d 03 70  |egs=-&100+120..p|
000005f0  15 73 63 72 61 74 63 68  3d 2d 26 31 30 30 2b 31  |.scratch=-&100+1|
00000600  34 30 0d 03 7a 16 70 61  6c 5f 72 65 67 73 3d 2d  |40..z.pal_regs=-|
00000610  26 31 30 30 2b 31 34 38  0d 03 84 15 50 61 6c 65  |&100+148....Pale|
00000620  74 74 65 3d 2d 26 31 30  30 2b 31 36 34 0d 03 8e  |tte=-&100+164...|
00000630  14 41 43 43 43 4f 4e 3d  2d 26 31 30 30 2b 31 37  |.ACCCON=-&100+17|
00000640  32 0d 03 98 16 70 61 74  63 68 5f 6f 6e 3d 2d 26  |2....patch_on=-&|
00000650  31 30 30 2b 31 37 36 0d  03 a2 18 70 61 6c 5f 74  |100+176....pal_t|
00000660  61 6d 70 65 72 3d 2d 26  31 30 30 2b 31 37 37 0d  |amper=-&100+177.|
00000670  03 ac 16 6c 61 73 74 6d  6f 64 65 3d 2d 26 31 30  |...lastmode=-&10|
00000680  30 2b 31 37 38 0d 03 b6  12 66 65 31 30 3d 2d 26  |0+178....fe10=-&|
00000690  31 30 30 2b 31 37 39 0d  03 c0 18 74 61 70 65 5f  |100+179....tape_|
000006a0  63 6f 75 6e 74 3d 2d 26  31 30 30 2b 31 38 30 0d  |count=-&100+180.|
000006b0  03 ca 16 6b 65 79 5f 61  64 64 72 3d 2d 26 31 30  |...key_addr=-&10|
000006c0  30 2b 31 38 34 0d 03 d4  14 45 6c 61 74 63 68 3d  |0+184....Elatch=|
000006d0  2d 26 31 30 30 2b 31 38  38 0d 03 de 12 45 69 66  |-&100+188....Eif|
000006e0  72 3d 2d 26 31 30 30 2b  31 38 39 0d 03 e8 12 45  |r=-&100+189....E|
000006f0  69 65 72 3d 2d 26 31 30  30 2b 31 39 30 0d 03 f2  |ier=-&100+190...|
00000700  14 52 4f 4d 69 6e 74 3d  2d 26 31 30 30 2b 31 39  |.ROMint=-&100+19|
00000710  31 0d 03 fc 14 73 70 65  65 64 52 3d 2d 26 31 30  |1....speedR=-&10|
00000720  30 2b 31 39 36 0d 04 06  11 65 6e 44 3d 2d 26 31  |0+196....enD=-&1|
00000730  30 30 2b 31 39 32 0d 04  10 04 0d 04 1a 28 65 6e  |00+192.......(en|
00000740  44 3d 2d 26 31 30 30 2b  32 30 30 20 3a 20 f4 20  |D=-&100+200 : . |
00000750  64 6f 6e 27 74 20 67 6f  20 70 61 73 74 20 74 68  |don't go past th|
00000760  69 73 0d 04 24 04 0d 04  2e 10 e3 70 3d 34 20 b8  |is..$......p=4 .|
00000770  20 36 20 88 20 32 0d 04  38 0a 64 69 76 25 3d 30  | 6 . 2..8.div%=0|
00000780  0d 04 42 0b 4f 25 3d 63  6f 64 65 0d 04 4c 08 6c  |..B.O%=code..L.l|
00000790  25 3d 30 0d 04 56 08 50  25 3d 30 0d 04 60 0d 6f  |%=0..V.P%=0..`.o|
000007a0  70 63 6f 64 65 25 3d 30  0d 04 6a 09 5b 4f 50 54  |pcode%=0..j.[OPT|
000007b0  70 0d 04 74 29 2e 4f 61  20 20 20 20 20 20 20 20  |p..t).Oa        |
000007c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000007d0  20 20 20 20 45 51 55 44  20 30 0d 04 7e 29 2e 4f  |    EQUD 0..~).O|
000007e0  78 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |x               |
000007f0  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00000800  44 20 30 0d 04 88 29 2e  4f 79 20 20 20 20 20 20  |D 0...).Oy      |
00000810  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000820  20 20 20 20 20 20 45 51  55 44 20 30 0d 04 92 29  |      EQUD 0...)|
00000830  2e 4f 66 20 20 20 20 20  20 20 20 20 20 20 20 20  |.Of             |
00000840  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000850  51 55 44 20 30 0d 04 9c  29 2e 4f 73 70 20 20 20  |QUD 0...).Osp   |
00000860  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000870  20 20 20 20 20 20 20 20  45 51 55 44 20 30 0d 04  |        EQUD 0..|
00000880  a6 29 2e 4f 70 63 5f 73  74 6f 72 65 20 20 20 20  |.).Opc_store    |
00000890  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000008a0  20 45 51 55 44 20 30 0d  04 b0 2c 2e 73 74 61 72  | EQUD 0...,.star|
000008b0  74 5f 6f 66 66 73 65 74  20 20 20 20 20 20 20 20  |t_offset        |
000008c0  20 20 20 20 20 20 20 20  20 45 51 55 44 20 73 74  |         EQUD st|
000008d0  61 72 74 0d 04 ba 28 2e  74 72 61 63 65 20 20 20  |art...(.trace   |
000008e0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000008f0  20 20 20 20 20 45 51 55  44 20 30 0d 04 c4 28 2e  |     EQUD 0...(.|
00000900  74 72 61 63 65 32 20 20  20 20 20 20 20 20 20 20  |trace2          |
00000910  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00000920  44 20 30 0d 04 ce 2b 2e  69 6e 69 74 5f 61 64 64  |D 0...+.init_add|
00000930  72 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r               |
00000940  20 20 20 20 20 45 51 55  44 20 69 6e 69 74 0d 04  |     EQUD init..|
00000950  d8 37 2e 63 72 74 5f 61  64 64 72 20 20 20 20 20  |.7.crt_addr     |
00000960  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000970  45 51 55 44 20 30 20 3b  20 77 61 73 20 63 72 74  |EQUD 0 ; was crt|
00000980  5f 72 65 67 73 0d 04 e2  31 2e 54 31 5f 61 64 64  |_regs...1.T1_add|
00000990  72 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r               |
000009a0  20 20 20 20 20 20 20 45  51 55 44 20 30 20 3b 20  |       EQUD 0 ; |
000009b0  77 61 73 20 54 31 0d 04  ec 2e 2e 69 66 72 5f 61  |was T1.....ifr_a|
000009c0  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
000009d0  20 20 20 20 20 20 20 20  45 51 55 44 20 30 20 3b  |        EQUD 0 ;|
000009e0  20 69 66 72 0d 04 f6 39  2e 63 6f 6c 75 6d 6e 5f  | ifr...9.column_|
000009f0  63 6f 75 6e 74 65 72 5f  61 64 64 72 20 20 20 20  |counter_addr    |
00000a00  20 20 20 20 20 20 45 51  55 44 20 30 20 3b 20 63  |      EQUD 0 ; c|
00000a10  6f 6c 75 6d 6e 5f 63 6f  75 6e 74 65 72 0d 05 00  |olumn_counter...|
00000a20  31 2e 52 4f 4d 53 45 4c  5f 61 64 64 72 20 20 20  |1.ROMSEL_addr   |
00000a30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000a40  51 55 44 20 30 20 3b 20  52 4f 4d 53 45 4c 0d 05  |QUD 0 ; ROMSEL..|
00000a50  0a 32 2e 50 61 6c 65 74  74 65 5f 61 64 64 72 20  |.2.Palette_addr |
00000a60  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000a70  45 51 55 44 20 30 20 3b  20 50 61 6c 65 74 74 65  |EQUD 0 ; Palette|
00000a80  0d 05 14 35 2e 73 70 65  65 64 5f 61 64 64 72 20  |...5.speed_addr |
00000a90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000aa0  20 20 45 51 55 44 20 73  63 72 65 65 6e 5f 63 6f  |  EQUD screen_co|
00000ab0  75 6e 74 2b 34 0d 05 1e  30 2e 65 6c 69 74 65 5f  |unt+4...0.elite_|
00000ac0  61 64 64 72 20 20 20 20  20 20 20 20 20 20 20 20  |addr            |
00000ad0  20 20 20 20 20 20 20 45  51 55 44 20 30 20 3b 20  |       EQUD 0 ; |
00000ae0  65 6c 69 74 65 0d 05 28  3e 2e 6f 70 63 6f 5f 61  |elite..(>.opco_a|
00000af0  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000b00  20 20 20 20 20 20 20 45  51 55 44 20 6f 70 63 6f  |       EQUD opco|
00000b10  64 65 28 30 29 20 3b 20  6f 70 63 6f 64 65 74 61  |de(0) ; opcodeta|
00000b20  62 6c 65 0d 05 32 2d 2e  62 63 64 5f 61 64 64 72  |ble..2-.bcd_addr|
00000b30  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000b40  20 20 20 20 20 45 51 55  44 20 62 63 64 28 30 29  |     EQUD bcd(0)|
00000b50  0d 05 3c 36 2e 73 68 65  69 6c 61 5f 77 72 69 74  |..<6.sheila_writ|
00000b60  65 74 61 62 5f 61 64 64  72 20 20 20 20 20 20 20  |etab_addr       |
00000b70  20 20 45 51 55 44 20 73  68 65 69 6c 61 5f 77 72  |  EQUD sheila_wr|
00000b80  69 74 65 74 61 62 0d 05  46 35 2e 73 68 65 69 6c  |itetab..F5.sheil|
00000b90  61 5f 72 65 61 64 74 61  62 5f 61 64 64 72 20 20  |a_readtab_addr  |
00000ba0  20 20 20 20 20 20 20 20  45 51 55 44 20 73 68 65  |        EQUD she|
00000bb0  69 6c 61 5f 72 65 61 64  74 61 62 0d 05 50 37 2e  |ila_readtab..P7.|
00000bc0  73 6f 75 6e 64 5f 76 65  63 74 6f 72 73 5f 61 64  |sound_vectors_ad|
00000bd0  64 72 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |dr           EQU|
00000be0  44 20 73 6f 75 6e 64 5f  62 75 66 66 73 5f 61 64  |D sound_buffs_ad|
00000bf0  64 72 0d 05 5a 33 2e 70  61 74 63 68 5f 61 64 64  |dr..Z3.patch_add|
00000c00  72 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r               |
00000c10  20 20 20 20 45 51 55 44  20 70 61 74 63 68 5f 73  |    EQUD patch_s|
00000c20  63 72 65 65 6e 0d 05 64  04 0d 05 6e 30 2e 69 6e  |creen..d...n0.in|
00000c30  69 74 20 3b 20 6f 6e 6c  79 20 63 61 6c 6c 65 64  |it ; only called|
00000c40  20 6f 6e 63 65 2c 20 62  65 66 6f 72 65 20 63 6f  | once, before co|
00000c50  64 65 20 63 61 6c 6c 65  64 0d 05 78 0c 41 44 52  |de called..x.ADR|
00000c60  20 52 30 2c 30 0d 05 82  15 3b 4c 44 52 20 52 31  | R0,0....;LDR R1|
00000c70  2c 6f 70 63 6f 5f 61 64  64 72 0d 05 8c 11 3b 41  |,opco_addr....;A|
00000c80  44 44 20 52 31 2c 52 31  2c 52 30 0d 05 96 14 3b  |DD R1,R1,R0....;|
00000c90  4c 44 52 20 52 32 2c 62  63 64 5f 61 64 64 72 0d  |LDR R2,bcd_addr.|
00000ca0  05 a0 11 3b 41 44 44 20  52 32 2c 52 32 2c 52 30  |...;ADD R2,R2,R0|
00000cb0  0d 05 aa 1f 4c 44 52 20  52 35 2c 73 68 65 69 6c  |....LDR R5,sheil|
00000cc0  61 5f 77 72 69 74 65 74  61 62 5f 61 64 64 72 0d  |a_writetab_addr.|
00000cd0  05 b4 10 41 44 44 20 52  35 2c 52 35 2c 52 30 0d  |...ADD R5,R5,R0.|
00000ce0  05 be 1e 4c 44 52 20 52  36 2c 73 68 65 69 6c 61  |...LDR R6,sheila|
00000cf0  5f 72 65 61 64 74 61 62  5f 61 64 64 72 0d 05 c8  |_readtab_addr...|
00000d00  10 41 44 44 20 52 36 2c  52 36 2c 52 30 0d 05 d2  |.ADD R6,R6,R0...|
00000d10  0f 4d 4f 56 20 52 33 2c  23 32 35 35 0d 05 dc 0e  |.MOV R3,#255....|
00000d20  2e 69 6e 69 74 5f 6c 6f  6f 70 0d 05 e6 19 3b 4c  |.init_loop....;L|
00000d30  44 52 20 52 34 2c 5b 52  31 2c 52 33 2c 4c 53 4c  |DR R4,[R1,R3,LSL|
00000d40  23 32 5d 0d 05 f0 11 3b  41 44 44 20 52 34 2c 52  |#2]....;ADD R4,R|
00000d50  34 2c 52 30 0d 05 fa 19  3b 53 54 52 20 52 34 2c  |4,R0....;STR R4,|
00000d60  5b 52 31 2c 52 33 2c 4c  53 4c 23 32 5d 0d 06 04  |[R1,R3,LSL#2]...|
00000d70  19 3b 4c 44 52 20 52 34  2c 5b 52 32 2c 52 33 2c  |.;LDR R4,[R2,R3,|
00000d80  4c 53 4c 23 32 5d 0d 06  0e 11 3b 41 44 44 20 52  |LSL#2]....;ADD R|
00000d90  34 2c 52 34 2c 52 30 0d  06 18 19 3b 53 54 52 20  |4,R4,R0....;STR |
00000da0  52 34 2c 5b 52 32 2c 52  33 2c 4c 53 4c 23 32 5d  |R4,[R2,R3,LSL#2]|
00000db0  0d 06 22 18 4c 44 52 20  52 34 2c 5b 52 35 2c 52  |..".LDR R4,[R5,R|
00000dc0  33 2c 4c 53 4c 23 32 5d  0d 06 2c 10 41 44 44 20  |3,LSL#2]..,.ADD |
00000dd0  52 34 2c 52 34 2c 52 30  0d 06 36 18 53 54 52 20  |R4,R4,R0..6.STR |
00000de0  52 34 2c 5b 52 35 2c 52  33 2c 4c 53 4c 23 32 5d  |R4,[R5,R3,LSL#2]|
00000df0  0d 06 40 18 4c 44 52 20  52 34 2c 5b 52 36 2c 52  |..@.LDR R4,[R6,R|
00000e00  33 2c 4c 53 4c 23 32 5d  0d 06 4a 10 41 44 44 20  |3,LSL#2]..J.ADD |
00000e10  52 34 2c 52 34 2c 52 30  0d 06 54 18 53 54 52 20  |R4,R4,R0..T.STR |
00000e20  52 34 2c 5b 52 36 2c 52  33 2c 4c 53 4c 23 32 5d  |R4,[R6,R3,LSL#2]|
00000e30  0d 06 5e 11 53 55 42 53  20 52 33 2c 52 33 2c 23  |..^.SUBS R3,R3,#|
00000e40  31 0d 06 68 11 42 50 4c  20 69 6e 69 74 5f 6c 6f  |1..h.BPL init_lo|
00000e50  6f 70 0d 06 72 0e 4d 4f  56 20 50 43 2c 52 31 34  |op..r.MOV PC,R14|
00000e60  0d 06 7c 04 0d 06 86 0a  2e 73 74 61 72 74 0d 06  |..|......start..|
00000e70  90 1b 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 31  |..STMFD R13!,{R1|
00000e80  2d 52 31 32 2c 52 31 34  7d 0d 06 9a 17 53 54 52  |-R12,R14}....STR|
00000e90  20 52 31 33 2c 72 65 74  75 72 6e 5f 61 64 64 72  | R13,return_addr|
00000ea0  0d 06 a4 14 53 54 52 20  52 30 2c 72 6f 6d 73 5f  |....STR R0,roms_|
00000eb0  61 64 64 72 0d 06 ae 14  3b 4c 44 52 20 52 30 2c  |addr....;LDR R0,|
00000ec0  63 72 74 5f 61 64 64 72  0d 06 b8 0d 3b 41 44 52  |crt_addr....;ADR|
00000ed0  20 52 31 2c 30 0d 06 c2  11 3b 41 44 44 20 52 30  | R1,0....;ADD R0|
00000ee0  2c 52 30 2c 52 31 0d 06  cc 14 3b 53 57 49 20 22  |,R0,R1....;SWI "|
00000ef0  36 35 30 32 5f 49 6e 69  74 22 0d 06 d6 04 0d 06  |6502_Init"......|
00000f00  e0 12 3b 4d 4f 56 20 52  30 2c 23 26 34 30 30 30  |..;MOV R0,#&4000|
00000f10  0d 06 ea 04 0d 06 f4 04  0d 06 fe 04 0d 07 08 1a  |................|
00000f20  3b 53 54 52 20 52 30 2c  5b 6d 65 6d 2c 23 73 63  |;STR R0,[mem,#sc|
00000f30  72 65 65 6e 52 5d 0d 07  12 24 3b 4d 4f 56 20 52  |reenR]...$;MOV R|
00000f40  30 2c 23 26 39 43 30 30  20 3a 20 3b 41 44 44 20  |0,#&9C00 : ;ADD |
00000f50  52 30 2c 52 30 2c 23 26  34 30 0d 07 1c 16 3b 53  |R0,R0,#&40....;S|
00000f60  54 52 20 52 30 2c 5b 6d  65 6d 2c 23 54 31 52 5d  |TR R0,[mem,#T1R]|
00000f70  0d 07 26 05 3b 0d 07 30  13 4d 4f 56 20 52 30 2c  |..&.;..0.MOV R0,|
00000f80  52 30 2c 4c 53 52 23 32  0d 07 3a 14 53 54 52 20  |R0,LSR#2..:.STR |
00000f90  52 30 2c 5b 6d 65 6d 2c  23 54 31 5d 0d 07 44 13  |R0,[mem,#T1]..D.|
00000fa0  4d 4f 56 20 52 30 2c 52  30 2c 4c 53 52 23 32 0d  |MOV R0,R0,LSR#2.|
00000fb0  07 4e 18 53 54 52 20 52  30 2c 5b 6d 65 6d 2c 23  |.N.STR R0,[mem,#|
00000fc0  73 63 72 65 65 6e 5d 0d  07 58 04 0d 07 62 1a 3b  |screen]..X...b.;|
00000fd0  53 57 49 20 22 36 35 30  32 5f 47 65 74 6b 65 79  |SWI "6502_Getkey|
00000fe0  61 64 64 72 22 0d 07 6c  1e 53 57 49 20 22 36 35  |addr"..l.SWI "65|
00000ff0  30 32 5f 47 65 74 45 6c  65 63 74 72 6f 6e 4b 65  |02_GetElectronKe|
00001000  79 73 22 0d 07 76 1a 53  54 52 20 52 30 2c 5b 6d  |ys"..v.STR R0,[m|
00001010  65 6d 2c 23 6b 65 79 5f  61 64 64 72 5d 0d 07 80  |em,#key_addr]...|
00001020  04 0d 07 8a 11 41 44 52  20 52 30 2c 62 6c 6f 63  |.....ADR R0,bloc|
00001030  6b 31 0d 07 94 10 41 44  44 20 52 31 2c 52 30 2c  |k1....ADD R1,R0,|
00001040  23 38 0d 07 9e 1d 53 57  49 20 22 4f 53 5f 52 65  |#8....SWI "OS_Re|
00001050  61 64 56 64 75 56 61 72  69 61 62 6c 65 73 22 0d  |adVduVariables".|
00001060  07 a8 21 4c 44 52 20 52  39 2c 5b 52 31 5d 20 20  |..!LDR R9,[R1]  |
00001070  20 20 20 3b 20 73 63 72  65 65 6e 73 74 61 72 74  |   ; screenstart|
00001080  0d 07 b2 21 53 54 52 20  52 39 2c 5b 6d 65 6d 2c  |...!STR R9,[mem,|
00001090  23 61 72 63 5f 73 63 72  65 65 6e 73 74 61 72 74  |#arc_screenstart|
000010a0  5d 0d 07 bc 0d 4d 4f 56  20 52 39 2c 23 31 0d 07  |]....MOV R9,#1..|
000010b0  c6 19 53 54 52 42 20 52  39 2c 5b 6d 65 6d 2c 23  |..STRB R9,[mem,#|
000010c0  74 61 6d 70 65 72 5d 0d  07 d0 1d 53 54 52 42 20  |tamper]....STRB |
000010d0  52 39 2c 5b 6d 65 6d 2c  23 70 61 6c 5f 74 61 6d  |R9,[mem,#pal_tam|
000010e0  70 65 72 5d 0d 07 da 20  53 54 52 42 20 52 39 2c  |per]... STRB R9,|
000010f0  5b 6d 65 6d 2c 23 63 75  72 73 6f 72 5f 74 61 6d  |[mem,#cursor_tam|
00001100  70 65 72 5d 0d 07 e4 04  0d 07 ee 12 4c 44 52 20  |per]........LDR |
00001110  41 2c 5b 6d 65 6d 2c 23  61 5d 0d 07 f8 12 4c 44  |A,[mem,#a]....LD|
00001120  52 20 58 2c 5b 6d 65 6d  2c 23 78 5d 0d 08 02 12  |R X,[mem,#x]....|
00001130  4c 44 52 20 59 2c 5b 6d  65 6d 2c 23 79 5d 0d 08  |LDR Y,[mem,#y]..|
00001140  0c 22 4c 44 52 20 53 50  2c 5b 6d 65 6d 2c 23 73  |."LDR SP,[mem,#s|
00001150  70 5d 20 3a 20 84 52 20  53 50 2c 53 50 2c 23 31  |p] : .R SP,SP,#1|
00001160  0d 08 16 12 4c 44 52 20  46 2c 5b 6d 65 6d 2c 23  |....LDR F,[mem,#|
00001170  66 5d 0d 08 20 1b 4c 44  52 20 7a 70 63 2c 5b 6d  |f].. .LDR zpc,[m|
00001180  65 6d 2c 23 70 63 5f 73  74 6f 72 65 5d 0d 08 2a  |em,#pc_store]..*|
00001190  04 0d 08 34 12 42 4c 20  72 65 63 61 6c 63 5f 77  |...4.BL recalc_w|
000011a0  72 61 70 0d 08 3e 1b 4c  44 52 42 20 52 30 2c 5b  |rap..>.LDRB R0,[|
000011b0  6d 65 6d 2c 23 70 61 74  63 68 5f 6f 6e 5d 0d 08  |mem,#patch_on]..|
000011c0  48 11 80 20 52 30 2c 52  30 2c 23 25 31 31 31 0d  |H.. R0,R0,#%111.|
000011d0  08 52 12 42 49 43 20 46  2c 46 2c 23 26 46 46 30  |.R.BIC F,F,#&FF0|
000011e0  30 0d 08 5c 13 84 52 20  46 2c 46 2c 52 30 2c 4c  |0..\..R F,F,R0,L|
000011f0  53 4c 23 38 0d 08 66 04  0d 08 70 0f 4d 4f 56 20  |SL#8..f...p.MOV |
00001200  74 69 6d 65 2c 23 30 0d  08 7a 04 0d 08 84 15 4c  |time,#0..z.....L|
00001210  44 52 42 20 52 30 2c 66  65 30 38 5f 72 65 61 64  |DRB R0,fe08_read|
00001220  0d 08 8e 12 42 49 43 20  52 30 2c 52 30 2c 23 26  |....BIC R0,R0,#&|
00001230  38 31 0d 08 98 15 53 54  52 42 20 52 30 2c 66 65  |81....STRB R0,fe|
00001240  30 38 5f 72 65 61 64 0d  08 a2 04 0d 08 ac 0c 41  |08_read........A|
00001250  44 52 20 52 30 2c 30 0d  08 b6 10 54 53 54 20 46  |DR R0,0....TST F|
00001260  2c 23 25 31 30 30 30 0d  08 c0 19 4c 44 52 45 51  |,#%1000....LDREQ|
00001270  20 74 61 62 6c 65 2c 6f  70 63 6f 5f 61 64 64 72  | table,opco_addr|
00001280  0d 08 ca 18 4c 44 52 4e  45 20 74 61 62 6c 65 2c  |....LDRNE table,|
00001290  62 63 64 5f 61 64 64 72  0d 08 d4 16 41 44 44 20  |bcd_addr....ADD |
000012a0  74 61 62 6c 65 2c 74 61  62 6c 65 2c 52 30 0d 08  |table,table,R0..|
000012b0  de 16 3b 53 57 49 20 22  36 35 30 32 5f 52 65 49  |..;SWI "6502_ReI|
000012c0  6e 69 74 22 0d 08 e8 1b  3b 53 57 49 20 22 36 35  |nit"....;SWI "65|
000012d0  30 32 5f 55 70 64 61 74  65 53 63 72 65 65 6e 0d  |02_UpdateScreen.|
000012e0  08 f2 18 42 4c 20 70 6f  6b 65 5f 75 70 64 61 74  |...BL poke_updat|
000012f0  65 70 69 78 65 6c 56 0d  08 fc 13 42 4c 20 75 70  |epixelV....BL up|
00001300  64 61 74 65 73 63 72 65  65 6e 0d 09 06 0c 42 20  |datescreen....B |
00001310  66 65 74 63 68 32 0d 09  10 04 0d 09 1a 12 2e 72  |fetch2.........r|
00001320  65 73 65 74 5f 62 63 64  66 6c 61 67 0d 09 24 0c  |eset_bcdflag..$.|
00001330  41 44 52 20 52 31 2c 30  0d 09 2e 10 54 53 54 20  |ADR R1,0....TST |
00001340  46 2c 23 25 31 30 30 30  0d 09 38 19 4c 44 52 45  |F,#%1000..8.LDRE|
00001350  51 20 74 61 62 6c 65 2c  6f 70 63 6f 5f 61 64 64  |Q table,opco_add|
00001360  72 0d 09 42 18 4c 44 52  4e 45 20 74 61 62 6c 65  |r..B.LDRNE table|
00001370  2c 62 63 64 5f 61 64 64  72 0d 09 4c 16 41 44 44  |,bcd_addr..L.ADD|
00001380  20 74 61 62 6c 65 2c 74  61 62 6c 65 2c 52 31 0d  | table,table,R1.|
00001390  09 56 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 09 60  |.V.MOV PC,R14..`|
000013a0  04 0d 09 6a 0b 2e 62 6c  6f 63 6b 31 0d 09 74 16  |...j..block1..t.|
000013b0  45 51 55 44 20 31 34 39  20 3a 20 45 51 55 44 20  |EQUD 149 : EQUD |
000013c0  2d 31 0d 09 7e 0b 2e 62  6c 6f 63 6b 32 0d 09 88  |-1..~..block2...|
000013d0  13 45 51 55 44 20 30 20  3a 20 45 51 55 44 20 30  |.EQUD 0 : EQUD 0|
000013e0  0d 09 92 04 0d 09 9c 11  2e 73 63 72 65 65 6e 5f  |.........screen_|
000013f0  63 6f 75 6e 74 0d 09 a6  0a 45 51 55 44 20 30 0d  |count....EQUD 0.|
00001400  09 b0 0a 45 51 55 44 20  30 0d 09 ba 04 0d 09 c4  |...EQUD 0.......|
00001410  0d 2e 72 65 67 5f 63 6f  6d 70 0d 09 ce 14 45 51  |..reg_comp....EQ|
00001420  55 44 20 26 46 34 44 46  20 3c 3c 20 31 36 0d 09  |UD &F4DF << 16..|
00001430  d8 04 0d 09 e2 0d 2e 74  72 61 63 65 5f 6f 6e 0d  |.......trace_on.|
00001440  09 ec 0e 4d 4f 56 20 52  31 32 2c 23 31 0d 09 f6  |...MOV R12,#1...|
00001450  12 53 54 52 42 20 52 31  32 2c 74 72 61 63 65 0d  |.STRB R12,trace.|
00001460  0a 00 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 0a 0a  |...MOV PC,R14...|
00001470  04 0d 0a 14 0e 2e 73 68  6f 77 5f 72 65 67 73 0d  |......show_regs.|
00001480  0a 1e 04 0d 0a 28 18 43  4d 50 20 7a 70 63 2c 23  |.....(.CMP zpc,#|
00001490  26 38 30 30 30 20 3c 3c  20 31 36 0d 0a 32 10 4d  |&8000 << 16..2.M|
000014a0  4f 56 48 53 20 50 43 2c  52 31 34 0d 0a 3c 04 0d  |OVHS PC,R14..<..|
000014b0  0a 46 12 4c 44 52 42 20  52 30 2c 74 72 61 63 65  |.F.LDRB R0,trace|
000014c0  32 0d 0a 50 0d 43 4d 50  20 52 30 2c 23 31 0d 0a  |2..P.CMP R0,#1..|
000014d0  5a 12 42 45 51 20 74 72  61 63 65 5f 73 6b 69 70  |Z.BEQ trace_skip|
000014e0  0d 0a 64 11 3b 4d 4f 56  4e 45 20 50 43 2c 52 31  |..d.;MOVNE PC,R1|
000014f0  34 0d 0a 6e 04 0d 0a 78  14 3b 4c 44 52 20 52 30  |4..n...x.;LDR R0|
00001500  2c 72 65 67 5f 63 6f 6d  70 0d 0a 82 0f 3b 43 4d  |,reg_comp....;CM|
00001510  50 20 52 30 2c 7a 70 63  0d 0a 8c 14 3b 53 57 49  |P R0,zpc....;SWI|
00001520  45 51 20 26 31 30 30 2b  97 22 58 22 0d 0a 96 11  |EQ &100+."X"....|
00001530  3b 4d 4f 56 4e 45 20 50  43 2c 52 31 34 0d 0a a0  |;MOVNE PC,R14...|
00001540  04 0d 0a aa 19 53 57 49  20 22 36 35 30 32 5f 43  |.....SWI "6502_C|
00001550  68 65 63 6b 6b 64 61 74  61 22 0d 0a b4 18 43 4d  |heckkdata"....CM|
00001560  50 20 52 30 2c 23 26 31  46 20 3b 20 49 6e 73 65  |P R0,#&1F ; Inse|
00001570  72 74 0d 0a be 0c ec 51  20 52 31 2c 23 31 0d 0a  |rt.....Q R1,#1..|
00001580  c8 13 53 54 52 45 51 20  52 31 2c 74 72 61 63 65  |..STREQ R1,trace|
00001590  32 0d 0a d2 04 0d 0a dc  0e 4d 4f 56 20 50 43 2c  |2........MOV PC,|
000015a0  52 31 34 0d 0a e6 04 0d  0a f0 0c ec 51 20 52 30  |R14.........Q R0|
000015b0  2c 23 31 0d 0a fa 13 53  54 52 45 51 42 20 52 30  |,#1....STREQB R0|
000015c0  2c 74 72 61 63 65 0d 0b  04 04 0d 0b 0e 11 4c 44  |,trace........LD|
000015d0  52 42 20 52 30 2c 74 72  61 63 65 0d 0b 18 0d 43  |RB R0,trace....C|
000015e0  4d 50 20 52 30 2c 23 31  0d 0b 22 0f 4d 4f 56 4e  |MP R0,#1..".MOVN|
000015f0  45 20 50 43 2c 31 34 0d  0b 2c 04 0d 0b 36 0f 2e  |E PC,14..,...6..|
00001600  74 72 61 63 65 5f 73 6b  69 70 0d 0b 40 0d a4 73  |trace_skip..@..s|
00001610  68 6f 77 72 65 67 73 0d  0b 4a 0e 4d 4f 56 20 50  |howregs..J.MOV P|
00001620  43 2c 52 31 34 0d 0b 54  04 0d 0b 5e 04 0d 0b 68  |C,R14..T...^...h|
00001630  04 0d 0b 72 0b 2e 6b 65  79 63 68 6b 0d 0b 7c 0a  |...r..keychk..|.|
00001640  45 51 55 44 20 30 0d 0b  86 04 0d 0b 90 0b 2e 66  |EQUD 0.........f|
00001650  65 74 63 68 32 0d 0b 9a  04 0d 0b a4 15 4c 44 52  |etch2........LDR|
00001660  20 52 30 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 0b  | R0,[mem,#min]..|
00001670  ae 12 53 55 42 20 52 30  2c 52 30 2c 74 69 6d 65  |..SUB R0,R0,time|
00001680  0d 0b b8 1d 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |....LDR R1,[mem,|
00001690  23 73 6f 75 6e 64 5f 74  69 6d 65 72 5d 0d 0b c2  |#sound_timer]...|
000016a0  10 53 55 42 20 52 31 2c  52 31 2c 52 30 0d 0b cc  |.SUB R1,R1,R0...|
000016b0  1d 53 54 52 20 52 31 2c  5b 6d 65 6d 2c 23 73 6f  |.STR R1,[mem,#so|
000016c0  75 6e 64 5f 74 69 6d 65  72 5d 0d 0b d6 04 0d 0b  |und_timer]......|
000016d0  e0 04 0d 0b ea 1d 4d 4f  56 20 52 30 2c 23 30 20  |......MOV R0,#0 |
000016e0  3a 20 53 54 52 20 52 30  2c 6b 65 79 63 68 6b 0d  |: STR R0,keychk.|
000016f0  0b f4 15 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00001700  6d 69 6e 5d 0d 0b fe 18  53 55 42 20 52 30 2c 52  |min]....SUB R0,R|
00001710  30 2c 74 69 6d 65 20 3b  20 2a 2a 2a 0d 0c 08 18  |0,time ; ***....|
00001720  4c 44 52 20 52 31 2c 5b  6d 65 6d 2c 23 73 63 72  |LDR R1,[mem,#scr|
00001730  65 65 6e 5d 0d 0c 12 11  53 55 42 53 20 52 31 2c  |een]....SUBS R1,|
00001740  52 31 2c 52 30 0d 0c 1c  1a 53 54 52 47 54 20 52  |R1,R0....STRGT R|
00001750  31 2c 5b 6d 65 6d 2c 23  73 63 72 65 65 6e 5d 0d  |1,[mem,#screen].|
00001760  0c 26 0e 42 4c 4c 45 20  76 73 79 6e 63 0d 0c 30  |.&.BLLE vsync..0|
00001770  04 0d 0c 3a 15 4c 44 52  20 52 30 2c 5b 6d 65 6d  |...:.LDR R0,[mem|
00001780  2c 23 6d 69 6e 5d 0d 0c  44 18 53 55 42 20 52 30  |,#min]..D.SUB R0|
00001790  2c 52 30 2c 74 69 6d 65  20 3b 20 2a 2a 2a 0d 0c  |,R0,time ; ***..|
000017a0  4e 10 4c 44 52 20 52 31  2c 73 70 65 65 64 0d 0c  |N.LDR R1,speed..|
000017b0  58 11 53 55 42 53 20 52  31 2c 52 31 2c 52 30 0d  |X.SUBS R1,R1,R0.|
000017c0  0c 62 12 53 54 52 47 54  20 52 31 2c 73 70 65 65  |.b.STRGT R1,spee|
000017d0  64 0d 0c 6c 16 42 4c 4c  45 20 73 70 65 65 64 5f  |d..l.BLLE speed_|
000017e0  63 6f 6e 74 72 6f 6c 0d  0c 76 04 0d 0c 80 1a 3b  |control..v.....;|
000017f0  20 4c 44 52 20 52 30 2c  5b 6d 65 6d 2c 23 54 31  | LDR R0,[mem,#T1|
00001800  6d 6f 64 65 5d 0d 0c 8a  10 3b 20 54 53 54 20 52  |mode]....; TST R|
00001810  30 2c 23 25 31 0d 0c 94  15 3b 20 42 45 51 20 73  |0,#%1....; BEQ s|
00001820  6b 69 70 5f 74 69 6d 65  72 31 0d 0c 9e 04 0d 0c  |kip_timer1......|
00001830  a8 15 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 6d  |..LDR R0,[mem,#m|
00001840  69 6e 5d 0d 0c b2 18 53  55 42 20 52 30 2c 52 30  |in]....SUB R0,R0|
00001850  2c 74 69 6d 65 20 3b 20  2a 2a 2a 0d 0c bc 14 4c  |,time ; ***....L|
00001860  44 52 20 52 31 2c 5b 6d  65 6d 2c 23 54 31 5d 0d  |DR R1,[mem,#T1].|
00001870  0c c6 11 53 55 42 53 20  52 31 2c 52 31 2c 52 30  |...SUBS R1,R1,R0|
00001880  0d 0c d0 16 53 54 52 47  54 20 52 31 2c 5b 6d 65  |....STRGT R1,[me|
00001890  6d 2c 23 54 31 5d 0d 0c  da 0f 42 4c 4c 45 20 74  |m,#T1]....BLLE t|
000018a0  69 6d 65 72 31 0d 0c e4  10 2e 73 6b 69 70 5f 74  |imer1.....skip_t|
000018b0  69 6d 65 72 31 0d 0c ee  04 0d 0c f8 15 4c 44 52  |imer1........LDR|
000018c0  20 52 30 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 0d  | R0,[mem,#min]..|
000018d0  02 12 53 55 42 20 52 30  2c 52 30 2c 74 69 6d 65  |..SUB R0,R0,time|
000018e0  0d 0d 0c 1c 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |....LDR R1,[mem,|
000018f0  23 74 61 70 65 5f 63 6f  75 6e 74 5d 0d 0d 16 11  |#tape_count]....|
00001900  53 55 42 53 20 52 31 2c  52 31 2c 52 30 0d 0d 20  |SUBS R1,R1,R0.. |
00001910  1e 53 54 52 47 54 20 52  31 2c 5b 6d 65 6d 2c 23  |.STRGT R1,[mem,#|
00001920  74 61 70 65 5f 63 6f 75  6e 74 5d 0d 0d 2a 13 42  |tape_count]..*.B|
00001930  4c 4c 45 20 74 61 70 65  5f 66 65 74 63 68 0d 0d  |LLE tape_fetch..|
00001940  34 04 0d 0d 3e 04 0d 0d  48 0f 54 53 54 20 46 2c  |4...>...H.TST F,|
00001950  23 25 31 30 30 0d 0d 52  19 42 4e 45 20 73 6b 69  |#%100..R.BNE ski|
00001960  70 5f 64 6f 5f 69 6e 74  65 72 72 75 70 74 0d 0d  |p_do_interrupt..|
00001970  5c 04 0d 0d 66 12 3b 2e  64 6f 5f 69 6e 74 65 72  |\...f.;.do_inter|
00001980  72 75 70 74 0d 0d 70 04  0d 0d 7a 17 4c 44 52 42  |rupt..p...z.LDRB|
00001990  20 52 31 2c 5b 6d 65 6d  2c 23 45 69 66 72 5d 0d  | R1,[mem,#Eifr].|
000019a0  0d 84 15 3b 54 53 54 20  52 31 2c 23 25 31 30 30  |...;TST R1,#%100|
000019b0  30 30 30 30 0d 0d 8e 14  3b 53 57 49 4e 45 20 26  |0000....;SWINE &|
000019c0  31 30 30 2b 97 22 36 22  0d 0d 98 16 80 20 52 31  |100+."6"..... R1|
000019d0  2c 52 31 2c 23 25 30 31  31 31 31 31 30 30 0d 0d  |,R1,#%01111100..|
000019e0  a2 04 0d 0d ac 04 0d 0d  b6 2a 3b 80 20 52 31 2c  |.........*;. R1,|
000019f0  52 31 2c 23 25 30 31 31  31 30 30 30 30 20 3b 20  |R1,#%01110000 ; |
00001a00  3f 3f 3f 3f 3f 3f 3f 3f  3f 3f 3f 3f 3f 3f 3f 3f  |????????????????|
00001a10  0d 0d c0 04 0d 0d ca 04  0d 0d d4 04 0d 0d de 17  |................|
00001a20  4c 44 52 42 20 52 32 2c  5b 6d 65 6d 2c 23 45 69  |LDRB R2,[mem,#Ei|
00001a30  65 72 5d 0d 0d e8 04 0d  0d f2 0f 80 53 20 52 31  |er].........S R1|
00001a40  2c 52 31 2c 52 32 0d 0d  fc 04 0d 0e 06 15 3b 54  |,R1,R2........;T|
00001a50  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 30 0d  |ST R1,#%1000000.|
00001a60  0e 10 14 3b 53 57 49 4e  45 20 26 31 30 30 2b 97  |...;SWINE &100+.|
00001a70  22 36 22 0d 0e 1a 14 3b  54 53 54 20 52 31 2c 23  |"6"....;TST R1,#|
00001a80  25 31 30 30 30 30 30 0d  0e 24 14 3b 53 57 49 4e  |%100000..$.;SWIN|
00001a90  45 20 26 31 30 30 2b 97  22 35 22 0d 0e 2e 13 3b  |E &100+."5"....;|
00001aa0  54 53 54 20 52 31 2c 23  25 31 30 30 30 30 0d 0e  |TST R1,#%10000..|
00001ab0  38 14 3b 53 57 49 4e 45  20 26 31 30 30 2b 97 22  |8.;SWINE &100+."|
00001ac0  34 22 0d 0e 42 12 3b 54  53 54 20 52 31 2c 23 25  |4"..B.;TST R1,#%|
00001ad0  31 30 30 30 0d 0e 4c 04  0d 0e 56 14 3b 53 57 49  |1000..L...V.;SWI|
00001ae0  4e 45 20 26 31 30 30 2b  97 22 33 22 0d 0e 60 11  |NE &100+."3"..`.|
00001af0  3b 54 53 54 20 52 31 2c  23 25 31 30 30 0d 0e 6a  |;TST R1,#%100..j|
00001b00  14 3b 53 57 49 4e 45 20  26 31 30 30 2b 97 22 32  |.;SWINE &100+."2|
00001b10  22 0d 0e 74 0e 3b 43 4d  50 20 52 31 2c 23 30 0d  |"..t.;CMP R1,#0.|
00001b20  0e 7e 04 0d 0e 88 19 42  45 51 20 73 6b 69 70 5f  |.~.....BEQ skip_|
00001b30  64 6f 5f 69 6e 74 65 72  72 75 70 74 0d 0e 92 04  |do_interrupt....|
00001b40  0d 0e 9c 11 2e 64 6f 5f  69 6e 74 65 72 72 75 70  |.....do_interrup|
00001b50  74 0d 0e a6 11 a4 64 6f  5f 69 6e 74 65 72 72 75  |t.....do_interru|
00001b60  70 74 0d 0e b0 04 0d 0e  ba 16 2e 73 6b 69 70 5f  |pt.........skip_|
00001b70  64 6f 5f 69 6e 74 65 72  72 75 70 74 0d 0e c4 04  |do_interrupt....|
00001b80  0d 0e ce 1c 3b 42 4c 20  6b 65 79 62 6f 61 72 64  |....;BL keyboard|
00001b90  20 ec 44 20 b8 20 43 4c  49 21 21 21 0d 0e d8 0c  | .D . CLI!!!....|
00001ba0  42 4c 20 6b 65 79 73 32  0d 0e e2 0e 2e 73 6b 69  |BL keys2.....ski|
00001bb0  70 5f 6b 65 79 73 0d 0e  ec 16 4c 44 52 20 74 69  |p_keys....LDR ti|
00001bc0  6d 65 2c 5b 6d 65 6d 2c  23 54 31 5d 0d 0e f6 19  |me,[mem,#T1]....|
00001bd0  3b 4d 4f 56 20 74 69 6d  65 2c 74 69 6d 65 2c 4c  |;MOV time,time,L|
00001be0  53 52 23 31 35 0d 0f 00  18 4c 44 52 20 52 31 2c  |SR#15....LDR R1,|
00001bf0  5b 6d 65 6d 2c 23 73 63  72 65 65 6e 5d 0d 0f 0a  |[mem,#screen]...|
00001c00  1a 43 4d 50 20 52 31 2c  23 30 20 3a 20 ec 51 20  |.CMP R1,#0 : .Q |
00001c10  52 31 2c 74 69 6d 65 0d  0f 14 0f 43 4d 50 20 52  |R1,time....CMP R|
00001c20  31 2c 74 69 6d 65 0d 0f  1e 11 4d 4f 56 4c 54 20  |1,time....MOVLT |
00001c30  74 69 6d 65 2c 52 31 0d  0f 28 04 0d 0f 32 1c 4c  |time,R1..(...2.L|
00001c40  44 52 20 52 31 2c 5b 6d  65 6d 2c 23 74 61 70 65  |DR R1,[mem,#tape|
00001c50  5f 63 6f 75 6e 74 5d 0d  0f 3c 0f 43 4d 50 20 52  |_count]..<.CMP R|
00001c60  31 2c 74 69 6d 65 0d 0f  46 11 4d 4f 56 4c 54 20  |1,time..F.MOVLT |
00001c70  74 69 6d 65 2c 52 31 0d  0f 50 04 0d 0f 5a 1c 43  |time,R1..P...Z.C|
00001c80  4d 50 20 74 69 6d 65 2c  23 30 20 3a 20 ec 51 20  |MP time,#0 : .Q |
00001c90  74 69 6d 65 2c 23 31 0d  0f 64 17 53 54 52 20 74  |time,#1..d.STR t|
00001ca0  69 6d 65 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 0f  |ime,[mem,#min]..|
00001cb0  6e 0b a4 66 65 74 63 68  32 0d 0f 78 04 0d 0f 82  |n..fetch2..x....|
00001cc0  1e 2e 69 6e 74 65 72 72  75 70 74 20 3b 20 63 61  |..interrupt ; ca|
00001cd0  6c 6c 65 64 20 62 79 20  43 4c 49 0d 0f 8c 0e 4d  |lled by CLI....M|
00001ce0  4f 56 20 50 43 2c 52 31  34 0d 0f 96 04 0d 0f a0  |OV PC,R14.......|
00001cf0  17 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 45  |.LDRB R1,[mem,#E|
00001d00  69 66 72 5d 0d 0f aa 17  3b 80 20 52 31 2c 52 31  |ifr]....;. R1,R1|
00001d10  2c 23 25 30 30 31 31 30  30 30 30 0d 0f b4 17 4c  |,#%00110000....L|
00001d20  44 52 42 20 52 32 2c 5b  6d 65 6d 2c 23 45 69 65  |DRB R2,[mem,#Eie|
00001d30  72 5d 0d 0f be 04 0d 0f  c8 0f 80 53 20 52 31 2c  |r].........S R1,|
00001d40  52 31 2c 52 32 0d 0f d2  0d ec 51 20 50 43 2c 52  |R1,R2.....Q PC,R|
00001d50  31 34 0d 0f dc 04 0d 0f  e6 14 3b 54 53 54 20 52  |14........;TST R|
00001d60  31 2c 23 25 31 30 30 30  30 30 0d 0f f0 14 3b 53  |1,#%100000....;S|
00001d70  57 49 4e 45 20 26 31 30  30 2b 97 22 35 22 0d 0f  |WINE &100+."5"..|
00001d80  fa 15 3b 54 53 54 20 52  31 2c 23 25 31 30 30 30  |..;TST R1,#%1000|
00001d90  30 30 30 0d 10 04 14 3b  53 57 49 4e 45 20 26 31  |000....;SWINE &1|
00001da0  30 30 2b 97 22 36 22 0d  10 0e 04 0d 10 18 11 a4  |00+."6".........|
00001db0  64 6f 5f 69 6e 74 65 72  72 75 70 74 0d 10 22 04  |do_interrupt..".|
00001dc0  0d 10 2c 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 10  |..,.MOV PC,R14..|
00001dd0  36 04 0d 10 40 0c 2e 46  31 30 74 65 6d 70 0d 10  |6...@..F10temp..|
00001de0  4a 0a 45 51 55 44 20 30  0d 10 54 04 0d 10 5e 08  |J.EQUD 0..T...^.|
00001df0  2e 46 31 30 0d 10 68 17  53 57 49 20 22 36 35 30  |.F10..h.SWI "650|
00001e00  32 5f 47 65 74 6b 64 61  74 61 22 0d 10 72 13 53  |2_Getkdata"..r.S|
00001e10  54 52 20 52 31 34 2c 46  31 30 74 65 6d 70 0d 10  |TR R14,F10temp..|
00001e20  7c 0f 4d 4f 56 20 52 30  2c 23 32 35 35 0d 10 86  ||.MOV R0,#255...|
00001e30  1b 53 54 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 6c  |.STRB R0,[mem,#l|
00001e40  61 73 74 6d 6f 64 65 5d  0d 10 90 13 42 4c 20 75  |astmode]....BL u|
00001e50  70 64 61 74 65 73 63 72  65 65 6e 0d 10 9a 18 3b  |pdatescreen....;|
00001e60  42 4c 20 66 6f 72 63 65  5f 75 70 64 61 74 65 5f  |BL force_update_|
00001e70  70 61 6c 0d 10 a4 12 4c  44 52 20 50 43 2c 46 31  |pal....LDR PC,F1|
00001e80  30 74 65 6d 70 0d 10 ae  04 0d 10 b8 0c 3b 2e 66  |0temp........;.f|
00001e90  65 74 63 68 33 0d 10 c2  0a 2e 6b 65 79 73 32 0d  |etch3.....keys2.|
00001ea0  10 cc 19 53 57 49 20 22  36 35 30 32 5f 43 68 65  |...SWI "6502_Che|
00001eb0  63 6b 6b 64 61 74 61 22  0d 10 d6 18 43 4d 50 20  |ckkdata"....CMP |
00001ec0  52 30 2c 23 26 31 46 20  3b 20 49 6e 73 65 72 74  |R0,#&1F ; Insert|
00001ed0  0d 10 e0 0c ec 51 20 52  31 2c 23 31 0d 10 ea 13  |.....Q R1,#1....|
00001ee0  53 54 52 45 51 20 52 31  2c 74 72 61 63 65 32 0d  |STREQ R1,trace2.|
00001ef0  10 f4 14 43 4d 50 20 52  30 2c 23 31 30 20 3b 20  |...CMP R0,#10 ; |
00001f00  46 31 30 0d 10 fe 0b 42  45 51 20 46 31 30 0d 11  |F10....BEQ F10..|
00001f10  08 14 43 4d 50 20 52 30  2c 23 31 31 20 3b 20 46  |..CMP R0,#11 ; F|
00001f20  31 31 0d 11 12 16 43 4d  50 4e 45 20 52 30 2c 23  |11....CMPNE R0,#|
00001f30  31 32 20 3b 20 46 31 32  0d 11 1c 18 43 4d 50 4e  |12 ; F12....CMPN|
00001f40  45 20 52 30 2c 23 31 35  20 3b 20 62 72 65 61 6b  |E R0,#15 ; break|
00001f50  0d 11 26 11 42 45 51 20  72 61 77 5f 65 78 69 74  |..&.BEQ raw_exit|
00001f60  32 0d 11 30 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |2..0.MOV PC,R14.|
00001f70  11 3a 04 0d 11 44 1d 2e  6b 65 79 62 6f 61 72 64  |.:...D..keyboard|
00001f80  20 3b 20 63 61 6c 6c 65  64 20 62 79 20 43 4c 49  | ; called by CLI|
00001f90  0d 11 4e 04 0d 11 58 1d  4d 4f 56 20 52 30 2c 23  |..N...X.MOV R0,#|
00001fa0  31 20 3a 20 53 54 52 20  52 30 2c 6b 65 79 63 68  |1 : STR R0,keych|
00001fb0  6b 0d 11 62 17 53 57 49  20 22 36 35 30 32 5f 47  |k..b.SWI "6502_G|
00001fc0  65 74 6b 64 61 74 61 22  0d 11 6c 1b 43 4d 50 20  |etkdata"..l.CMP |
00001fd0  52 30 2c 23 26 46 46 20  3a 20 ec 51 20 50 43 2c  |R0,#&FF : .Q PC,|
00001fe0  52 31 34 0d 11 76 18 43  4d 50 20 52 30 2c 23 26  |R14..v.CMP R0,#&|
00001ff0  31 46 20 3b 20 49 6e 73  65 72 74 0d 11 80 0c ec  |1F ; Insert.....|
00002000  51 20 52 31 2c 23 31 0d  11 8a 13 53 54 52 45 51  |Q R1,#1....STREQ|
00002010  20 52 31 2c 74 72 61 63  65 32 0d 11 94 14 43 4d  | R1,trace2....CM|
00002020  50 20 52 30 2c 23 31 30  20 3b 20 46 31 30 0d 11  |P R0,#10 ; F10..|
00002030  9e 0b 42 45 51 20 46 31  30 0d 11 a8 0e 43 4d 50  |..BEQ F10....CMP|
00002040  20 52 30 2c 23 31 35 0d  11 b2 10 43 4d 50 4e 45  | R0,#15....CMPNE|
00002050  20 52 30 2c 23 31 32 0d  11 bc 16 43 4d 50 4e 45  | R0,#12....CMPNE|
00002060  20 52 30 2c 23 31 31 20  3b 20 46 31 31 0d 11 c6  | R0,#11 ; F11...|
00002070  10 42 45 51 20 72 61 77  5f 65 78 69 74 0d 11 d0  |.BEQ raw_exit...|
00002080  04 0d 11 da 17 3b 43 4d  50 20 52 30 2c 23 30 20  |.....;CMP R0,#0 |
00002090  3b 20 65 73 63 61 70 65  0d 11 e4 19 3b 4c 44 52  |; escape....;LDR|
000020a0  45 51 42 20 52 30 2c 5b  6d 65 6d 2c 23 26 46 46  |EQB R0,[mem,#&FF|
000020b0  5d 0d 11 ee 14 3b 84 52  45 51 20 52 30 2c 52 30  |]....;.REQ R0,R0|
000020c0  2c 23 26 38 30 0d 11 f8  19 3b 53 54 52 45 51 42  |,#&80....;STREQB|
000020d0  20 52 30 2c 5b 6d 65 6d  2c 23 26 46 46 5d 0d 12  | R0,[mem,#&FF]..|
000020e0  02 13 4c 44 52 42 20 52  30 2c 5b 52 31 2c 52 30  |..LDRB R0,[R1,R0|
000020f0  5d 0d 12 0c 0f 43 4d 50  20 52 30 2c 23 26 46 46  |]....CMP R0,#&FF|
00002100  0d 12 16 15 3b 42 45 51  20 6e 6f 74 5f 6b 65 79  |....;BEQ not_key|
00002110  62 6f 61 72 64 0d 12 20  0d ec 51 20 50 43 2c 52  |board.. ..Q PC,R|
00002120  31 34 0d 12 2a 04 0d 12  34 13 3b 42 20 6e 6f 74  |14..*...4.;B not|
00002130  5f 6b 65 79 62 6f 61 72  64 0d 12 3e 1c 43 4d 50  |_keyboard..>.CMP|
00002140  20 52 30 2c 23 31 30 20  3b 20 73 68 69 66 74 2c  | R0,#10 ; shift,|
00002150  20 63 74 72 6c 0d 12 48  10 4d 4f 56 4c 54 20 50  | ctrl..H.MOVLT P|
00002160  43 2c 52 31 34 0d 12 52  16 4c 44 52 42 20 52 31  |C,R14..R.LDRB R1|
00002170  2c 5b 6d 65 6d 2c 23 69  66 72 5d 0d 12 5c 2d 84  |,[mem,#ifr]..\-.|
00002180  52 20 52 31 2c 52 31 2c  23 25 31 20 3b 20 69 6e  |R R1,R1,#%1 ; in|
00002190  74 65 72 72 75 70 74 20  69 73 20 66 72 6f 6d 20  |terrupt is from |
000021a0  6b 65 79 62 6f 61 72 64  0d 12 66 16 53 54 52 42  |keyboard..f.STRB|
000021b0  20 52 31 2c 5b 6d 65 6d  2c 23 69 66 72 5d 0d 12  | R1,[mem,#ifr]..|
000021c0  70 16 4c 44 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |p.LDRB R0,[mem,#|
000021d0  69 65 72 5d 0d 12 7a 0e  54 53 54 20 52 30 2c 23  |ier]..z.TST R0,#|
000021e0  25 31 0d 12 84 0d ec 51  20 50 43 2c 52 31 34 0d  |%1.....Q PC,R14.|
000021f0  12 8e 11 a4 64 6f 5f 69  6e 74 65 72 72 75 70 74  |....do_interrupt|
00002200  0d 12 98 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 12  |....MOV PC,R14..|
00002210  a2 04 0d 12 ac 04 0d 12  b6 04 0d 12 c0 0e 2e 6d  |...............m|
00002220  6f 6e 6f 5f 74 69 6d 65  0d 12 ca 0a 45 51 55 44  |ono_time....EQUD|
00002230  20 30 0d 12 d4 0a 2e 73  70 65 65 64 0d 12 de 0a  | 0.....speed....|
00002240  45 51 55 44 20 30 0d 12  e8 04 0d 12 f2 12 2e 73  |EQUD 0.........s|
00002250  70 65 65 64 5f 63 6f 6e  74 72 6f 6c 0d 12 fc 18  |peed_control....|
00002260  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 73 70 65  |LDR R0,[mem,#spe|
00002270  65 64 52 5d 0d 13 06 10  41 44 44 20 52 31 2c 52  |edR]....ADD R1,R|
00002280  31 2c 52 30 0d 13 10 10  53 54 52 20 52 31 2c 73  |1,R0....STR R1,s|
00002290  70 65 65 64 0d 13 1a 04  0d 13 24 14 4c 44 52 20  |peed......$.LDR |
000022a0  52 31 2c 6d 6f 6e 6f 5f  74 69 6d 65 0d 13 2e 0e  |R1,mono_time....|
000022b0  2e 6d 6f 6e 6f 5f 6c 6f  6f 70 0d 13 38 1e 53 57  |.mono_loop..8.SW|
000022c0  49 20 22 4f 53 5f 52 65  61 64 4d 6f 6e 6f 74 6f  |I "OS_ReadMonoto|
000022d0  6e 69 63 54 69 6d 65 22  0d 13 42 13 4d 4f 56 20  |nicTime"..B.MOV |
000022e0  52 30 2c 52 30 2c 4c 53  52 23 31 0d 13 4c 0d 43  |R0,R0,LSR#1..L.C|
000022f0  4d 50 20 52 30 2c 52 31  0d 13 56 11 42 45 51 20  |MP R0,R1..V.BEQ |
00002300  6d 6f 6e 6f 5f 6c 6f 6f  70 0d 13 60 14 53 54 52  |mono_loop..`.STR|
00002310  20 52 30 2c 6d 6f 6e 6f  5f 74 69 6d 65 0d 13 6a  | R0,mono_time..j|
00002320  04 0d 13 74 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |...t.MOV PC,R14.|
00002330  13 7e 04 0d 13 88 0a 2e  76 73 79 6e 63 0d 13 92  |.~......vsync...|
00002340  14 53 54 52 20 52 31 34  2c 76 73 79 6e 63 52 31  |.STR R14,vsyncR1|
00002350  34 0d 13 9c 0f 3b 4d 4f  56 20 52 30 2c 23 31 39  |4....;MOV R0,#19|
00002360  0d 13 a6 12 3b 53 57 49  20 22 4f 53 5f 42 79 74  |....;SWI "OS_Byt|
00002370  65 22 0d 13 b0 04 0d 13  ba 1a 3b 4c 44 52 42 20  |e"........;LDRB |
00002380  52 30 2c 6c 64 72 62 34  30 5f 74 61 6d 70 65 72  |R0,ldrb40_tamper|
00002390  0d 13 c4 24 3b 43 4d 50  20 52 30 2c 23 31 20 3a  |...$;CMP R0,#1 :|
000023a0  20 3b 42 4c 45 51 20 6c  64 72 62 34 30 5f 75 70  | ;BLEQ ldrb40_up|
000023b0  64 61 74 65 0d 13 ce 04  0d 13 d8 04 0d 13 e2 22  |date..........."|
000023c0  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 73 70 65  |LDR R0,[mem,#spe|
000023d0  65 64 52 5d 20 3b 20 73  63 72 65 65 6e 52 0d 13  |edR] ; screenR..|
000023e0  ec 10 41 44 44 20 52 31  2c 52 31 2c 52 30 0d 13  |..ADD R1,R1,R0..|
000023f0  f6 18 53 54 52 20 52 31  2c 5b 6d 65 6d 2c 23 73  |..STR R1,[mem,#s|
00002400  63 72 65 65 6e 5d 0d 14  00 04 0d 14 0a 04 0d 14  |creen]..........|
00002410  14 10 3b 42 4c 20 74 72  61 63 65 5f 6f 6e 0d 14  |..;BL trace_on..|
00002420  1e 04 0d 14 28 19 3b 4c  44 52 42 20 52 31 2c 73  |....(.;LDRB R1,s|
00002430  63 72 65 65 6e 5f 63 6f  75 6e 74 0d 14 32 12 3b  |creen_count..2.;|
00002440  53 55 42 53 20 52 31 2c  52 31 2c 23 31 0d 14 3c  |SUBS R1,R1,#1..<|
00002450  1d 3b 4c 44 52 4d 49 42  20 52 31 2c 73 63 72 65  |.;LDRMIB R1,scre|
00002460  65 6e 5f 63 6f 75 6e 74  2b 34 0d 14 46 19 3b 53  |en_count+4..F.;S|
00002470  54 52 42 20 52 31 2c 73  63 72 65 65 6e 5f 63 6f  |TRB R1,screen_co|
00002480  75 6e 74 0d 14 50 18 4c  44 52 20 52 30 2c 5b 6d  |unt..P.LDR R0,[m|
00002490  65 6d 2c 23 74 61 6d 70  65 72 5d 0d 14 5a 0d 43  |em,#tamper]..Z.C|
000024a0  4d 50 20 52 30 2c 23 30  0d 14 64 04 0d 14 6e 11  |MP R0,#0..d...n.|
000024b0  42 45 51 20 6e 6f 5f 74  61 6d 70 65 72 0d 14 78  |BEQ no_tamper..x|
000024c0  0d 4d 4f 56 20 52 30 2c  23 30 0d 14 82 18 53 54  |.MOV R0,#0....ST|
000024d0  52 20 52 30 2c 5b 6d 65  6d 2c 23 74 61 6d 70 65  |R R0,[mem,#tampe|
000024e0  72 5d 0d 14 8c 1c 3b 53  57 49 20 22 36 35 30 32  |r]....;SWI "6502|
000024f0  5f 55 70 64 61 74 65 53  63 72 65 65 6e 22 0d 14  |_UpdateScreen"..|
00002500  96 12 42 4c 20 72 65 63  61 6c 63 5f 77 72 61 70  |..BL recalc_wrap|
00002510  0d 14 a0 13 42 4c 20 75  70 64 61 74 65 73 63 72  |....BL updatescr|
00002520  65 65 6e 0d 14 aa 1f 54  53 54 20 46 2c 23 31 20  |een....TST F,#1 |
00002530  3c 3c 20 31 30 20 3b 20  63 75 72 73 6f 72 20 6f  |<< 10 ; cursor o|
00002540  6e 3f 0d 14 b4 17 3b 42  4c 4e 45 20 64 65 66 69  |n?....;BLNE defi|
00002550  6e 65 5f 63 75 72 73 6f  72 0d 14 be 10 3b 42 4c  |ne_cursor....;BL|
00002560  4e 45 20 63 75 72 73 6f  72 0d 14 c8 0e 2e 6e 6f  |NE cursor.....no|
00002570  5f 74 61 6d 70 65 72 0d  14 d2 1d 4c 44 52 42 20  |_tamper....LDRB |
00002580  52 30 2c 5b 6d 65 6d 2c  23 70 61 6c 5f 74 61 6d  |R0,[mem,#pal_tam|
00002590  70 65 72 5d 0d 14 dc 0d  43 4d 50 20 52 30 2c 23  |per]....CMP R0,#|
000025a0  30 0d 14 e6 13 42 4c 4e  45 20 75 70 64 61 74 65  |0....BLNE update|
000025b0  5f 70 61 6c 0d 14 f0 04  0d 14 fa 04 0d 15 04 1f  |_pal............|
000025c0  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 63 75 72  |LDR R0,[mem,#cur|
000025d0  73 6f 72 5f 74 61 6d 70  65 72 5d 0d 15 0e 0d 43  |sor_tamper]....C|
000025e0  4d 50 20 52 30 2c 23 30  0d 15 18 10 3b 42 4c 4e  |MP R0,#0....;BLN|
000025f0  45 20 63 75 72 73 6f 72  0d 15 22 04 0d 15 2c 04  |E cursor.."...,.|
00002600  0d 15 36 1d 3b 53 55 42  20 52 30 2c 6d 65 6d 2c  |..6.;SUB R0,mem,|
00002610  23 35 31 32 20 3b 20 73  68 65 69 6c 61 0d 15 40  |#512 ; sheila..@|
00002620  16 3b 4c 44 52 42 20 52  31 2c 5b 52 30 2c 23 26  |.;LDRB R1,[R0,#&|
00002630  32 30 5d 0d 15 4a 1c 3b  54 53 54 20 52 31 2c 23  |20]..J.;TST R1,#|
00002640  25 31 30 20 3b 20 74 65  6c 65 74 65 78 74 3f 0d  |%10 ; teletext?.|
00002650  15 54 1e 3b 53 57 49 4e  45 20 22 36 35 30 32 5f  |.T.;SWINE "6502_|
00002660  55 70 64 61 74 65 53 63  72 65 65 6e 22 0d 15 5e  |UpdateScreen"..^|
00002670  16 3b 42 4c 4e 45 20 75  70 64 61 74 65 73 63 72  |.;BLNE updatescr|
00002680  65 65 6e 0d 15 68 13 3b  41 44 44 20 52 30 2c 52  |een..h.;ADD R0,R|
00002690  30 2c 23 26 34 44 0d 15  72 11 3b 4c 44 52 42 20  |0,#&4D..r.;LDRB |
000026a0  52 31 2c 5b 52 30 5d 0d  15 7c 14 3b 4c 44 52 42  |R1,[R0]..|.;LDRB|
000026b0  20 52 32 2c 5b 52 30 2c  23 31 5d 0d 15 86 04 0d  | R2,[R0,#1].....|
000026c0  15 90 04 0d 15 9a 04 0d  15 a4 17 4c 44 52 42 20  |...........LDRB |
000026d0  52 31 2c 5b 6d 65 6d 2c  23 45 69 66 72 5d 0d 15  |R1,[mem,#Eifr]..|
000026e0  ae 2c 84 52 20 52 31 2c  52 31 2c 23 25 31 30 30  |.,.R R1,R1,#%100|
000026f0  20 3b 20 69 6e 74 65 72  72 75 70 74 20 69 73 20  | ; interrupt is |
00002700  66 72 6f 6d 20 76 73 79  6e 63 0d 15 b8 17 53 54  |from vsync....ST|
00002710  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 45 69 66 72  |RB R1,[mem,#Eifr|
00002720  5d 0d 15 c2 04 0d 15 cc  12 3b 54 53 54 20 46 2c  |]........;TST F,|
00002730  23 31 20 3c 3c 20 39 0d  15 d6 13 3b 42 45 51 20  |#1 << 9....;BEQ |
00002740  73 6b 69 70 5f 65 78 61  63 74 0d 15 e0 04 0d 15  |skip_exact......|
00002750  ea 15 3b 4c 44 52 20 52  31 2c 6d 6f 6e 6f 5f 74  |..;LDR R1,mono_t|
00002760  69 6d 65 0d 15 f4 0f 3b  2e 6d 6f 6e 6f 5f 6c 6f  |ime....;.mono_lo|
00002770  6f 70 0d 15 fe 1f 3b 53  57 49 20 22 4f 53 5f 52  |op....;SWI "OS_R|
00002780  65 61 64 4d 6f 6e 6f 74  6f 6e 69 63 54 69 6d 65  |eadMonotonicTime|
00002790  22 0d 16 08 14 3b 4d 4f  56 20 52 30 2c 52 30 2c  |"....;MOV R0,R0,|
000027a0  4c 53 52 23 31 0d 16 12  0e 3b 43 4d 50 20 52 30  |LSR#1....;CMP R0|
000027b0  2c 52 31 0d 16 1c 12 3b  42 45 51 20 6d 6f 6e 6f  |,R1....;BEQ mono|
000027c0  5f 6c 6f 6f 70 0d 16 26  15 3b 53 54 52 20 52 30  |_loop..&.;STR R0|
000027d0  2c 6d 6f 6e 6f 5f 74 69  6d 65 0d 16 30 04 0d 16  |,mono_time..0...|
000027e0  3a 0f 2e 73 6b 69 70 5f  65 78 61 63 74 0d 16 44  |:..skip_exact..D|
000027f0  04 0d 16 4e 13 4c 44 52  20 50 43 2c 76 73 79 6e  |...N.LDR PC,vsyn|
00002800  63 52 31 34 0d 16 58 0d  2e 76 73 79 6e 63 52 31  |cR14..X..vsyncR1|
00002810  34 0d 16 62 0a 45 51 55  44 20 30 0d 16 6c 04 0d  |4..b.EQUD 0..l..|
00002820  16 76 04 0d 16 80 04 0d  16 8a 0b 2e 74 69 6d 65  |.v..........time|
00002830  72 31 0d 16 94 22 4c 44  52 20 52 30 2c 5b 6d 65  |r1..."LDR R0,[me|
00002840  6d 2c 23 73 70 65 65 64  52 5d 20 3b 20 77 61 73  |m,#speedR] ; was|
00002850  20 54 31 52 0d 16 9e 10  41 44 44 20 52 31 2c 52  | T1R....ADD R1,R|
00002860  31 2c 52 30 0d 16 a8 14  53 54 52 20 52 31 2c 5b  |1,R0....STR R1,[|
00002870  6d 65 6d 2c 23 54 31 5d  0d 16 b2 04 0d 16 bc 17  |mem,#T1]........|
00002880  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 45 69  |LDRB R1,[mem,#Ei|
00002890  66 72 5d 0d 16 c6 2b 84  52 20 52 31 2c 52 31 2c  |fr]...+.R R1,R1,|
000028a0  23 25 31 30 30 30 20 3b  20 69 6e 74 65 72 72 75  |#%1000 ; interru|
000028b0  70 74 20 69 73 20 66 72  6f 6d 20 52 54 43 0d 16  |pt is from RTC..|
000028c0  d0 17 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..STRB R1,[mem,#|
000028d0  45 69 66 72 5d 0d 16 da  04 0d 16 e4 0e 4d 4f 56  |Eifr]........MOV|
000028e0  20 50 43 2c 52 31 34 0d  16 ee 04 0d 16 f8 04 0d  | PC,R14.........|
000028f0  17 02 04 0d 17 0c 0c 3b  2e 74 72 61 63 65 32 0d  |.......;.trace2.|
00002900  17 16 0b 3b 45 51 55 44  20 30 0d 17 20 04 0d 17  |...;EQUD 0.. ...|
00002910  2a 0a 2e 72 65 73 65 74  0d 17 34 0e 3b 4d 4f 56  |*..reset..4.;MOV|
00002920  20 52 31 2c 23 31 0d 17  3e 11 3b 53 54 52 20 52  | R1,#1..>.;STR R|
00002930  31 2c 74 72 61 63 65 0d  17 48 2a 4d 4f 56 20 52  |1,trace..H*MOV R|
00002940  30 2c 23 31 35 20 3a 20  4d 4f 56 20 52 31 2c 23  |0,#15 : MOV R1,#|
00002950  30 20 3a 20 53 57 49 20  22 4f 53 5f 42 79 74 65  |0 : SWI "OS_Byte|
00002960  22 0d 17 52 12 4d 4f 56  20 52 30 2c 23 26 31 30  |"..R.MOV R0,#&10|
00002970  30 30 30 0d 17 5c 10 53  55 42 20 52 30 2c 52 30  |000..\.SUB R0,R0|
00002980  2c 23 34 0d 17 66 13 4c  44 52 20 52 30 2c 5b 6d  |,#4..f.LDR R0,[m|
00002990  65 6d 2c 52 30 5d 0d 17  70 15 4d 4f 56 20 7a 70  |em,R0]..p.MOV zp|
000029a0  63 2c 52 30 2c 4c 53 4c  23 31 36 0d 17 7a 27 42  |c,R0,LSL#16..z'B|
000029b0  49 43 20 46 2c 46 2c 23  25 31 30 30 30 20 3b 20  |IC F,F,#%1000 ; |
000029c0  63 6c 65 61 72 20 44 65  63 69 6d 61 6c 20 6d 6f  |clear Decimal mo|
000029d0  64 65 0d 17 84 29 84 52  20 46 2c 46 2c 23 25 31  |de...).R F,F,#%1|
000029e0  30 30 20 20 3b 20 73 65  74 20 69 6e 74 65 72 72  |00  ; set interr|
000029f0  75 70 74 20 64 69 73 61  62 6c 65 0d 17 8e 0b a4  |upt disable.....|
00002a00  66 65 74 63 68 32 0d 17  98 04 0d 17 a2 04 0d 17  |fetch2..........|
00002a10  ac 09 2e 65 78 69 74 0d  17 b6 0d 4d 4f 56 20 52  |...exit....MOV R|
00002a20  30 2c 23 30 0d 17 c0 0e  2e 72 61 77 5f 65 78 69  |0,#0.....raw_exi|
00002a30  74 32 0d 17 ca 17 53 57  49 20 22 36 35 30 32 5f  |t2....SWI "6502_|
00002a40  47 65 74 6b 64 61 74 61  22 0d 17 d4 0d 2e 72 61  |Getkdata".....ra|
00002a50  77 5f 65 78 69 74 0d 17  de 12 53 54 52 20 41 2c  |w_exit....STR A,|
00002a60  5b 6d 65 6d 2c 23 61 5d  0d 17 e8 12 53 54 52 20  |[mem,#a]....STR |
00002a70  58 2c 5b 6d 65 6d 2c 23  78 5d 0d 17 f2 12 53 54  |X,[mem,#x]....ST|
00002a80  52 20 59 2c 5b 6d 65 6d  2c 23 79 5d 0d 17 fc 14  |R Y,[mem,#y]....|
00002a90  53 54 52 20 53 50 2c 5b  6d 65 6d 2c 23 73 70 5d  |STR SP,[mem,#sp]|
00002aa0  0d 18 06 12 53 54 52 20  46 2c 5b 6d 65 6d 2c 23  |....STR F,[mem,#|
00002ab0  66 5d 0d 18 10 1b 53 54  52 20 7a 70 63 2c 5b 6d  |f]....STR zpc,[m|
00002ac0  65 6d 2c 23 70 63 5f 73  74 6f 72 65 5d 0d 18 1a  |em,#pc_store]...|
00002ad0  17 4c 44 52 20 52 31 33  2c 72 65 74 75 72 6e 5f  |.LDR R13,return_|
00002ae0  61 64 64 72 0d 18 24 1a  4c 44 4d 46 44 20 52 31  |addr..$.LDMFD R1|
00002af0  33 21 2c 7b 52 31 2d 52  31 32 2c 50 43 7d 0d 18  |3!,{R1-R12,PC}..|
00002b00  2e 0f 3b 4d 4f 56 20 50  43 2c 52 31 34 0d 18 38  |..;MOV PC,R14..8|
00002b10  04 0d 18 42 10 2e 72 65  74 75 72 6e 5f 61 64 64  |...B..return_add|
00002b20  72 0d 18 4c 0a 45 51 55  44 20 30 0d 18 56 04 0d  |r..L.EQUD 0..V..|
00002b30  18 60 0e 2e 72 6f 6d 73  5f 61 64 64 72 0d 18 6a  |.`..roms_addr..j|
00002b40  0a 45 51 55 44 20 30 0d  18 74 04 0d 18 7e 04 0d  |.EQUD 0..t...~..|
00002b50  18 88 0e 2e 66 65 30 38  5f 72 65 61 64 0d 18 92  |....fe08_read...|
00002b60  11 2e 63 61 73 65 74 74  65 5f 72 65 61 64 0d 18  |..casette_read..|
00002b70  9c 0a 45 51 55 42 20 30  0d 18 a6 0f 2e 66 65 30  |..EQUB 0.....fe0|
00002b80  38 5f 77 72 69 74 65 0d  18 b0 0a 45 51 55 42 20  |8_write....EQUB |
00002b90  30 0d 18 ba 09 2e 66 65  30 39 0d 18 c4 0a 45 51  |0.....fe09....EQ|
00002ba0  55 42 20 30 0d 18 ce 0a  3b 2e 66 65 31 30 0d 18  |UB 0....;.fe10..|
00002bb0  d8 0b 3b 45 51 55 42 20  30 0d 18 e2 09 41 4c 49  |..;EQUB 0....ALI|
00002bc0  47 4e 0d 18 ec 0c 2e 74  62 75 66 66 65 72 0d 18  |GN.....tbuffer..|
00002bd0  f6 0a 45 51 55 44 20 30  0d 19 00 04 0d 19 0a 13  |..EQUD 0........|
00002be0  2e 72 65 61 64 5f 74 61  70 65 5f 64 61 74 61 0d  |.read_tape_data.|
00002bf0  19 14 17 4c 44 52 42 20  52 30 2c 5b 6d 65 6d 2c  |...LDRB R0,[mem,|
00002c00  23 45 69 66 72 5d 0d 19  1e 15 42 49 43 20 52 30  |#Eifr]....BIC R0|
00002c10  2c 52 30 2c 23 25 31 30  30 30 30 0d 19 28 04 0d  |,R0,#%10000..(..|
00002c20  19 32 17 53 54 52 42 20  52 30 2c 5b 6d 65 6d 2c  |.2.STRB R0,[mem,|
00002c30  23 45 69 66 72 5d 0d 19  3c 10 4c 44 52 42 20 52  |#Eifr]..<.LDRB R|
00002c40  30 2c 66 65 30 39 0d 19  46 11 3b 43 4d 50 20 52  |0,fe09..F.;CMP R|
00002c50  30 2c 23 97 22 2a 22 0d  19 50 14 3b 53 57 49 45  |0,#."*"..P.;SWIE|
00002c60  51 20 26 31 30 30 2b 97  22 68 22 0d 19 5a 14 3b  |Q &100+."h"..Z.;|
00002c70  53 57 49 4e 45 20 26 31  30 30 2b 97 22 48 22 0d  |SWINE &100+."H".|
00002c80  19 64 11 3b 4d 4f 56 20  52 30 2c 23 97 22 2a 22  |.d.;MOV R0,#."*"|
00002c90  0d 19 6e 04 0d 19 78 0e  4d 4f 56 20 50 43 2c 52  |..n...x.MOV PC,R|
00002ca0  31 34 0d 19 82 04 0d 19  8c 0f 2e 74 61 70 65 5f  |14.........tape_|
00002cb0  66 65 74 63 68 0d 19 96  12 3b 53 57 49 20 26 31  |fetch....;SWI &1|
00002cc0  30 30 2b 97 22 62 22 0d  19 a0 18 3b 4c 44 52 20  |00+."b"....;LDR |
00002cd0  52 30 2c 5b 6d 65 6d 2c  23 74 61 70 65 52 5d 0d  |R0,[mem,#tapeR].|
00002ce0  19 aa 30 3b 4d 4f 56 20  52 30 2c 23 26 33 34 30  |..0;MOV R0,#&340|
00002cf0  30 20 3b 20 32 30 30 30  30 30 30 2f 28 31 32 30  |0 ; 2000000/(120|
00002d00  30 2f 38 29 7e 3d 31 32  30 30 20 62 61 75 64 0d  |0/8)~=1200 baud.|
00002d10  19 b4 11 4d 4f 56 20 52  30 2c 23 26 36 30 30 30  |...MOV R0,#&6000|
00002d20  0d 19 be 11 41 44 44 53  20 52 31 2c 52 31 2c 52  |....ADDS R1,R1,R|
00002d30  30 0d 19 c8 13 4d 4f 56  4c 45 20 52 31 2c 23 26  |0....MOVLE R1,#&|
00002d40  36 30 30 30 0d 19 d2 04  0d 19 dc 18 4c 44 52 20  |6000........LDR |
00002d50  52 30 2c 5b 6d 65 6d 2c  23 45 6c 61 74 63 68 5d  |R0,[mem,#Elatch]|
00002d60  0d 19 e6 26 54 53 54 20  52 30 2c 23 25 31 31 30  |...&TST R0,#%110|
00002d70  20 3b 20 63 61 73 65 74  74 65 20 69 6e 70 75 74  | ; casette input|
00002d80  20 6d 6f 64 65 3f 0d 19  f0 15 4d 4f 56 4e 45 20  | mode?....MOVNE |
00002d90  52 31 2c 23 26 31 30 30  30 30 30 0d 19 fa 04 0d  |R1,#&100000.....|
00002da0  1a 04 24 54 53 54 20 52  30 2c 23 25 31 30 30 30  |..$TST R0,#%1000|
00002db0  30 30 30 20 3b 20 69 73  20 2a 4d 6f 74 6f 72 20  |000 ; is *Motor |
00002dc0  6f 6e 3f 0d 1a 0e 12 ec  51 20 52 31 2c 23 26 31  |on?.....Q R1,#&1|
00002dd0  30 30 30 30 30 0d 1a 18  04 0d 1a 22 1c 53 54 52  |00000......".STR|
00002de0  20 52 31 2c 5b 6d 65 6d  2c 23 74 61 70 65 5f 63  | R1,[mem,#tape_c|
00002df0  6f 75 6e 74 5d 0d 1a 2c  04 0d 1a 36 0d ec 51 20  |ount]..,...6..Q |
00002e00  50 43 2c 52 31 34 0d 1a  40 04 0d 1a 4a 1e 4c 44  |PC,R14..@...J.LD|
00002e10  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 74 61 70 65  |RB R1,[mem,#tape|
00002e20  5f 68 61 6e 64 6c 65 5d  0d 1a 54 0d 43 4d 50 20  |_handle]..T.CMP |
00002e30  52 31 2c 23 30 0d 1a 5e  0d ec 51 20 50 43 2c 52  |R1,#0..^..Q PC,R|
00002e40  31 34 0d 1a 68 04 0d 1a  72 0d 2e 74 61 70 65 5f  |14..h...r..tape_|
00002e50  67 65 74 0d 1a 7c 12 3b  53 57 49 20 26 31 30 30  |get..|.;SWI &100|
00002e60  2b 97 22 42 22 0d 1a 86  12 53 57 49 20 22 58 4f  |+."B"....SWI "XO|
00002e70  53 5f 42 47 65 74 22 0d  1a 90 0f 4d 4f 56 56 53  |S_BGet"....MOVVS|
00002e80  20 52 31 2c 23 30 0d 1a  9a 20 53 54 52 56 53 42  | R1,#0... STRVSB|
00002e90  20 52 31 2c 5b 6d 65 6d  2c 23 74 61 70 65 5f 68  | R1,[mem,#tape_h|
00002ea0  61 6e 64 6c 65 5d 0d 1a  a4 10 4d 4f 56 56 53 20  |andle]....MOVVS |
00002eb0  50 43 2c 52 31 34 0d 1a  ae 04 0d 1a b8 13 42 43  |PC,R14........BC|
00002ec0  43 20 74 61 70 65 5f 73  6b 69 70 31 30 0d 1a c2  |C tape_skip10...|
00002ed0  04 0d 1a cc 0d 4d 4f 56  20 52 30 2c 23 31 0d 1a  |.....MOV R0,#1..|
00002ee0  d6 0d 4d 4f 56 20 52 32  2c 23 30 0d 1a e0 29 53  |..MOV R2,#0...)S|
00002ef0  57 49 20 22 58 4f 53 5f  41 72 67 73 22 20 3b 20  |WI "XOS_Args" ; |
00002f00  72 65 77 69 6e 64 20 74  61 70 65 20 74 6f 20 73  |rewind tape to s|
00002f10  74 61 72 74 0d 1a ea 0f  4d 4f 56 56 53 20 52 31  |tart....MOVVS R1|
00002f20  2c 23 30 0d 1a f4 20 53  54 52 56 53 42 20 52 31  |,#0... STRVSB R1|
00002f30  2c 5b 6d 65 6d 2c 23 74  61 70 65 5f 68 61 6e 64  |,[mem,#tape_hand|
00002f40  6c 65 5d 0d 1a fe 10 4d  4f 56 56 53 20 50 43 2c  |le]....MOVVS PC,|
00002f50  52 31 34 0d 1b 08 04 0d  1b 12 10 2e 74 61 70 65  |R14.........tape|
00002f60  5f 73 6b 69 70 31 30 0d  1b 1c 11 3b 43 4d 50 20  |_skip10....;CMP |
00002f70  52 30 2c 23 97 22 2a 22  0d 1b 26 14 3b 53 57 49  |R0,#."*"..&.;SWI|
00002f80  45 51 20 26 31 30 30 2b  97 22 2a 22 0d 1b 30 04  |EQ &100+."*"..0.|
00002f90  0d 1b 3a 0f 43 4d 50 20  52 30 2c 23 26 46 46 0d  |..:.CMP R0,#&FF.|
00002fa0  1b 44 0e 42 4e 45 20 6e  6f 74 5f 46 46 0d 1b 4e  |.D.BNE not_FF..N|
00002fb0  14 53 57 49 45 51 20 22  58 4f 53 5f 42 47 65 74  |.SWIEQ "XOS_BGet|
00002fc0  22 0d 1b 58 0f 43 4d 50  20 52 30 2c 23 26 46 46  |"..X.CMP R0,#&FF|
00002fd0  0d 1b 62 0e 42 45 51 20  6e 6f 74 5f 46 46 0d 1b  |..b.BEQ not_FF..|
00002fe0  6c 04 0d 1b 76 14 3b 4d  4f 56 20 52 30 2c 52 30  |l...v.;MOV R0,R0|
00002ff0  2c 4c 53 4c 23 34 0d 1b  80 04 0d 1b 8a 16 3b 4c  |,LSL#4........;L|
00003000  44 52 42 20 52 31 2c 66  65 30 38 5f 72 65 61 64  |DRB R1,fe08_read|
00003010  0d 1b 94 17 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |....LDRB R1,[mem|
00003020  2c 23 45 69 66 72 5d 0d  1b 9e 04 0d 1b a8 10 54  |,#Eifr]........T|
00003030  53 54 20 52 30 2c 23 25  31 30 30 0d 1b b2 19 42  |ST R0,#%100....B|
00003040  49 43 45 51 20 52 31 2c  52 31 2c 23 25 31 30 30  |ICEQ R1,R1,#%100|
00003050  30 30 30 30 0d 1b bc 18  84 52 4e 45 20 52 31 2c  |0000.....RNE R1,|
00003060  52 31 2c 23 25 31 30 30  30 30 30 30 0d 1b c6 04  |R1,#%1000000....|
00003070  0d 1b d0 17 53 54 52 42  20 52 31 2c 5b 6d 65 6d  |....STRB R1,[mem|
00003080  2c 23 45 69 66 72 5d 0d  1b da 04 0d 1b e4 0d ec  |,#Eifr].........|
00003090  51 20 50 43 2c 52 31 34  0d 1b ee 04 0d 1b f8 16  |Q PC,R14........|
000030a0  4c 44 52 42 20 52 30 2c  5b 6d 65 6d 2c 23 69 65  |LDRB R0,[mem,#ie|
000030b0  72 5d 0d 1c 02 14 54 53  54 20 52 30 2c 23 25 31  |r]....TST R0,#%1|
000030c0  30 30 30 30 30 30 0d 1c  0c 0d ec 51 20 50 43 2c  |000000.....Q PC,|
000030d0  52 31 34 0d 1c 16 04 0d  1c 20 12 3b 84 52 20 52  |R14...... .;.R R|
000030e0  31 2c 52 31 2c 23 26 38  30 0d 1c 2a 16 3b 53 54  |1,R1,#&80..*.;ST|
000030f0  52 42 20 52 31 2c 66 65  30 38 5f 72 65 61 64 0d  |RB R1,fe08_read.|
00003100  1c 34 12 3b 53 57 49 20  26 31 30 30 2b 97 22 46  |.4.;SWI &100+."F|
00003110  22 0d 1c 3e 12 42 20 64  6f 5f 69 6e 74 65 72 72  |"..>.B do_interr|
00003120  75 70 74 0d 1c 48 10 3b  42 20 69 6e 74 65 72 72  |upt..H.;B interr|
00003130  75 70 74 0d 1c 52 18 3b  42 20 73 6b 69 70 5f 64  |upt..R.;B skip_d|
00003140  6f 5f 69 6e 74 65 72 72  75 70 74 0d 1c 5c 04 0d  |o_interrupt..\..|
00003150  1c 66 0b 2e 6e 6f 74 5f  46 46 0d 1c 70 10 53 54  |.f..not_FF..p.ST|
00003160  52 42 20 52 30 2c 66 65  30 39 0d 1c 7a 04 0d 1c  |RB R0,fe09..z...|
00003170  84 12 3b 53 57 49 20 26  31 30 30 2b 97 22 42 22  |..;SWI &100+."B"|
00003180  0d 1c 8e 04 0d 1c 98 17  3b 4c 44 52 42 20 52 30  |........;LDRB R0|
00003190  2c 66 65 30 38 5f 77 72  69 74 65 0d 1c a2 2f 3b  |,fe08_write.../;|
000031a0  54 53 54 20 52 30 2c 23  26 38 30 20 3b 20 72 65  |TST R0,#&80 ; re|
000031b0  63 65 69 76 65 20 69 6e  74 65 72 72 75 70 74 20  |ceive interrupt |
000031c0  65 6e 61 62 6c 65 20 62  69 74 0d 1c ac 0e 3b ec  |enable bit....;.|
000031d0  51 20 50 43 2c 52 31 34  0d 1c b6 04 0d 1c c0 16  |Q PC,R14........|
000031e0  3b 4c 44 52 42 20 52 30  2c 66 65 30 38 5f 72 65  |;LDRB R0,fe08_re|
000031f0  61 64 0d 1c ca 12 3b 84  52 20 52 30 2c 52 30 2c  |ad....;.R R0,R0,|
00003200  23 26 38 31 0d 1c d4 16  3b 53 54 52 42 20 52 30  |#&81....;STRB R0|
00003210  2c 66 65 30 38 5f 72 65  61 64 0d 1c de 17 4c 44  |,fe08_read....LD|
00003220  52 42 20 52 30 2c 5b 6d  65 6d 2c 23 45 69 66 72  |RB R0,[mem,#Eifr|
00003230  5d 0d 1c e8 14 84 52 20  52 30 2c 52 30 2c 23 25  |].....R R0,R0,#%|
00003240  31 30 30 30 30 0d 1c f2  17 53 54 52 42 20 52 30  |10000....STRB R0|
00003250  2c 5b 6d 65 6d 2c 23 45  69 66 72 5d 0d 1c fc 04  |,[mem,#Eifr]....|
00003260  0d 1d 06 18 3b 4c 44 52  42 20 52 31 32 2c 5b 6d  |....;LDRB R12,[m|
00003270  65 6d 2c 23 26 43 32 5d  0d 1d 10 17 3b 4d 4f 56  |em,#&C2]....;MOV|
00003280  20 52 31 32 2c 52 31 32  2c 4c 53 4c 23 32 34 0d  | R12,R12,LSL#24.|
00003290  1d 1a 10 3b a4 70 72 69  6e 74 32 28 31 32 29 0d  |...;.print2(12).|
000032a0  1d 24 12 3b 53 57 49 20  26 31 30 30 2b 97 22 20  |.$.;SWI &100+." |
000032b0  22 0d 1d 2e 04 0d 1d 38  17 4c 44 52 42 20 52 30  |"......8.LDRB R0|
000032c0  2c 5b 6d 65 6d 2c 23 45  69 65 72 5d 0d 1d 42 31  |,[mem,#Eier]..B1|
000032d0  54 53 54 20 52 30 2c 23  25 31 30 30 30 30 20 3b  |TST R0,#%10000 ;|
000032e0  20 72 65 63 65 69 76 65  20 69 6e 74 65 72 72 75  | receive interru|
000032f0  70 74 20 65 6e 61 62 6c  65 20 62 69 74 0d 1d 4c  |pt enable bit..L|
00003300  14 3b 53 57 49 45 51 20  26 31 30 30 2b 97 22 51  |.;SWIEQ &100+."Q|
00003310  22 0d 1d 56 0e 3b ec 51  20 50 43 2c 52 31 34 0d  |"..V.;.Q PC,R14.|
00003320  1d 60 12 3b 53 57 49 20  26 31 30 30 2b 97 22 69  |.`.;SWI &100+."i|
00003330  22 0d 1d 6a 12 42 20 64  6f 5f 69 6e 74 65 72 72  |"..j.B do_interr|
00003340  75 70 74 0d 1d 74 10 3b  42 20 69 6e 74 65 72 72  |upt..t.;B interr|
00003350  75 70 74 0d 1d 7e 0f 3b  4d 4f 56 20 50 43 2c 52  |upt..~.;MOV PC,R|
00003360  31 34 0d 1d 88 04 0d 1d  92 0a 2e 64 75 6d 6d 79  |14.........dummy|
00003370  0d 1d 9c 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 1d  |....MOV PC,R14..|
00003380  a6 04 0d 1d b0 04 0d 1d  ba 26 2e 73 74 72 62 38  |.........&.strb8|
00003390  30 30 30 20 20 20 20 20  20 3b 20 67 72 65 61 74  |000      ; great|
000033a0  65 72 20 74 68 61 6e 20  38 30 30 30 0d 1d c4 05  |er than 8000....|
000033b0  5d 0d 1d ce 0e e7 20 6d  61 73 74 65 72 20 8c 0d  |]..... master ..|
000033c0  1d d8 09 5b 4f 50 54 70  0d 1d e2 11 43 4d 50 20  |...[OPTp....CMP |
000033d0  52 31 2c 23 26 45 30 30  30 0d 1d ec 14 42 47 45  |R1,#&E000....BGE|
000033e0  20 73 74 72 62 5f 72 6f  6d 5f 72 65 74 0d 1d f6  | strb_rom_ret...|
000033f0  11 43 4d 50 20 52 31 2c  23 26 43 30 30 30 0d 1e  |.CMP R1,#&C000..|
00003400  00 15 42 47 45 20 73 74  72 62 5f 72 6f 6d 5f 72  |..BGE strb_rom_r|
00003410  65 74 32 0d 1e 0a 11 43  4d 50 20 52 31 2c 23 26  |et2....CMP R1,#&|
00003420  39 30 30 30 0d 1e 14 10  42 47 45 20 73 74 72 62  |9000....BGE strb|
00003430  5f 72 6f 6d 0d 1e 1e 05  5d 0d 1e 28 05 cc 0d 1e  |_rom....]..(....|
00003440  32 09 5b 4f 50 54 70 0d  1e 3c 11 43 4d 50 20 52  |2.[OPTp..<.CMP R|
00003450  31 2c 23 26 43 30 30 30  0d 1e 46 14 42 47 45 20  |1,#&C000..F.BGE |
00003460  73 74 72 62 5f 72 6f 6d  5f 72 65 74 0d 1e 50 05  |strb_rom_ret..P.|
00003470  5d 0d 1e 5a 05 cd 0d 1e  64 09 5b 4f 50 54 70 0d  |]..Z....d.[OPTp.|
00003480  1e 6e 04 0d 1e 78 17 4c  44 52 42 20 52 31 32 2c  |.n...x.LDRB R12,|
00003490  5b 6d 65 6d 2c 23 72 6f  6d 5d 0d 1e 82 10 54 53  |[mem,#rom]....TS|
000034a0  54 20 52 31 32 2c 23 26  38 30 0d 1e 8c 10 42 45  |T R12,#&80....BE|
000034b0  51 20 73 74 72 62 5f 72  6f 6d 0d 1e 96 04 0d 1e  |Q strb_rom......|
000034c0  a0 30 3b 53 55 42 20 52  31 33 2c 6d 65 6d 2c 23  |.0;SUB R13,mem,#|
000034d0  28 26 38 30 30 30 2b 26  42 30 30 30 29 20 3b 20  |(&8000+&B000) ; |
000034e0  34 6b 20 50 72 69 76 61  74 65 20 52 41 4d 0d 1e  |4k Private RAM..|
000034f0  aa 15 3b 53 54 52 42 20  52 30 2c 5b 52 31 33 2c  |..;STRB R0,[R13,|
00003500  52 31 5d 0d 1e b4 14 53  54 52 42 20 52 30 2c 5b  |R1]....STRB R0,[|
00003510  6d 65 6d 2c 52 31 5d 0d  1e be 0e 4d 4f 56 20 50  |mem,R1]....MOV P|
00003520  43 2c 52 31 34 0d 1e c8  04 0d 1e d2 0d 2e 73 74  |C,R14.........st|
00003530  72 62 5f 72 6f 6d 0d 1e  dc 18 53 55 42 20 52 31  |rb_rom....SUB R1|
00003540  32 2c 6d 65 6d 2c 23 2d  52 4f 4d 52 41 4d 0d 1e  |2,mem,#-ROMRAM..|
00003550  e6 17 4c 44 52 42 20 52  31 33 2c 5b 6d 65 6d 2c  |..LDRB R13,[mem,|
00003560  23 72 6f 6d 5d 0d 1e f0  16 4c 44 52 42 20 52 31  |#rom]....LDRB R1|
00003570  33 2c 5b 52 31 32 2c 52  31 33 5d 0d 1e fa 0e 43  |3,[R12,R13]....C|
00003580  4d 50 20 52 31 33 2c 23  30 0d 1f 04 16 53 54 52  |MP R13,#0....STR|
00003590  45 51 42 20 52 30 2c 5b  6d 65 6d 2c 52 31 5d 0d  |EQB R0,[mem,R1].|
000035a0  1f 0e 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 1f 18  |...MOV PC,R14...|
000035b0  13 3b 42 20 73 74 72 62  5f 72 6f 6d 5f 72 65 74  |.;B strb_rom_ret|
000035c0  0d 1f 22 04 0d 1f 2c 0b  2e 72 6f 6d 73 65 6c 0d  |.."...,..romsel.|
000035d0  1f 36 1d 4c 44 52 42 20  52 31 32 2c 5b 6d 65 6d  |.6.LDRB R12,[mem|
000035e0  2c 23 52 4f 4d 53 45 4c  5f 4f 4e 5d 0d 1f 40 0e  |,#ROMSEL_ON]..@.|
000035f0  43 4d 50 20 52 31 32 2c  23 30 0d 1f 4a 10 4d 4f  |CMP R12,#0..J.MO|
00003600  56 4e 45 20 50 43 2c 52  31 34 0d 1f 54 04 0d 1f  |VNE PC,R14..T...|
00003610  5e 16 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |^.LDRB R1,[mem,#|
00003620  72 6f 6d 5d 0d 1f 68 04  0d 1f 72 15 4c 44 52 20  |rom]..h...r.LDR |
00003630  52 31 32 2c 72 6f 6d 73  5f 61 64 64 72 0d 1f 7c  |R12,roms_addr..||
00003640  1f 80 20 52 32 2c 52 30  2c 23 26 46 20 3b 20 73  |.. R2,R0,#&F ; s|
00003650  6f 63 6b 65 74 20 6e 75  6d 62 65 72 0d 1f 86 16  |ocket number....|
00003660  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 72 6f  |LDRB R1,[mem,#ro|
00003670  6d 5d 0d 1f 90 17 43 4d  50 20 52 32 2c 52 31 3a  |m]....CMP R2,R1:|
00003680  ec 51 20 50 43 2c 52 31  34 0d 1f 9a 0f 80 20 52  |.Q PC,R14..... R|
00003690  31 2c 52 31 2c 23 26 46  0d 1f a4 0f 80 20 52 30  |1,R1,#&F..... R0|
000036a0  2c 52 30 2c 23 26 46 0d  1f ae 16 53 54 52 42 20  |,R0,#&F....STRB |
000036b0  52 30 2c 5b 6d 65 6d 2c  23 72 6f 6d 5d 0d 1f b8  |R0,[mem,#rom]...|
000036c0  18 53 55 42 20 52 31 33  2c 6d 65 6d 2c 23 2d 52  |.SUB R13,mem,#-R|
000036d0  4f 4d 52 41 4d 0d 1f c2  15 4c 44 52 42 20 52 31  |OMRAM....LDRB R1|
000036e0  33 2c 5b 52 31 33 2c 52  31 5d 0d 1f cc 31 43 4d  |3,[R13,R1]...1CM|
000036f0  50 20 52 31 33 2c 23 30  20 3b 20 69 73 20 74 68  |P R13,#0 ; is th|
00003700  65 20 62 61 6e 6b 20 62  65 69 6e 67 20 70 61 67  |e bank being pag|
00003710  65 64 20 6f 75 74 20 52  41 4d 3f 0d 1f d6 0f 42  |ed out RAM?....B|
00003720  4e 45 20 72 6f 6d 73 65  6c 32 0d 1f e0 04 0d 1f  |NE romsel2......|
00003730  ea 2e 54 53 54 20 52 30  2c 23 25 31 30 30 30 30  |..TST R0,#%10000|
00003740  30 30 30 20 3b 20 70 72  69 76 61 74 65 20 52 41  |000 ; private RA|
00003750  4d 20 6d 61 70 70 65 64  20 69 6e 3f 0d 1f f4 11  |M mapped in?....|
00003760  ec 51 20 52 31 33 2c 23  26 38 30 30 30 0d 1f fe  |.Q R13,#&8000...|
00003770  14 4d 4f 56 4e 45 20 52  31 33 2c 23 26 39 30 30  |.MOVNE R13,#&900|
00003780  30 0d 20 08 0f 80 20 52  30 2c 52 30 2c 23 26 46  |0. ... R0,R0,#&F|
00003790  0d 20 12 04 0d 20 1c 18  41 44 44 20 52 32 2c 52  |. ... ..ADD R2,R|
000037a0  31 32 2c 52 31 2c 4c 53  4c 23 31 34 0d 20 26 16  |12,R1,LSL#14. &.|
000037b0  41 44 44 4e 45 20 52 32  2c 52 32 2c 23 26 31 30  |ADDNE R2,R2,#&10|
000037c0  30 30 0d 20 30 26 41 44  44 20 52 31 32 2c 52 31  |00. 0&ADD R12,R1|
000037d0  32 2c 52 30 2c 4c 53 4c  23 31 34 20 3b 20 52 30  |2,R0,LSL#14 ; R0|
000037e0  2a 31 36 2a 31 30 32 34  0d 20 3a 18 41 44 44 4e  |*16*1024. :.ADDN|
000037f0  45 20 52 31 32 2c 52 31  32 2c 23 26 31 30 30 30  |E R12,R12,#&1000|
00003800  0d 20 44 1b 41 44 52 20  52 31 2c 72 6f 6d 73 65  |. D.ADR R1,romse|
00003810  6c 5f 6c 6f 6f 70 5f 74  65 6d 70 0d 20 4e 1b 53  |l_loop_temp. N.S|
00003820  54 4d 49 41 20 52 31 2c  7b 52 30 2c 52 34 2d 52  |TMIA R1,{R0,R4-R|
00003830  38 2c 52 31 34 7d 0d 20  58 13 41 44 44 20 6d 65  |8,R14}. X.ADD me|
00003840  6d 2c 6d 65 6d 2c 52 31  33 0d 20 62 16 52 53 42  |m,mem,R13. b.RSB|
00003850  20 52 31 33 2c 52 31 33  2c 23 26 43 30 30 30 0d  | R13,R13,#&C000.|
00003860  20 6c 10 2e 72 6f 6d 73  65 6c 5f 6c 6f 6f 70 0d  | l..romsel_loop.|
00003870  20 76 28 4c 44 4d 49 41  20 6d 65 6d 2c 7b 52 30  | v(LDMIA mem,{R0|
00003880  2c 52 31 2c 52 34 2c 52  35 2c 52 36 2c 52 37 2c  |,R1,R4,R5,R6,R7,|
00003890  52 38 2c 52 31 34 7d 0d  20 80 28 53 54 4d 49 41  |R8,R14}. .(STMIA|
000038a0  20 52 32 21 2c 7b 52 30  2c 52 31 2c 52 34 2c 52  | R2!,{R0,R1,R4,R|
000038b0  35 2c 52 36 2c 52 37 2c  52 38 2c 52 31 34 7d 0d  |5,R6,R7,R8,R14}.|
000038c0  20 8a 29 4c 44 4d 49 41  20 52 31 32 21 2c 7b 52  | .)LDMIA R12!,{R|
000038d0  30 2c 52 31 2c 52 34 2c  52 35 2c 52 36 2c 52 37  |0,R1,R4,R5,R6,R7|
000038e0  2c 52 38 2c 52 31 34 7d  0d 20 94 2b 53 54 4d 49  |,R8,R14}. .+STMI|
000038f0  41 20 28 6d 65 6d 29 21  2c 7b 52 30 2c 52 31 2c  |A (mem)!,{R0,R1,|
00003900  52 34 2c 52 35 2c 52 36  2c 52 37 2c 52 38 2c 52  |R4,R5,R6,R7,R8,R|
00003910  31 34 7d 0d 20 9e 15 53  55 42 53 20 52 31 33 2c  |14}. ..SUBS R13,|
00003920  52 31 33 2c 23 34 2a 38  0d 20 a8 13 42 4e 45 20  |R13,#4*8. ..BNE |
00003930  72 6f 6d 73 65 6c 5f 6c  6f 6f 70 0d 20 b2 16 53  |romsel_loop. ..S|
00003940  55 42 20 6d 65 6d 2c 6d  65 6d 2c 23 26 43 30 30  |UB mem,mem,#&C00|
00003950  30 0d 20 bc 1b 41 44 52  20 52 31 2c 72 6f 6d 73  |0. ..ADR R1,roms|
00003960  65 6c 5f 6c 6f 6f 70 5f  74 65 6d 70 0d 20 c6 1a  |el_loop_temp. ..|
00003970  4c 44 4d 49 41 20 52 31  2c 7b 52 30 2c 52 34 2d  |LDMIA R1,{R0,R4-|
00003980  52 38 2c 50 43 7d 0d 20  d0 15 2e 72 6f 6d 73 65  |R8,PC}. ...romse|
00003990  6c 5f 6c 6f 6f 70 5f 74  65 6d 70 0d 20 da 1f 45  |l_loop_temp. ..E|
000039a0  51 55 44 20 30 3a 45 51  55 44 20 30 3a 45 51 55  |QUD 0:EQUD 0:EQU|
000039b0  44 20 30 3a 45 51 55 44  20 30 0d 20 e4 1f 45 51  |D 0:EQUD 0. ..EQ|
000039c0  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
000039d0  20 30 3a 45 51 55 44 20  30 0d 20 ee 04 0d 20 f8  | 0:EQUD 0. ... .|
000039e0  11 2e 72 6f 6d 73 65 6c  5f 65 6d 70 74 79 0d 21  |..romsel_empty.!|
000039f0  02 17 41 44 44 20 52 31  33 2c 52 32 2c 52 32 2c  |..ADD R13,R2,R2,|
00003a00  4c 53 4c 23 38 0d 21 0c  1a 41 44 44 20 52 31 33  |LSL#8.!..ADD R13|
00003a10  2c 52 31 33 2c 52 31 33  2c 4c 53 4c 23 31 36 0d  |,R13,R13,LSL#16.|
00003a20  21 16 15 41 44 44 20 52  30 2c 6d 65 6d 2c 23 26  |!..ADD R0,mem,#&|
00003a30  38 30 30 30 0d 21 20 13  53 54 52 20 52 31 33 2c  |8000.! .STR R13,|
00003a40  5b 52 30 2c 23 30 5d 0d  21 2a 13 53 54 52 20 52  |[R0,#0].!*.STR R|
00003a50  31 33 2c 5b 52 30 2c 23  34 5d 0d 21 34 13 53 54  |13,[R0,#4].!4.ST|
00003a60  52 20 52 31 33 2c 5b 52  30 2c 23 38 5d 0d 21 3e  |R R13,[R0,#8].!>|
00003a70  14 53 54 52 20 52 31 33  2c 5b 52 30 2c 23 31 32  |.STR R13,[R0,#12|
00003a80  5d 0d 21 48 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |].!H.MOV PC,R14.|
00003a90  21 52 04 0d 21 5c 0c 2e  72 6f 6d 73 65 6c 32 0d  |!R..!\..romsel2.|
00003aa0  21 66 04 0d 21 70 18 53  55 42 20 52 31 33 2c 6d  |!f..!p.SUB R13,m|
00003ab0  65 6d 2c 23 2d 52 4f 4d  52 41 4d 0d 21 7a 15 4c  |em,#-ROMRAM.!z.L|
00003ac0  44 52 42 20 52 31 33 2c  5b 52 31 33 2c 52 32 5d  |DRB R13,[R13,R2]|
00003ad0  0d 21 84 33 43 4d 50 20  52 31 33 2c 23 32 20 3b  |.!.3CMP R13,#2 ;|
00003ae0  20 69 73 20 74 68 65 20  62 61 6e 6b 20 62 65 69  | is the bank bei|
00003af0  6e 67 20 70 61 67 65 64  20 6f 75 74 20 65 6d 70  |ng paged out emp|
00003b00  74 79 3f 0d 21 8e 14 42  45 51 20 72 6f 6d 73 65  |ty?.!..BEQ romse|
00003b10  6c 5f 65 6d 70 74 79 0d  21 98 04 0d 21 a2 2e 54  |l_empty.!...!..T|
00003b20  53 54 20 52 30 2c 23 25  31 30 30 30 30 30 30 30  |ST R0,#%10000000|
00003b30  20 3b 20 70 72 69 76 61  74 65 20 52 41 4d 20 6d  | ; private RAM m|
00003b40  61 70 70 65 64 20 69 6e  3f 0d 21 ac 11 ec 51 20  |apped in?.!...Q |
00003b50  52 31 33 2c 23 26 38 30  30 30 0d 21 b6 14 4d 4f  |R13,#&8000.!..MO|
00003b60  56 4e 45 20 52 31 33 2c  23 26 39 30 30 30 0d 21  |VNE R13,#&9000.!|
00003b70  c0 0f 80 20 52 30 2c 52  30 2c 23 26 46 0d 21 ca  |... R0,R0,#&F.!.|
00003b80  04 0d 21 d4 04 0d 21 de  26 41 44 44 20 52 31 32  |..!...!.&ADD R12|
00003b90  2c 52 31 32 2c 52 30 2c  4c 53 4c 23 31 34 20 3b  |,R12,R0,LSL#14 ;|
00003ba0  20 52 30 2a 31 36 2a 31  30 32 34 0d 21 e8 18 41  | R0*16*1024.!..A|
00003bb0  44 44 4e 45 20 52 31 32  2c 52 31 32 2c 23 26 31  |DDNE R12,R12,#&1|
00003bc0  30 30 30 0d 21 f2 13 41  44 44 20 6d 65 6d 2c 6d  |000.!..ADD mem,m|
00003bd0  65 6d 2c 52 31 33 0d 21  fc 16 52 53 42 20 52 31  |em,R13.!..RSB R1|
00003be0  33 2c 52 31 33 2c 23 26  43 30 30 30 0d 22 06 1b  |3,R13,#&C000."..|
00003bf0  41 44 52 20 52 31 2c 72  6f 6d 73 65 6c 5f 6c 6f  |ADR R1,romsel_lo|
00003c00  6f 70 5f 74 65 6d 70 0d  22 10 1b 53 54 4d 49 41  |op_temp."..STMIA|
00003c10  20 52 31 2c 7b 52 30 2c  52 34 2d 52 38 2c 52 31  | R1,{R0,R4-R8,R1|
00003c20  34 7d 0d 22 1a 11 2e 72  6f 6d 73 65 6c 32 5f 6c  |4}."...romsel2_l|
00003c30  6f 6f 70 0d 22 24 2b 4c  44 4d 49 41 20 20 52 31  |oop."$+LDMIA  R1|
00003c40  32 20 21 2c 7b 52 30 2c  52 31 2c 52 34 2c 52 35  |2 !,{R0,R1,R4,R5|
00003c50  2c 52 36 2c 52 37 2c 52  38 2c 52 31 34 7d 0d 22  |,R6,R7,R8,R14}."|
00003c60  2e 2b 53 54 4d 49 41 20  28 6d 65 6d 29 21 2c 7b  |.+STMIA (mem)!,{|
00003c70  52 30 2c 52 31 2c 52 34  2c 52 35 2c 52 36 2c 52  |R0,R1,R4,R5,R6,R|
00003c80  37 2c 52 38 2c 52 31 34  7d 0d 22 38 14 3b 4c 44  |7,R8,R14}."8.;LD|
00003c90  52 20 52 31 2c 5b 52 31  32 5d 2c 23 34 0d 22 42  |R R1,[R12],#4."B|
00003ca0  3d 3b 53 54 52 20 52 31  2c 5b 6d 65 6d 5d 2c 23  |=;STR R1,[mem],#|
00003cb0  34 20 3b 20 73 74 6f 72  65 20 62 79 74 65 20 66  |4 ; store byte f|
00003cc0  72 6f 6d 20 52 4f 4d 20  69 6e 20 6d 61 69 6e 20  |rom ROM in main |
00003cd0  6d 65 6d 6f 72 79 20 6d  61 70 0d 22 4c 15 53 55  |memory map."L.SU|
00003ce0  42 53 20 52 31 33 2c 52  31 33 2c 23 34 2a 38 0d  |BS R13,R13,#4*8.|
00003cf0  22 56 14 42 4e 45 20 72  6f 6d 73 65 6c 32 5f 6c  |"V.BNE romsel2_l|
00003d00  6f 6f 70 0d 22 60 16 53  55 42 20 6d 65 6d 2c 6d  |oop."`.SUB mem,m|
00003d10  65 6d 2c 23 26 43 30 30  30 0d 22 6a 1b 41 44 52  |em,#&C000."j.ADR|
00003d20  20 52 31 2c 72 6f 6d 73  65 6c 5f 6c 6f 6f 70 5f  | R1,romsel_loop_|
00003d30  74 65 6d 70 0d 22 74 1a  4c 44 4d 49 41 20 52 31  |temp."t.LDMIA R1|
00003d40  2c 7b 52 30 2c 52 34 2d  52 38 2c 50 43 7d 0d 22  |,{R0,R4-R8,PC}."|
00003d50  7e 04 0d 22 88 09 2e 6c  69 6e 6b 0d 22 92 0a 45  |~.."...link."..E|
00003d60  51 55 44 20 30 0d 22 9c  04 0d 22 a6 0b a4 73 63  |QUD 0."..."...sc|
00003d70  72 65 65 6e 0d 22 b0 04  0d 22 ba 12 2e 77 72 69  |reen."..."...wri|
00003d80  74 65 5f 70 61 6c 65 74  74 65 0d 22 c4 0e 80 20  |te_palette."... |
00003d90  52 31 2c 52 31 2c 23 37  0d 22 ce 1a 53 55 42 20  |R1,R1,#7."..SUB |
00003da0  52 31 32 2c 6d 65 6d 2c  23 2d 70 61 6c 5f 72 65  |R12,mem,#-pal_re|
00003db0  67 73 0d 22 d8 14 4c 44  52 42 20 52 32 2c 5b 52  |gs."..LDRB R2,[R|
00003dc0  31 32 2c 52 31 5d 0d 22  e2 17 43 4d 50 20 52 30  |12,R1]."..CMP R0|
00003dd0  2c 52 32 3a ec 51 20 50  43 2c 52 31 34 0d 22 ec  |,R2:.Q PC,R14.".|
00003de0  14 53 54 52 42 20 52 30  2c 5b 52 31 32 2c 52 31  |.STRB R0,[R12,R1|
00003df0  5d 0d 22 f6 04 0d 23 00  19 4c 44 52 20 52 31 2c  |]."...#..LDR R1,|
00003e00  5b 6d 65 6d 2c 23 50 61  6c 65 74 74 65 5d 0d 23  |[mem,#Palette].#|
00003e10  0a 0d 43 4d 50 20 52 31  2c 23 30 0d 23 14 10 4d  |..CMP R1,#0.#..M|
00003e20  4f 56 4e 45 20 50 43 2c  52 31 34 0d 23 1e 04 0d  |OVNE PC,R14.#...|
00003e30  23 28 29 4d 4f 56 20 52  31 2c 23 32 35 35 3a 53  |#()MOV R1,#255:S|
00003e40  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 70 61 6c  |TRB R1,[mem,#pal|
00003e50  5f 74 61 6d 70 65 72 5d  0d 23 32 0e 4d 4f 56 20  |_tamper].#2.MOV |
00003e60  50 43 2c 52 31 34 0d 23  3c 04 0d 23 46 0f 2e 75  |PC,R14.#<..#F..u|
00003e70  70 64 61 74 65 5f 70 61  6c 0d 23 50 19 4c 44 52  |pdate_pal.#P.LDR|
00003e80  20 52 31 2c 5b 6d 65 6d  2c 23 50 61 6c 65 74 74  | R1,[mem,#Palett|
00003e90  65 5d 0d 23 5a 0d 43 4d  50 20 52 31 2c 23 30 0d  |e].#Z.CMP R1,#0.|
00003ea0  23 64 10 4d 4f 56 4e 45  20 50 43 2c 52 31 34 0d  |#d.MOVNE PC,R14.|
00003eb0  23 6e 15 2e 66 6f 72 63  65 5f 75 70 64 61 74 65  |#n..force_update|
00003ec0  5f 70 61 6c 0d 23 78 17  4c 44 52 42 20 52 31 2c  |_pal.#x.LDRB R1,|
00003ed0  5b 6d 65 6d 2c 23 66 65  32 30 5d 0d 23 82 10 3b  |[mem,#fe20].#..;|
00003ee0  54 53 54 20 52 31 2c 23  25 31 30 0d 23 8c 1a 3b  |TST R1,#%10.#..;|
00003ef0  4d 4f 56 4e 45 20 50 43  2c 52 31 34 20 3b 20 6d  |MOVNE PC,R14 ; m|
00003f00  6f 64 65 20 37 0d 23 96  13 80 20 52 31 2c 52 31  |ode 7.#... R1,R1|
00003f10  2c 23 25 31 31 31 30 30  0d 23 a0 22 43 4d 50 20  |,#%11100.#."CMP |
00003f20  52 31 2c 23 25 31 31 31  30 30 20 3a 20 42 45 51  |R1,#%11100 : BEQ|
00003f30  20 74 77 6f 63 6f 6c 70  61 6c 0d 23 aa 22 43 4d  | twocolpal.#."CM|
00003f40  50 20 52 31 2c 23 25 30  31 30 30 30 20 3a 20 42  |P R1,#%01000 : B|
00003f50  45 51 20 74 77 6f 63 6f  6c 70 61 6c 0d 23 b4 23  |EQ twocolpal.#.#|
00003f60  43 4d 50 20 52 31 2c 23  25 31 31 30 30 30 20 3a  |CMP R1,#%11000 :|
00003f70  20 42 45 51 20 66 6f 75  72 63 6f 6c 70 61 6c 0d  | BEQ fourcolpal.|
00003f80  23 be 23 43 4d 50 20 52  31 2c 23 25 30 30 31 30  |#.#CMP R1,#%0010|
00003f90  30 20 3a 20 42 45 51 20  66 6f 75 72 63 6f 6c 70  |0 : BEQ fourcolp|
00003fa0  61 6c 0d 23 c8 04 0d 23  d2 04 0d 23 dc 12 2e 73  |al.#...#...#...s|
00003fb0  69 78 74 65 65 6e 63 6f  6c 70 61 6c 0d 23 e6 1d  |ixteencolpal.#..|
00003fc0  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 70 61  |LDRB R1,[mem,#pa|
00003fd0  6c 5f 72 65 67 73 2b 30  5d 0d 23 f0 1d 4c 44 52  |l_regs+0].#..LDR|
00003fe0  42 20 52 32 2c 5b 6d 65  6d 2c 23 70 61 6c 5f 72  |B R2,[mem,#pal_r|
00003ff0  65 67 73 2b 31 5d 0d 23  fa 04 0d 24 04 0d 4d 4f  |egs+1].#...$..MO|
00004000  56 20 52 30 2c 23 30 0d  24 0e 13 54 53 54 20 52  |V R0,#0.$..TST R|
00004010  32 2c 23 25 31 20 3b 20  72 30 0d 24 18 12 84 52  |2,#%1 ; r0.$...R|
00004020  45 51 20 52 30 2c 52 30  2c 23 25 31 0d 24 22 17  |EQ R0,R0,#%1.$".|
00004030  54 53 54 20 52 32 2c 23  25 31 30 30 30 30 20 3b  |TST R2,#%10000 ;|
00004040  20 67 30 0d 24 2c 13 84  52 45 51 20 52 30 2c 52  | g0.$,..REQ R0,R|
00004050  30 2c 23 25 31 30 0d 24  36 17 54 53 54 20 52 31  |0,#%10.$6.TST R1|
00004060  2c 23 25 31 30 30 30 30  20 3b 20 62 30 0d 24 40  |,#%10000 ; b0.$@|
00004070  14 84 52 45 51 20 52 30  2c 52 30 2c 23 25 31 30  |..REQ R0,R0,#%10|
00004080  30 0d 24 4a 04 0d 24 54  0f 53 57 49 20 26 31 30  |0.$J..$T.SWI &10|
00004090  30 2b 31 39 0d 24 5e 0e  53 57 49 20 26 31 30 30  |0+19.$^.SWI &100|
000040a0  2b 30 0d 24 68 13 53 57  49 20 22 4f 53 5f 57 72  |+0.$h.SWI "OS_Wr|
000040b0  69 74 65 43 22 0d 24 72  0c 53 57 49 20 26 31 30  |iteC".$r.SWI &10|
000040c0  30 0d 24 7c 0c 53 57 49  20 26 31 30 30 0d 24 86  |0.$|.SWI &100.$.|
000040d0  0c 53 57 49 20 26 31 30  30 0d 24 90 04 0d 24 9a  |.SWI &100.$...$.|
000040e0  0d 4d 4f 56 20 52 30 2c  23 30 0d 24 a4 14 54 53  |.MOV R0,#0.$..TS|
000040f0  54 20 52 32 2c 23 25 31  30 20 3b 20 72 32 0d 24  |T R2,#%10 ; r2.$|
00004100  ae 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
00004110  0d 24 b8 18 54 53 54 20  52 32 2c 23 25 31 30 30  |.$..TST R2,#%100|
00004120  30 30 30 20 3b 20 67 32  0d 24 c2 13 84 52 45 51  |000 ; g2.$...REQ|
00004130  20 52 30 2c 52 30 2c 23  25 31 30 0d 24 cc 18 54  | R0,R0,#%10.$..T|
00004140  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 20 3b  |ST R1,#%100000 ;|
00004150  20 62 32 0d 24 d6 14 84  52 45 51 20 52 30 2c 52  | b2.$...REQ R0,R|
00004160  30 2c 23 25 31 30 30 0d  24 e0 04 0d 24 ea 0f 53  |0,#%100.$...$..S|
00004170  57 49 20 26 31 30 30 2b  31 39 0d 24 f4 0e 53 57  |WI &100+19.$..SW|
00004180  49 20 26 31 30 30 2b 32  0d 24 fe 13 53 57 49 20  |I &100+2.$..SWI |
00004190  22 4f 53 5f 57 72 69 74  65 43 22 0d 25 08 0c 53  |"OS_WriteC".%..S|
000041a0  57 49 20 26 31 30 30 0d  25 12 0c 53 57 49 20 26  |WI &100.%..SWI &|
000041b0  31 30 30 0d 25 1c 0c 53  57 49 20 26 31 30 30 0d  |100.%..SWI &100.|
000041c0  25 26 04 0d 25 30 0d 4d  4f 56 20 52 30 2c 23 30  |%&..%0.MOV R0,#0|
000041d0  0d 25 3a 15 54 53 54 20  52 32 2c 23 25 31 30 30  |.%:.TST R2,#%100|
000041e0  20 3b 20 72 38 0d 25 44  12 84 52 45 51 20 52 30  | ; r8.%D..REQ R0|
000041f0  2c 52 30 2c 23 25 31 0d  25 4e 15 54 53 54 20 52  |,R0,#%1.%N.TST R|
00004200  31 2c 23 25 31 30 30 20  3b 20 67 38 0d 25 58 13  |1,#%100 ; g8.%X.|
00004210  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 30 0d  |.REQ R0,R0,#%10.|
00004220  25 62 19 54 53 54 20 52  31 2c 23 25 31 30 30 30  |%b.TST R1,#%1000|
00004230  30 30 30 20 3b 20 62 38  0d 25 6c 14 84 52 45 51  |000 ; b8.%l..REQ|
00004240  20 52 30 2c 52 30 2c 23  25 31 30 30 0d 25 76 04  | R0,R0,#%100.%v.|
00004250  0d 25 80 0f 53 57 49 20  26 31 30 30 2b 31 39 0d  |.%..SWI &100+19.|
00004260  25 8a 0e 53 57 49 20 26  31 30 30 2b 38 0d 25 94  |%..SWI &100+8.%.|
00004270  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00004280  0d 25 9e 0c 53 57 49 20  26 31 30 30 0d 25 a8 0c  |.%..SWI &100.%..|
00004290  53 57 49 20 26 31 30 30  0d 25 b2 0c 53 57 49 20  |SWI &100.%..SWI |
000042a0  26 31 30 30 0d 25 bc 04  0d 25 c6 0d 4d 4f 56 20  |&100.%...%..MOV |
000042b0  52 30 2c 23 30 0d 25 d0  17 54 53 54 20 52 32 2c  |R0,#0.%..TST R2,|
000042c0  23 25 31 30 30 30 20 3b  20 72 31 30 0d 25 da 12  |#%1000 ; r10.%..|
000042d0  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 0d 25  |.REQ R0,R0,#%1.%|
000042e0  e4 17 54 53 54 20 52 31  2c 23 25 31 30 30 30 20  |..TST R1,#%1000 |
000042f0  3b 20 67 31 30 0d 25 ee  13 84 52 45 51 20 52 30  |; g10.%...REQ R0|
00004300  2c 52 30 2c 23 25 31 30  0d 25 f8 1b 54 53 54 20  |,R0,#%10.%..TST |
00004310  52 31 2c 23 25 31 30 30  30 30 30 30 30 20 3b 20  |R1,#%10000000 ; |
00004320  62 31 30 0d 26 02 14 84  52 45 51 20 52 30 2c 52  |b10.&...REQ R0,R|
00004330  30 2c 23 25 31 30 30 0d  26 0c 04 0d 26 16 0f 53  |0,#%100.&...&..S|
00004340  57 49 20 26 31 30 30 2b  31 39 0d 26 20 0f 53 57  |WI &100+19.& .SW|
00004350  49 20 26 31 30 30 2b 31  30 0d 26 2a 13 53 57 49  |I &100+10.&*.SWI|
00004360  20 22 4f 53 5f 57 72 69  74 65 43 22 0d 26 34 0c  | "OS_WriteC".&4.|
00004370  53 57 49 20 26 31 30 30  0d 26 3e 0c 53 57 49 20  |SWI &100.&>.SWI |
00004380  26 31 30 30 0d 26 48 0c  53 57 49 20 26 31 30 30  |&100.&H.SWI &100|
00004390  0d 26 52 04 0d 26 5c 1d  4c 44 52 42 20 52 31 2c  |.&R..&\.LDRB R1,|
000043a0  5b 6d 65 6d 2c 23 70 61  6c 5f 72 65 67 73 2b 32  |[mem,#pal_regs+2|
000043b0  5d 0d 26 66 1d 4c 44 52  42 20 52 32 2c 5b 6d 65  |].&f.LDRB R2,[me|
000043c0  6d 2c 23 70 61 6c 5f 72  65 67 73 2b 33 5d 0d 26  |m,#pal_regs+3].&|
000043d0  70 04 0d 26 7a 0d 4d 4f  56 20 52 30 2c 23 30 0d  |p..&z.MOV R0,#0.|
000043e0  26 84 13 54 53 54 20 52  32 2c 23 25 31 20 3b 20  |&..TST R2,#%1 ; |
000043f0  72 34 0d 26 8e 12 84 52  45 51 20 52 30 2c 52 30  |r4.&...REQ R0,R0|
00004400  2c 23 25 31 0d 26 98 17  54 53 54 20 52 32 2c 23  |,#%1.&..TST R2,#|
00004410  25 31 30 30 30 30 20 3b  20 67 34 0d 26 a2 13 84  |%10000 ; g4.&...|
00004420  52 45 51 20 52 30 2c 52  30 2c 23 25 31 30 0d 26  |REQ R0,R0,#%10.&|
00004430  ac 17 54 53 54 20 52 31  2c 23 25 31 30 30 30 30  |..TST R1,#%10000|
00004440  20 3b 20 62 34 0d 26 b6  14 84 52 45 51 20 52 30  | ; b4.&...REQ R0|
00004450  2c 52 30 2c 23 25 31 30  30 0d 26 c0 04 0d 26 ca  |,R0,#%100.&...&.|
00004460  0f 53 57 49 20 26 31 30  30 2b 31 39 0d 26 d4 0e  |.SWI &100+19.&..|
00004470  53 57 49 20 26 31 30 30  2b 34 0d 26 de 13 53 57  |SWI &100+4.&..SW|
00004480  49 20 22 4f 53 5f 57 72  69 74 65 43 22 0d 26 e8  |I "OS_WriteC".&.|
00004490  0c 53 57 49 20 26 31 30  30 0d 26 f2 0c 53 57 49  |.SWI &100.&..SWI|
000044a0  20 26 31 30 30 0d 26 fc  0c 53 57 49 20 26 31 30  | &100.&..SWI &10|
000044b0  30 0d 27 06 04 0d 27 10  0d 4d 4f 56 20 52 30 2c  |0.'...'..MOV R0,|
000044c0  23 30 0d 27 1a 14 54 53  54 20 52 32 2c 23 25 31  |#0.'..TST R2,#%1|
000044d0  30 20 3b 20 72 36 0d 27  24 12 84 52 45 51 20 52  |0 ; r6.'$..REQ R|
000044e0  30 2c 52 30 2c 23 25 31  0d 27 2e 18 54 53 54 20  |0,R0,#%1.'..TST |
000044f0  52 32 2c 23 25 31 30 30  30 30 30 20 3b 20 67 36  |R2,#%100000 ; g6|
00004500  0d 27 38 13 84 52 45 51  20 52 30 2c 52 30 2c 23  |.'8..REQ R0,R0,#|
00004510  25 31 30 0d 27 42 18 54  53 54 20 52 31 2c 23 25  |%10.'B.TST R1,#%|
00004520  31 30 30 30 30 30 20 3b  20 62 36 0d 27 4c 14 84  |100000 ; b6.'L..|
00004530  52 45 51 20 52 30 2c 52  30 2c 23 25 31 30 30 0d  |REQ R0,R0,#%100.|
00004540  27 56 04 0d 27 60 0f 53  57 49 20 26 31 30 30 2b  |'V..'`.SWI &100+|
00004550  31 39 0d 27 6a 0e 53 57  49 20 26 31 30 30 2b 36  |19.'j.SWI &100+6|
00004560  0d 27 74 13 53 57 49 20  22 4f 53 5f 57 72 69 74  |.'t.SWI "OS_Writ|
00004570  65 43 22 0d 27 7e 0c 53  57 49 20 26 31 30 30 0d  |eC".'~.SWI &100.|
00004580  27 88 0c 53 57 49 20 26  31 30 30 0d 27 92 0c 53  |'..SWI &100.'..S|
00004590  57 49 20 26 31 30 30 0d  27 9c 04 0d 27 a6 0d 4d  |WI &100.'...'..M|
000045a0  4f 56 20 52 30 2c 23 30  0d 27 b0 16 54 53 54 20  |OV R0,#0.'..TST |
000045b0  52 32 2c 23 25 31 30 30  20 3b 20 72 31 32 0d 27  |R2,#%100 ; r12.'|
000045c0  ba 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
000045d0  0d 27 c4 16 54 53 54 20  52 31 2c 23 25 31 30 30  |.'..TST R1,#%100|
000045e0  20 3b 20 67 31 32 0d 27  ce 13 84 52 45 51 20 52  | ; g12.'...REQ R|
000045f0  30 2c 52 30 2c 23 25 31  30 0d 27 d8 1a 54 53 54  |0,R0,#%10.'..TST|
00004600  20 52 31 2c 23 25 31 30  30 30 30 30 30 20 3b 20  | R1,#%1000000 ; |
00004610  62 31 32 0d 27 e2 14 84  52 45 51 20 52 30 2c 52  |b12.'...REQ R0,R|
00004620  30 2c 23 25 31 30 30 0d  27 ec 04 0d 27 f6 0f 53  |0,#%100.'...'..S|
00004630  57 49 20 26 31 30 30 2b  31 39 0d 28 00 0f 53 57  |WI &100+19.(..SW|
00004640  49 20 26 31 30 30 2b 31  32 0d 28 0a 13 53 57 49  |I &100+12.(..SWI|
00004650  20 22 4f 53 5f 57 72 69  74 65 43 22 0d 28 14 0c  | "OS_WriteC".(..|
00004660  53 57 49 20 26 31 30 30  0d 28 1e 0c 53 57 49 20  |SWI &100.(..SWI |
00004670  26 31 30 30 0d 28 28 0c  53 57 49 20 26 31 30 30  |&100.((.SWI &100|
00004680  0d 28 32 04 0d 28 3c 0d  4d 4f 56 20 52 30 2c 23  |.(2..(<.MOV R0,#|
00004690  30 0d 28 46 17 54 53 54  20 52 32 2c 23 25 31 30  |0.(F.TST R2,#%10|
000046a0  30 30 20 3b 20 72 31 34  0d 28 50 12 84 52 45 51  |00 ; r14.(P..REQ|
000046b0  20 52 30 2c 52 30 2c 23  25 31 0d 28 5a 17 54 53  | R0,R0,#%1.(Z.TS|
000046c0  54 20 52 31 2c 23 25 31  30 30 30 20 3b 20 67 31  |T R1,#%1000 ; g1|
000046d0  34 0d 28 64 13 84 52 45  51 20 52 30 2c 52 30 2c  |4.(d..REQ R0,R0,|
000046e0  23 25 31 30 0d 28 6e 1b  54 53 54 20 52 31 2c 23  |#%10.(n.TST R1,#|
000046f0  25 31 30 30 30 30 30 30  30 20 3b 20 62 31 34 0d  |%10000000 ; b14.|
00004700  28 78 14 84 52 45 51 20  52 30 2c 52 30 2c 23 25  |(x..REQ R0,R0,#%|
00004710  31 30 30 0d 28 82 04 0d  28 8c 0f 53 57 49 20 26  |100.(...(..SWI &|
00004720  31 30 30 2b 31 39 0d 28  96 0f 53 57 49 20 26 31  |100+19.(..SWI &1|
00004730  30 30 2b 31 34 0d 28 a0  13 53 57 49 20 22 4f 53  |00+14.(..SWI "OS|
00004740  5f 57 72 69 74 65 43 22  0d 28 aa 0c 53 57 49 20  |_WriteC".(..SWI |
00004750  26 31 30 30 0d 28 b4 0c  53 57 49 20 26 31 30 30  |&100.(..SWI &100|
00004760  0d 28 be 0c 53 57 49 20  26 31 30 30 0d 28 c8 04  |.(..SWI &100.(..|
00004770  0d 28 d2 1d 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |.(..LDRB R1,[mem|
00004780  2c 23 70 61 6c 5f 72 65  67 73 2b 34 5d 0d 28 dc  |,#pal_regs+4].(.|
00004790  1d 4c 44 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 70  |.LDRB R2,[mem,#p|
000047a0  61 6c 5f 72 65 67 73 2b  35 5d 0d 28 e6 04 0d 28  |al_regs+5].(...(|
000047b0  f0 0d 4d 4f 56 20 52 30  2c 23 30 0d 28 fa 13 54  |..MOV R0,#0.(..T|
000047c0  53 54 20 52 32 2c 23 25  31 20 3b 20 72 35 0d 29  |ST R2,#%1 ; r5.)|
000047d0  04 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
000047e0  0d 29 0e 17 54 53 54 20  52 32 2c 23 25 31 30 30  |.)..TST R2,#%100|
000047f0  30 30 20 3b 20 67 35 0d  29 18 13 84 52 45 51 20  |00 ; g5.)...REQ |
00004800  52 30 2c 52 30 2c 23 25  31 30 0d 29 22 17 54 53  |R0,R0,#%10.)".TS|
00004810  54 20 52 31 2c 23 25 31  30 30 30 30 20 3b 20 62  |T R1,#%10000 ; b|
00004820  35 0d 29 2c 14 84 52 45  51 20 52 30 2c 52 30 2c  |5.),..REQ R0,R0,|
00004830  23 25 31 30 30 0d 29 36  04 0d 29 40 0f 53 57 49  |#%100.)6..)@.SWI|
00004840  20 26 31 30 30 2b 31 39  0d 29 4a 0e 53 57 49 20  | &100+19.)J.SWI |
00004850  26 31 30 30 2b 35 0d 29  54 13 53 57 49 20 22 4f  |&100+5.)T.SWI "O|
00004860  53 5f 57 72 69 74 65 43  22 0d 29 5e 0c 53 57 49  |S_WriteC".)^.SWI|
00004870  20 26 31 30 30 0d 29 68  0c 53 57 49 20 26 31 30  | &100.)h.SWI &10|
00004880  30 0d 29 72 0c 53 57 49  20 26 31 30 30 0d 29 7c  |0.)r.SWI &100.)||
00004890  04 0d 29 86 0d 4d 4f 56  20 52 30 2c 23 30 0d 29  |..)..MOV R0,#0.)|
000048a0  90 14 54 53 54 20 52 32  2c 23 25 31 30 20 3b 20  |..TST R2,#%10 ; |
000048b0  72 37 0d 29 9a 12 84 52  45 51 20 52 30 2c 52 30  |r7.)...REQ R0,R0|
000048c0  2c 23 25 31 0d 29 a4 18  54 53 54 20 52 32 2c 23  |,#%1.)..TST R2,#|
000048d0  25 31 30 30 30 30 30 20  3b 20 67 37 0d 29 ae 13  |%100000 ; g7.)..|
000048e0  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 30 0d  |.REQ R0,R0,#%10.|
000048f0  29 b8 18 54 53 54 20 52  31 2c 23 25 31 30 30 30  |)..TST R1,#%1000|
00004900  30 30 20 3b 20 62 37 0d  29 c2 14 84 52 45 51 20  |00 ; b7.)...REQ |
00004910  52 30 2c 52 30 2c 23 25  31 30 30 0d 29 cc 04 0d  |R0,R0,#%100.)...|
00004920  29 d6 0f 53 57 49 20 26  31 30 30 2b 31 39 0d 29  |)..SWI &100+19.)|
00004930  e0 0e 53 57 49 20 26 31  30 30 2b 37 0d 29 ea 13  |..SWI &100+7.)..|
00004940  53 57 49 20 22 4f 53 5f  57 72 69 74 65 43 22 0d  |SWI "OS_WriteC".|
00004950  29 f4 0c 53 57 49 20 26  31 30 30 0d 29 fe 0c 53  |)..SWI &100.)..S|
00004960  57 49 20 26 31 30 30 0d  2a 08 0c 53 57 49 20 26  |WI &100.*..SWI &|
00004970  31 30 30 0d 2a 12 04 0d  2a 1c 0d 4d 4f 56 20 52  |100.*...*..MOV R|
00004980  30 2c 23 30 0d 2a 26 16  54 53 54 20 52 32 2c 23  |0,#0.*&.TST R2,#|
00004990  25 31 30 30 20 3b 20 72  31 33 0d 2a 30 12 84 52  |%100 ; r13.*0..R|
000049a0  45 51 20 52 30 2c 52 30  2c 23 25 31 0d 2a 3a 16  |EQ R0,R0,#%1.*:.|
000049b0  54 53 54 20 52 31 2c 23  25 31 30 30 20 3b 20 67  |TST R1,#%100 ; g|
000049c0  31 33 0d 2a 44 13 84 52  45 51 20 52 30 2c 52 30  |13.*D..REQ R0,R0|
000049d0  2c 23 25 31 30 0d 2a 4e  1a 54 53 54 20 52 31 2c  |,#%10.*N.TST R1,|
000049e0  23 25 31 30 30 30 30 30  30 20 3b 20 62 31 33 0d  |#%1000000 ; b13.|
000049f0  2a 58 14 84 52 45 51 20  52 30 2c 52 30 2c 23 25  |*X..REQ R0,R0,#%|
00004a00  31 30 30 0d 2a 62 04 0d  2a 6c 0f 53 57 49 20 26  |100.*b..*l.SWI &|
00004a10  31 30 30 2b 31 39 0d 2a  76 0f 53 57 49 20 26 31  |100+19.*v.SWI &1|
00004a20  30 30 2b 31 33 0d 2a 80  13 53 57 49 20 22 4f 53  |00+13.*..SWI "OS|
00004a30  5f 57 72 69 74 65 43 22  0d 2a 8a 0c 53 57 49 20  |_WriteC".*..SWI |
00004a40  26 31 30 30 0d 2a 94 0c  53 57 49 20 26 31 30 30  |&100.*..SWI &100|
00004a50  0d 2a 9e 0c 53 57 49 20  26 31 30 30 0d 2a a8 04  |.*..SWI &100.*..|
00004a60  0d 2a b2 0d 4d 4f 56 20  52 30 2c 23 30 0d 2a bc  |.*..MOV R0,#0.*.|
00004a70  17 54 53 54 20 52 32 2c  23 25 31 30 30 30 20 3b  |.TST R2,#%1000 ;|
00004a80  20 72 31 35 0d 2a c6 12  84 52 45 51 20 52 30 2c  | r15.*...REQ R0,|
00004a90  52 30 2c 23 25 31 0d 2a  d0 17 54 53 54 20 52 31  |R0,#%1.*..TST R1|
00004aa0  2c 23 25 31 30 30 30 20  3b 20 67 31 35 0d 2a da  |,#%1000 ; g15.*.|
00004ab0  13 84 52 45 51 20 52 30  2c 52 30 2c 23 25 31 30  |..REQ R0,R0,#%10|
00004ac0  0d 2a e4 1b 54 53 54 20  52 31 2c 23 25 31 30 30  |.*..TST R1,#%100|
00004ad0  30 30 30 30 30 20 3b 20  62 31 35 0d 2a ee 14 84  |00000 ; b15.*...|
00004ae0  52 45 51 20 52 30 2c 52  30 2c 23 25 31 30 30 0d  |REQ R0,R0,#%100.|
00004af0  2a f8 04 0d 2b 02 0f 53  57 49 20 26 31 30 30 2b  |*...+..SWI &100+|
00004b00  31 39 0d 2b 0c 0f 53 57  49 20 26 31 30 30 2b 31  |19.+..SWI &100+1|
00004b10  35 0d 2b 16 13 53 57 49  20 22 4f 53 5f 57 72 69  |5.+..SWI "OS_Wri|
00004b20  74 65 43 22 0d 2b 20 0c  53 57 49 20 26 31 30 30  |teC".+ .SWI &100|
00004b30  0d 2b 2a 0c 53 57 49 20  26 31 30 30 0d 2b 34 0c  |.+*.SWI &100.+4.|
00004b40  53 57 49 20 26 31 30 30  0d 2b 3e 04 0d 2b 48 1d  |SWI &100.+>..+H.|
00004b50  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 70 61  |LDRB R1,[mem,#pa|
00004b60  6c 5f 72 65 67 73 2b 36  5d 0d 2b 52 1d 4c 44 52  |l_regs+6].+R.LDR|
00004b70  42 20 52 32 2c 5b 6d 65  6d 2c 23 70 61 6c 5f 72  |B R2,[mem,#pal_r|
00004b80  65 67 73 2b 37 5d 0d 2b  5c 04 0d 2b 66 0d 4d 4f  |egs+7].+\..+f.MO|
00004b90  56 20 52 30 2c 23 30 0d  2b 70 13 54 53 54 20 52  |V R0,#0.+p.TST R|
00004ba0  32 2c 23 25 31 20 3b 20  72 31 0d 2b 7a 12 84 52  |2,#%1 ; r1.+z..R|
00004bb0  45 51 20 52 30 2c 52 30  2c 23 25 31 0d 2b 84 17  |EQ R0,R0,#%1.+..|
00004bc0  54 53 54 20 52 32 2c 23  25 31 30 30 30 30 20 3b  |TST R2,#%10000 ;|
00004bd0  20 67 31 0d 2b 8e 13 84  52 45 51 20 52 30 2c 52  | g1.+...REQ R0,R|
00004be0  30 2c 23 25 31 30 0d 2b  98 17 54 53 54 20 52 31  |0,#%10.+..TST R1|
00004bf0  2c 23 25 31 30 30 30 30  20 3b 20 62 31 0d 2b a2  |,#%10000 ; b1.+.|
00004c00  14 84 52 45 51 20 52 30  2c 52 30 2c 23 25 31 30  |..REQ R0,R0,#%10|
00004c10  30 0d 2b ac 04 0d 2b b6  0f 53 57 49 20 26 31 30  |0.+...+..SWI &10|
00004c20  30 2b 31 39 0d 2b c0 0e  53 57 49 20 26 31 30 30  |0+19.+..SWI &100|
00004c30  2b 31 0d 2b ca 13 53 57  49 20 22 4f 53 5f 57 72  |+1.+..SWI "OS_Wr|
00004c40  69 74 65 43 22 0d 2b d4  0c 53 57 49 20 26 31 30  |iteC".+..SWI &10|
00004c50  30 0d 2b de 0c 53 57 49  20 26 31 30 30 0d 2b e8  |0.+..SWI &100.+.|
00004c60  0c 53 57 49 20 26 31 30  30 0d 2b f2 04 0d 2b fc  |.SWI &100.+...+.|
00004c70  0d 4d 4f 56 20 52 30 2c  23 30 0d 2c 06 14 54 53  |.MOV R0,#0.,..TS|
00004c80  54 20 52 32 2c 23 25 31  30 20 3b 20 72 33 0d 2c  |T R2,#%10 ; r3.,|
00004c90  10 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
00004ca0  0d 2c 1a 18 54 53 54 20  52 32 2c 23 25 31 30 30  |.,..TST R2,#%100|
00004cb0  30 30 30 20 3b 20 67 33  0d 2c 24 13 84 52 45 51  |000 ; g3.,$..REQ|
00004cc0  20 52 30 2c 52 30 2c 23  25 31 30 0d 2c 2e 18 54  | R0,R0,#%10.,..T|
00004cd0  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 20 3b  |ST R1,#%100000 ;|
00004ce0  20 62 33 0d 2c 38 14 84  52 45 51 20 52 30 2c 52  | b3.,8..REQ R0,R|
00004cf0  30 2c 23 25 31 30 30 0d  2c 42 04 0d 2c 4c 0f 53  |0,#%100.,B..,L.S|
00004d00  57 49 20 26 31 30 30 2b  31 39 0d 2c 56 0e 53 57  |WI &100+19.,V.SW|
00004d10  49 20 26 31 30 30 2b 33  0d 2c 60 13 53 57 49 20  |I &100+3.,`.SWI |
00004d20  22 4f 53 5f 57 72 69 74  65 43 22 0d 2c 6a 0c 53  |"OS_WriteC".,j.S|
00004d30  57 49 20 26 31 30 30 0d  2c 74 0c 53 57 49 20 26  |WI &100.,t.SWI &|
00004d40  31 30 30 0d 2c 7e 0c 53  57 49 20 26 31 30 30 0d  |100.,~.SWI &100.|
00004d50  2c 88 04 0d 2c 92 0d 4d  4f 56 20 52 30 2c 23 30  |,...,..MOV R0,#0|
00004d60  0d 2c 9c 15 54 53 54 20  52 32 2c 23 25 31 30 30  |.,..TST R2,#%100|
00004d70  20 3b 20 72 39 0d 2c a6  12 84 52 45 51 20 52 30  | ; r9.,...REQ R0|
00004d80  2c 52 30 2c 23 25 31 0d  2c b0 15 54 53 54 20 52  |,R0,#%1.,..TST R|
00004d90  31 2c 23 25 31 30 30 20  3b 20 67 39 0d 2c ba 13  |1,#%100 ; g9.,..|
00004da0  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 30 0d  |.REQ R0,R0,#%10.|
00004db0  2c c4 19 54 53 54 20 52  31 2c 23 25 31 30 30 30  |,..TST R1,#%1000|
00004dc0  30 30 30 20 3b 20 62 39  0d 2c ce 14 84 52 45 51  |000 ; b9.,...REQ|
00004dd0  20 52 30 2c 52 30 2c 23  25 31 30 30 0d 2c d8 04  | R0,R0,#%100.,..|
00004de0  0d 2c e2 0f 53 57 49 20  26 31 30 30 2b 31 39 0d  |.,..SWI &100+19.|
00004df0  2c ec 0e 53 57 49 20 26  31 30 30 2b 39 0d 2c f6  |,..SWI &100+9.,.|
00004e00  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00004e10  0d 2d 00 0c 53 57 49 20  26 31 30 30 0d 2d 0a 0c  |.-..SWI &100.-..|
00004e20  53 57 49 20 26 31 30 30  0d 2d 14 0c 53 57 49 20  |SWI &100.-..SWI |
00004e30  26 31 30 30 0d 2d 1e 04  0d 2d 28 0d 4d 4f 56 20  |&100.-...-(.MOV |
00004e40  52 30 2c 23 30 0d 2d 32  17 54 53 54 20 52 32 2c  |R0,#0.-2.TST R2,|
00004e50  23 25 31 30 30 30 20 3b  20 72 31 31 0d 2d 3c 12  |#%1000 ; r11.-<.|
00004e60  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 0d 2d  |.REQ R0,R0,#%1.-|
00004e70  46 17 54 53 54 20 52 31  2c 23 25 31 30 30 30 20  |F.TST R1,#%1000 |
00004e80  3b 20 67 31 31 0d 2d 50  13 84 52 45 51 20 52 30  |; g11.-P..REQ R0|
00004e90  2c 52 30 2c 23 25 31 30  0d 2d 5a 1b 54 53 54 20  |,R0,#%10.-Z.TST |
00004ea0  52 31 2c 23 25 31 30 30  30 30 30 30 30 20 3b 20  |R1,#%10000000 ; |
00004eb0  62 31 31 0d 2d 64 14 84  52 45 51 20 52 30 2c 52  |b11.-d..REQ R0,R|
00004ec0  30 2c 23 25 31 30 30 0d  2d 6e 04 0d 2d 78 0f 53  |0,#%100.-n..-x.S|
00004ed0  57 49 20 26 31 30 30 2b  31 39 0d 2d 82 0f 53 57  |WI &100+19.-..SW|
00004ee0  49 20 26 31 30 30 2b 31  31 0d 2d 8c 13 53 57 49  |I &100+11.-..SWI|
00004ef0  20 22 4f 53 5f 57 72 69  74 65 43 22 0d 2d 96 0c  | "OS_WriteC".-..|
00004f00  53 57 49 20 26 31 30 30  0d 2d a0 0c 53 57 49 20  |SWI &100.-..SWI |
00004f10  26 31 30 30 0d 2d aa 0c  53 57 49 20 26 31 30 30  |&100.-..SWI &100|
00004f20  0d 2d b4 04 0d 2d be 0e  4d 4f 56 20 50 43 2c 52  |.-...-..MOV PC,R|
00004f30  31 34 0d 2d c8 04 0d 2d  d2 0e 2e 74 77 6f 63 6f  |14.-...-...twoco|
00004f40  6c 70 61 6c 0d 2d dc 1d  4c 44 52 42 20 52 31 2c  |lpal.-..LDRB R1,|
00004f50  5b 6d 65 6d 2c 23 70 61  6c 5f 72 65 67 73 2b 30  |[mem,#pal_regs+0|
00004f60  5d 0d 2d e6 1d 4c 44 52  42 20 52 32 2c 5b 6d 65  |].-..LDRB R2,[me|
00004f70  6d 2c 23 70 61 6c 5f 72  65 67 73 2b 31 5d 0d 2d  |m,#pal_regs+1].-|
00004f80  f0 0d 4d 4f 56 20 52 30  2c 23 30 0d 2d fa 13 54  |..MOV R0,#0.-..T|
00004f90  53 54 20 52 32 2c 23 25  31 20 3b 20 72 30 0d 2e  |ST R2,#%1 ; r0..|
00004fa0  04 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
00004fb0  0d 2e 0e 17 54 53 54 20  52 32 2c 23 25 31 30 30  |....TST R2,#%100|
00004fc0  30 30 20 3b 20 67 30 0d  2e 18 13 84 52 45 51 20  |00 ; g0.....REQ |
00004fd0  52 30 2c 52 30 2c 23 25  31 30 0d 2e 22 17 54 53  |R0,R0,#%10..".TS|
00004fe0  54 20 52 31 2c 23 25 31  30 30 30 30 20 3b 20 62  |T R1,#%10000 ; b|
00004ff0  30 0d 2e 2c 14 84 52 45  51 20 52 30 2c 52 30 2c  |0..,..REQ R0,R0,|
00005000  23 25 31 30 30 0d 2e 36  04 0d 2e 40 0f 53 57 49  |#%100..6...@.SWI|
00005010  20 26 31 30 30 2b 31 39  0d 2e 4a 0e 53 57 49 20  | &100+19..J.SWI |
00005020  26 31 30 30 2b 30 0d 2e  54 13 53 57 49 20 22 4f  |&100+0..T.SWI "O|
00005030  53 5f 57 72 69 74 65 43  22 0d 2e 5e 0c 53 57 49  |S_WriteC"..^.SWI|
00005040  20 26 31 30 30 0d 2e 68  0c 53 57 49 20 26 31 30  | &100..h.SWI &10|
00005050  30 0d 2e 72 0c 53 57 49  20 26 31 30 30 0d 2e 7c  |0..r.SWI &100..||
00005060  04 0d 2e 86 0d 4d 4f 56  20 52 30 2c 23 30 0d 2e  |.....MOV R0,#0..|
00005070  90 15 54 53 54 20 52 32  2c 23 25 31 30 30 20 3b  |..TST R2,#%100 ;|
00005080  20 72 31 0d 2e 9a 12 84  52 45 51 20 52 30 2c 52  | r1.....REQ R0,R|
00005090  30 2c 23 25 31 0d 2e a4  15 54 53 54 20 52 31 2c  |0,#%1....TST R1,|
000050a0  23 25 31 30 30 20 3b 20  67 31 0d 2e ae 13 84 52  |#%100 ; g1.....R|
000050b0  45 51 20 52 30 2c 52 30  2c 23 25 31 30 0d 2e b8  |EQ R0,R0,#%10...|
000050c0  19 54 53 54 20 52 31 2c  23 25 31 30 30 30 30 30  |.TST R1,#%100000|
000050d0  30 20 3b 20 62 31 0d 2e  c2 14 84 52 45 51 20 52  |0 ; b1.....REQ R|
000050e0  30 2c 52 30 2c 23 25 31  30 30 0d 2e cc 04 0d 2e  |0,R0,#%100......|
000050f0  d6 0f 53 57 49 20 26 31  30 30 2b 31 39 0d 2e e0  |..SWI &100+19...|
00005100  1b 53 57 49 20 26 31 30  30 2b 33 20 3b 20 6d 6f  |.SWI &100+3 ; mo|
00005110  64 65 20 34 20 66 69 78  0d 2e ea 13 53 57 49 20  |de 4 fix....SWI |
00005120  22 4f 53 5f 57 72 69 74  65 43 22 0d 2e f4 0c 53  |"OS_WriteC"....S|
00005130  57 49 20 26 31 30 30 0d  2e fe 0c 53 57 49 20 26  |WI &100....SWI &|
00005140  31 30 30 0d 2f 08 0c 53  57 49 20 26 31 30 30 0d  |100./..SWI &100.|
00005150  2f 12 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 2f 1c  |/..MOV PC,R14./.|
00005160  04 0d 2f 26 0f 2e 66 6f  75 72 63 6f 6c 70 61 6c  |../&..fourcolpal|
00005170  0d 2f 30 1d 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |./0.LDRB R1,[mem|
00005180  2c 23 70 61 6c 5f 72 65  67 73 2b 30 5d 0d 2f 3a  |,#pal_regs+0]./:|
00005190  1d 4c 44 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 70  |.LDRB R2,[mem,#p|
000051a0  61 6c 5f 72 65 67 73 2b  31 5d 0d 2f 44 0d 4d 4f  |al_regs+1]./D.MO|
000051b0  56 20 52 30 2c 23 30 0d  2f 4e 13 54 53 54 20 52  |V R0,#0./N.TST R|
000051c0  32 2c 23 25 31 20 3b 20  72 30 0d 2f 58 12 84 52  |2,#%1 ; r0./X..R|
000051d0  45 51 20 52 30 2c 52 30  2c 23 25 31 0d 2f 62 17  |EQ R0,R0,#%1./b.|
000051e0  54 53 54 20 52 32 2c 23  25 31 30 30 30 30 20 3b  |TST R2,#%10000 ;|
000051f0  20 67 30 0d 2f 6c 13 84  52 45 51 20 52 30 2c 52  | g0./l..REQ R0,R|
00005200  30 2c 23 25 31 30 0d 2f  76 17 54 53 54 20 52 31  |0,#%10./v.TST R1|
00005210  2c 23 25 31 30 30 30 30  20 3b 20 62 30 0d 2f 80  |,#%10000 ; b0./.|
00005220  14 84 52 45 51 20 52 30  2c 52 30 2c 23 25 31 30  |..REQ R0,R0,#%10|
00005230  30 0d 2f 8a 04 0d 2f 94  0f 53 57 49 20 26 31 30  |0./.../..SWI &10|
00005240  30 2b 31 39 0d 2f 9e 0e  53 57 49 20 26 31 30 30  |0+19./..SWI &100|
00005250  2b 30 0d 2f a8 13 53 57  49 20 22 4f 53 5f 57 72  |+0./..SWI "OS_Wr|
00005260  69 74 65 43 22 0d 2f b2  0c 53 57 49 20 26 31 30  |iteC"./..SWI &10|
00005270  30 0d 2f bc 0c 53 57 49  20 26 31 30 30 0d 2f c6  |0./..SWI &100./.|
00005280  0c 53 57 49 20 26 31 30  30 0d 2f d0 04 0d 2f da  |.SWI &100./.../.|
00005290  0d 4d 4f 56 20 52 30 2c  23 30 0d 2f e4 14 54 53  |.MOV R0,#0./..TS|
000052a0  54 20 52 32 2c 23 25 31  30 20 3b 20 72 31 0d 2f  |T R2,#%10 ; r1./|
000052b0  ee 12 84 52 45 51 20 52  30 2c 52 30 2c 23 25 31  |...REQ R0,R0,#%1|
000052c0  0d 2f f8 18 54 53 54 20  52 32 2c 23 25 31 30 30  |./..TST R2,#%100|
000052d0  30 30 30 20 3b 20 67 31  0d 30 02 13 84 52 45 51  |000 ; g1.0...REQ|
000052e0  20 52 30 2c 52 30 2c 23  25 31 30 0d 30 0c 18 54  | R0,R0,#%10.0..T|
000052f0  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 20 3b  |ST R1,#%100000 ;|
00005300  20 62 31 0d 30 16 14 84  52 45 51 20 52 30 2c 52  | b1.0...REQ R0,R|
00005310  30 2c 23 25 31 30 30 0d  30 20 04 0d 30 2a 0f 53  |0,#%100.0 ..0*.S|
00005320  57 49 20 26 31 30 30 2b  31 39 0d 30 34 0e 53 57  |WI &100+19.04.SW|
00005330  49 20 26 31 30 30 2b 31  0d 30 3e 13 53 57 49 20  |I &100+1.0>.SWI |
00005340  22 4f 53 5f 57 72 69 74  65 43 22 0d 30 48 0c 53  |"OS_WriteC".0H.S|
00005350  57 49 20 26 31 30 30 0d  30 52 0c 53 57 49 20 26  |WI &100.0R.SWI &|
00005360  31 30 30 0d 30 5c 0c 53  57 49 20 26 31 30 30 0d  |100.0\.SWI &100.|
00005370  30 66 04 0d 30 70 0d 4d  4f 56 20 52 30 2c 23 30  |0f..0p.MOV R0,#0|
00005380  0d 30 7a 15 54 53 54 20  52 32 2c 23 25 31 30 30  |.0z.TST R2,#%100|
00005390  20 3b 20 72 32 0d 30 84  12 84 52 45 51 20 52 30  | ; r2.0...REQ R0|
000053a0  2c 52 30 2c 23 25 31 0d  30 8e 15 54 53 54 20 52  |,R0,#%1.0..TST R|
000053b0  31 2c 23 25 31 30 30 20  3b 20 67 32 0d 30 98 13  |1,#%100 ; g2.0..|
000053c0  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 30 0d  |.REQ R0,R0,#%10.|
000053d0  30 a2 19 54 53 54 20 52  31 2c 23 25 31 30 30 30  |0..TST R1,#%1000|
000053e0  30 30 30 20 3b 20 62 32  0d 30 ac 14 84 52 45 51  |000 ; b2.0...REQ|
000053f0  20 52 30 2c 52 30 2c 23  25 31 30 30 0d 30 b6 04  | R0,R0,#%100.0..|
00005400  0d 30 c0 0f 53 57 49 20  26 31 30 30 2b 31 39 0d  |.0..SWI &100+19.|
00005410  30 ca 0e 53 57 49 20 26  31 30 30 2b 32 0d 30 d4  |0..SWI &100+2.0.|
00005420  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00005430  0d 30 de 0c 53 57 49 20  26 31 30 30 0d 30 e8 0c  |.0..SWI &100.0..|
00005440  53 57 49 20 26 31 30 30  0d 30 f2 0c 53 57 49 20  |SWI &100.0..SWI |
00005450  26 31 30 30 0d 30 fc 04  0d 31 06 0d 4d 4f 56 20  |&100.0...1..MOV |
00005460  52 30 2c 23 30 0d 31 10  16 54 53 54 20 52 32 2c  |R0,#0.1..TST R2,|
00005470  23 25 31 30 30 30 20 3b  20 72 33 0d 31 1a 12 84  |#%1000 ; r3.1...|
00005480  52 45 51 20 52 30 2c 52  30 2c 23 25 31 0d 31 24  |REQ R0,R0,#%1.1$|
00005490  16 54 53 54 20 52 31 2c  23 25 31 30 30 30 20 3b  |.TST R1,#%1000 ;|
000054a0  20 67 33 0d 31 2e 13 84  52 45 51 20 52 30 2c 52  | g3.1...REQ R0,R|
000054b0  30 2c 23 25 31 30 0d 31  38 1a 54 53 54 20 52 31  |0,#%10.18.TST R1|
000054c0  2c 23 25 31 30 30 30 30  30 30 30 20 3b 20 62 33  |,#%10000000 ; b3|
000054d0  0d 31 42 14 84 52 45 51  20 52 30 2c 52 30 2c 23  |.1B..REQ R0,R0,#|
000054e0  25 31 30 30 0d 31 4c 04  0d 31 56 0f 53 57 49 20  |%100.1L..1V.SWI |
000054f0  26 31 30 30 2b 31 39 0d  31 60 0e 53 57 49 20 26  |&100+19.1`.SWI &|
00005500  31 30 30 2b 33 0d 31 6a  13 53 57 49 20 22 4f 53  |100+3.1j.SWI "OS|
00005510  5f 57 72 69 74 65 43 22  0d 31 74 0c 53 57 49 20  |_WriteC".1t.SWI |
00005520  26 31 30 30 0d 31 7e 0c  53 57 49 20 26 31 30 30  |&100.1~.SWI &100|
00005530  0d 31 88 0c 53 57 49 20  26 31 30 30 0d 31 92 04  |.1..SWI &100.1..|
00005540  0d 31 9c 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 31  |.1..MOV PC,R14.1|
00005550  a6 04 0d 31 b0 1b 2e 77  72 69 74 65 5f 73 63 72  |...1...write_scr|
00005560  65 65 6e 5f 73 74 61 72  74 5f 6c 6f 77 0d 31 ba  |een_start_low.1.|
00005570  16 80 20 52 30 2c 52 30  2c 23 25 31 31 31 30 30  |.. R0,R0,#%11100|
00005580  30 30 30 0d 31 c4 1e 53  54 52 42 20 52 30 2c 5b  |000.1..STRB R0,[|
00005590  6d 65 6d 2c 23 63 72 74  5f 72 65 67 73 2b 31 33  |mem,#crt_regs+13|
000055a0  5d 0d 31 ce 25 4d 4f 56  20 52 30 2c 23 31 20 3a  |].1.%MOV R0,#1 :|
000055b0  20 53 54 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 74  | STRB R0,[mem,#t|
000055c0  61 6d 70 65 72 5d 0d 31  d8 0e 4d 4f 56 20 50 43  |amper].1..MOV PC|
000055d0  2c 52 31 34 0d 31 e2 04  0d 31 ec 1a 2e 72 65 61  |,R14.1...1...rea|
000055e0  64 5f 73 63 72 65 65 6e  5f 73 74 61 72 74 5f 6c  |d_screen_start_l|
000055f0  6f 77 0d 31 f6 1e 4c 44  52 42 20 52 30 2c 5b 6d  |ow.1..LDRB R0,[m|
00005600  65 6d 2c 23 63 72 74 5f  72 65 67 73 2b 31 33 5d  |em,#crt_regs+13]|
00005610  0d 32 00 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 32  |.2..MOV PC,R14.2|
00005620  0a 04 0d 32 14 1c 2e 77  72 69 74 65 5f 73 63 72  |...2...write_scr|
00005630  65 65 6e 5f 73 74 61 72  74 5f 68 69 67 68 0d 32  |een_start_high.2|
00005640  1e 16 80 20 52 30 2c 52  30 2c 23 25 30 30 31 31  |... R0,R0,#%0011|
00005650  31 31 31 31 0d 32 28 1e  53 54 52 42 20 52 30 2c  |1111.2(.STRB R0,|
00005660  5b 6d 65 6d 2c 23 63 72  74 5f 72 65 67 73 2b 31  |[mem,#crt_regs+1|
00005670  32 5d 0d 32 32 25 4d 4f  56 20 52 30 2c 23 31 20  |2].22%MOV R0,#1 |
00005680  3a 20 53 54 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |: STRB R0,[mem,#|
00005690  74 61 6d 70 65 72 5d 0d  32 3c 0e 4d 4f 56 20 50  |tamper].2<.MOV P|
000056a0  43 2c 52 31 34 0d 32 46  04 0d 32 50 1b 2e 72 65  |C,R14.2F..2P..re|
000056b0  61 64 5f 73 63 72 65 65  6e 5f 73 74 61 72 74 5f  |ad_screen_start_|
000056c0  68 69 67 68 0d 32 5a 1e  4c 44 52 42 20 52 30 2c  |high.2Z.LDRB R0,|
000056d0  5b 6d 65 6d 2c 23 63 72  74 5f 72 65 67 73 2b 31  |[mem,#crt_regs+1|
000056e0  32 5d 0d 32 64 0e 4d 4f  56 20 50 43 2c 52 31 34  |2].2d.MOV PC,R14|
000056f0  0d 32 6e 04 0d 32 78 17  2e 77 72 69 74 65 5f 69  |.2n..2x..write_i|
00005700  73 63 72 20 3b 20 26 46  45 30 30 0d 32 82 04 0d  |scr ; &FE00.2...|
00005710  32 8c 17 4c 44 52 42 20  52 31 2c 5b 6d 65 6d 2c  |2..LDRB R1,[mem,|
00005720  23 45 69 65 72 5d 0d 32  96 04 0d 32 a0 0f 54 53  |#Eier].2...2..TS|
00005730  54 20 52 30 2c 23 26 38  30 0d 32 aa 11 84 52 45  |T R0,#&80.2...RE|
00005740  51 20 52 31 2c 52 31 2c  52 30 0d 32 b4 12 42 49  |Q R1,R1,R0.2..BI|
00005750  43 4e 45 20 52 31 2c 52  31 2c 52 30 0d 32 be 16  |CNE R1,R1,R0.2..|
00005760  80 20 52 31 2c 52 31 2c  23 25 30 31 31 31 31 31  |. R1,R1,#%011111|
00005770  30 30 0d 32 c8 17 53 54  52 42 20 52 31 2c 5b 6d  |00.2..STRB R1,[m|
00005780  65 6d 2c 23 45 69 65 72  5d 0d 32 d2 0e 4d 4f 56  |em,#Eier].2..MOV|
00005790  20 50 43 2c 52 31 34 0d  32 dc 04 0d 32 e6 04 0d  | PC,R14.2...2...|
000057a0  32 f0 04 0d 32 fa 0f 54  53 54 20 52 30 2c 23 26  |2...2..TST R0,#&|
000057b0  38 30 0d 33 04 14 3b 53  57 49 45 51 20 26 31 30  |80.3..;SWIEQ &10|
000057c0  30 2b 97 22 5b 22 0d 33  0e 14 3b 53 57 49 4e 45  |0+."[".3..;SWINE|
000057d0  20 26 31 30 30 2b 97 22  5d 22 0d 33 18 16 80 20  | &100+."]".3... |
000057e0  52 30 2c 52 30 2c 23 25  30 31 31 31 31 31 30 30  |R0,R0,#%01111100|
000057f0  0d 33 22 17 53 54 52 42  20 52 30 2c 5b 6d 65 6d  |.3".STRB R0,[mem|
00005800  2c 23 45 69 65 72 5d 0d  33 2c 12 3b 53 57 49 20  |,#Eier].3,.;SWI |
00005810  26 31 30 30 2b 97 22 5b  22 0d 33 36 16 3b 4d 4f  |&100+."[".36.;MO|
00005820  56 20 52 31 32 2c 52 30  2c 4c 53 4c 23 32 34 0d  |V R12,R0,LSL#24.|
00005830  33 40 10 3b a4 70 72 69  6e 74 32 28 31 32 29 0d  |3@.;.print2(12).|
00005840  33 4a 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 33 54  |3J.MOV PC,R14.3T|
00005850  04 0d 33 5e 17 2e 72 65  61 64 5f 69 73 63 72 20  |..3^..read_iscr |
00005860  20 3b 20 26 46 45 30 30  0d 33 68 17 4c 44 52 42  | ; &FE00.3h.LDRB|
00005870  20 52 30 2c 5b 6d 65 6d  2c 23 45 69 66 72 5d 0d  | R0,[mem,#Eifr].|
00005880  33 72 12 42 49 43 20 52  31 2c 52 30 2c 23 25 31  |3r.BIC R1,R0,#%1|
00005890  30 0d 33 7c 17 53 54 52  42 20 52 31 2c 5b 6d 65  |0.3|.STRB R1,[me|
000058a0  6d 2c 23 45 69 66 72 5d  0d 33 86 04 0d 33 90 18  |m,#Eifr].3...3..|
000058b0  3b 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 45  |;LDRB R1,[mem,#E|
000058c0  69 65 72 5d 0d 33 9a 10  3b 80 53 20 52 31 2c 52  |ier].3..;.S R1,R|
000058d0  31 2c 52 30 0d 33 a4 13  42 49 43 53 20 52 31 2c  |1,R0.3..BICS R1,|
000058e0  52 30 2c 23 25 31 31 0d  33 ae 23 84 52 4e 45 20  |R0,#%11.3.#.RNE |
000058f0  52 30 2c 52 30 2c 23 25  31 20 3b 20 6d 61 73 74  |R0,R0,#%1 ; mast|
00005900  65 72 20 49 52 51 20 62  69 74 0d 33 b8 04 0d 33  |er IRQ bit.3...3|
00005910  c2 18 3b 42 49 43 20 52  30 2c 52 30 2c 23 25 31  |..;BIC R0,R0,#%1|
00005920  30 30 30 30 30 30 0d 33  cc 17 3b 4c 44 52 42 20  |000000.3..;LDRB |
00005930  52 31 2c 5b 6d 65 6d 2c  23 26 43 32 5d 0d 33 d6  |R1,[mem,#&C2].3.|
00005940  0e 3b 43 4d 50 20 52 31  2c 23 31 0d 33 e0 19 3b  |.;CMP R1,#1.3..;|
00005950  84 52 45 51 20 52 30 2c  52 30 2c 23 25 31 30 30  |.REQ R0,R0,#%100|
00005960  30 30 30 30 0d 33 ea 0e  3b 43 4d 50 20 52 31 2c  |0000.3..;CMP R1,|
00005970  23 32 0d 33 f4 1a 3b 42  49 43 45 51 20 52 30 2c  |#2.3..;BICEQ R0,|
00005980  52 30 2c 23 25 31 30 30  30 30 30 30 0d 33 fe 19  |R0,#%1000000.3..|
00005990  3b 84 52 45 51 20 52 30  2c 52 30 2c 23 25 31 30  |;.REQ R0,R0,#%10|
000059a0  30 30 30 30 30 0d 34 08  04 0d 34 12 0e 4d 4f 56  |00000.4...4..MOV|
000059b0  20 50 43 2c 52 31 34 0d  34 1c 04 0d 34 26 10 2e  | PC,R14.4...4&..|
000059c0  72 65 63 61 6c 63 5f 77  72 61 70 0d 34 30 19 4c  |recalc_wrap.40.L|
000059d0  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 45 6c 61  |DRB R0,[mem,#Ela|
000059e0  74 63 68 5d 0d 34 3a 24  80 20 52 30 2c 52 30 2c  |tch].4:$. R0,R0,|
000059f0  23 25 30 30 31 31 31 30  30 30 20 3b 20 73 63 72  |#%00111000 ; scr|
00005a00  65 65 6e 20 6d 6f 64 65  0d 34 44 13 4d 4f 56 20  |een mode.4D.MOV |
00005a10  52 30 2c 52 30 2c 4c 53  52 23 31 0d 34 4e 15 41  |R0,R0,LSR#1.4N.A|
00005a20  44 52 20 52 31 2c 6d 6f  64 65 5f 74 61 62 6c 65  |DR R1,mode_table|
00005a30  0d 34 58 12 4c 44 52 20  52 30 2c 5b 52 31 2c 52  |.4X.LDR R0,[R1,R|
00005a40  30 5d 0d 34 62 04 0d 34  6c 16 42 49 43 20 46 2c  |0].4b..4l.BIC F,|
00005a50  46 2c 23 26 46 46 30 30  30 30 30 30 0d 34 76 16  |F,#&FF000000.4v.|
00005a60  42 49 43 20 46 2c 46 2c  23 26 30 30 46 46 30 30  |BIC F,F,#&00FF00|
00005a70  30 30 0d 34 80 20 84 52  20 46 2c 46 2c 52 30 2c  |00.4. .R F,F,R0,|
00005a80  4c 53 4c 23 31 36 20 3b  20 77 72 61 70 5f 61 64  |LSL#16 ; wrap_ad|
00005a90  64 72 0d 34 8a 04 0d 34  94 0e 4d 4f 56 20 50 43  |dr.4...4..MOV PC|
00005aa0  2c 52 31 34 0d 34 9e 04  0d 34 a8 11 2e 63 6f 75  |,R14.4...4...cou|
00005ab0  6e 74 65 72 5f 6c 61 73  74 0d 34 b2 0a 45 51 55  |nter_last.4..EQU|
00005ac0  44 20 30 0d 34 bc 04 0d  34 c6 12 2e 77 72 69 74  |D 0.4...4...writ|
00005ad0  65 5f 63 6f 75 6e 74 65  72 0d 34 d0 16 4c 44 52  |e_counter.4..LDR|
00005ae0  42 20 52 31 2c 52 31 34  73 74 6f 72 65 2b 34 0d  |B R1,R14store+4.|
00005af0  34 da 17 43 4d 50 20 52  30 2c 52 31 3a ec 51 20  |4..CMP R0,R1:.Q |
00005b00  50 43 2c 52 31 34 0d 34  e4 04 0d 34 ee 14 53 54  |PC,R14.4...4..ST|
00005b10  52 20 52 31 34 2c 52 31  34 73 74 6f 72 65 0d 34  |R R14,R14store.4|
00005b20  f8 10 41 44 44 20 52 30  2c 52 30 2c 23 31 0d 35  |..ADD R0,R0,#1.5|
00005b30  02 16 53 54 52 42 20 52  30 2c 52 31 34 73 74 6f  |..STRB R0,R14sto|
00005b40  72 65 2b 34 0d 35 0c 04  0d 35 16 15 4c 44 52 20  |re+4.5...5..LDR |
00005b50  52 30 2c 5b 6d 65 6d 2c  23 6d 69 6e 5d 0d 35 20  |R0,[mem,#min].5 |
00005b60  12 53 55 42 20 52 30 2c  52 30 2c 74 69 6d 65 0d  |.SUB R0,R0,time.|
00005b70  35 2a 1d 4c 44 52 20 52  31 2c 5b 6d 65 6d 2c 23  |5*.LDR R1,[mem,#|
00005b80  73 6f 75 6e 64 5f 74 69  6d 65 72 5d 0d 35 34 10  |sound_timer].54.|
00005b90  53 55 42 20 52 31 2c 52  31 2c 52 30 0d 35 3e 17  |SUB R1,R1,R0.5>.|
00005ba0  4c 44 52 20 52 32 2c 63  6f 75 6e 74 65 72 5f 6c  |LDR R2,counter_l|
00005bb0  61 73 74 0d 35 48 17 53  54 52 20 52 31 2c 63 6f  |ast.5H.STR R1,co|
00005bc0  75 6e 74 65 72 5f 6c 61  73 74 0d 35 52 10 53 55  |unter_last.5R.SU|
00005bd0  42 20 52 31 2c 52 32 2c  52 31 0d 35 5c 0f 43 4d  |B R1,R2,R1.5\.CM|
00005be0  50 20 52 31 2c 23 32 30  30 0d 35 66 14 3b 53 57  |P R1,#200.5f.;SW|
00005bf0  49 4c 54 20 26 31 30 30  2b 97 22 73 22 0d 35 70  |ILT &100+."s".5p|
00005c00  12 42 47 45 20 73 6b 69  70 5f 6e 6f 69 73 65 0d  |.BGE skip_noise.|
00005c10  35 7a 04 0d 35 84 2b 4d  4f 56 20 52 30 2c 23 25  |5z..5.+MOV R0,#%|
00005c20  31 31 31 30 30 31 30 30  20 3b 20 6c 6f 77 20 66  |11100100 ; low f|
00005c30  72 65 71 75 65 6e 63 79  20 6e 6f 69 73 65 0d 35  |requency noise.5|
00005c40  8e 16 53 54 52 42 20 52  30 2c 73 6f 75 6e 64 5f  |..STRB R0,sound_|
00005c50  64 61 74 61 0d 35 98 1e  4d 4f 56 20 52 30 2c 23  |data.5..MOV R0,#|
00005c60  30 20 3a 20 42 4c 20 73  6f 75 6e 64 5f 6c 61 74  |0 : BL sound_lat|
00005c70  63 68 0d 35 a2 2c 4d 4f  56 20 52 30 2c 23 25 31  |ch.5.,MOV R0,#%1|
00005c80  31 31 31 30 30 30 30 20  3b 20 6d 61 78 69 6d 75  |1110000 ; maximu|
00005c90  6d 20 76 6f 6c 75 6d 65  20 6e 6f 69 73 65 0d 35  |m volume noise.5|
00005ca0  ac 16 53 54 52 42 20 52  30 2c 73 6f 75 6e 64 5f  |..STRB R0,sound_|
00005cb0  64 61 74 61 0d 35 b6 1e  4d 4f 56 20 52 30 2c 23  |data.5..MOV R0,#|
00005cc0  30 20 3a 20 42 4c 20 73  6f 75 6e 64 5f 6c 61 74  |0 : BL sound_lat|
00005cd0  63 68 0d 35 c0 2a 4d 4f  56 20 52 30 2c 23 25 31  |ch.5.*MOV R0,#%1|
00005ce0  31 30 31 31 31 31 31 20  3b 20 63 68 61 6e 6e 65  |1011111 ; channe|
00005cf0  6c 20 31 20 76 6f 6c 75  6d 65 20 30 0d 35 ca 16  |l 1 volume 0.5..|
00005d00  53 54 52 42 20 52 30 2c  73 6f 75 6e 64 5f 64 61  |STRB R0,sound_da|
00005d10  74 61 0d 35 d4 1e 4d 4f  56 20 52 30 2c 23 30 20  |ta.5..MOV R0,#0 |
00005d20  3a 20 42 4c 20 73 6f 75  6e 64 5f 6c 61 74 63 68  |: BL sound_latch|
00005d30  0d 35 de 04 0d 35 e8 13  4c 44 52 20 50 43 2c 52  |.5...5..LDR PC,R|
00005d40  31 34 73 74 6f 72 65 0d  35 f2 12 3b 42 20 73 6b  |14store.5..;B sk|
00005d50  69 70 5f 6e 6f 69 73 65  32 0d 35 fc 04 0d 36 06  |ip_noise2.5...6.|
00005d60  0f 2e 73 6b 69 70 5f 6e  6f 69 73 65 0d 36 10 26  |..skip_noise.6.&|
00005d70  4d 4f 56 20 52 30 2c 23  25 31 31 31 31 31 31 31  |MOV R0,#%1111111|
00005d80  31 20 3b 20 6e 6f 69 73  65 20 76 6f 6c 75 6d 65  |1 ; noise volume|
00005d90  20 30 0d 36 1a 16 53 54  52 42 20 52 30 2c 73 6f  | 0.6..STRB R0,so|
00005da0  75 6e 64 5f 64 61 74 61  0d 36 24 1e 4d 4f 56 20  |und_data.6$.MOV |
00005db0  52 30 2c 23 30 20 3a 20  42 4c 20 73 6f 75 6e 64  |R0,#0 : BL sound|
00005dc0  5f 6c 61 74 63 68 0d 36  2e 04 0d 36 38 10 2e 73  |_latch.6...68..s|
00005dd0  6b 69 70 5f 6e 6f 69 73  65 32 0d 36 42 16 4c 44  |kip_noise2.6B.LD|
00005de0  52 42 20 52 30 2c 52 31  34 73 74 6f 72 65 2b 34  |RB R0,R14store+4|
00005df0  0d 36 4c 04 0d 36 56 13  4d 4f 56 20 52 30 2c 52  |.6L..6V.MOV R0,R|
00005e00  30 2c 4c 53 4c 23 32 0d  36 60 12 80 20 52 30 2c  |0,LSL#2.6`.. R0,|
00005e10  52 30 2c 23 25 31 31 31  31 0d 36 6a 25 84 52 20  |R0,#%1111.6j%.R |
00005e20  52 30 2c 52 30 2c 23 25  31 31 30 30 30 30 30 30  |R0,R0,#%11000000|
00005e30  20 3b 20 74 6f 6e 65 20  31 20 66 72 65 71 0d 36  | ; tone 1 freq.6|
00005e40  74 16 53 54 52 42 20 52  30 2c 73 6f 75 6e 64 5f  |t.STRB R0,sound_|
00005e50  64 61 74 61 0d 36 7e 0d  4d 4f 56 20 52 30 2c 23  |data.6~.MOV R0,#|
00005e60  30 0d 36 88 12 42 4c 20  73 6f 75 6e 64 5f 6c 61  |0.6..BL sound_la|
00005e70  74 63 68 0d 36 92 16 4c  44 52 42 20 52 30 2c 52  |tch.6..LDRB R0,R|
00005e80  31 34 73 74 6f 72 65 2b  34 0d 36 9c 13 4d 4f 56  |14store+4.6..MOV|
00005e90  20 52 30 2c 52 30 2c 4c  53 52 23 32 0d 36 a6 16  | R0,R0,LSR#2.6..|
00005ea0  53 54 52 42 20 52 30 2c  73 6f 75 6e 64 5f 64 61  |STRB R0,sound_da|
00005eb0  74 61 0d 36 b0 14 4c 44  52 20 52 31 34 2c 52 31  |ta.6..LDR R14,R1|
00005ec0  34 73 74 6f 72 65 0d 36  ba 0d 4d 4f 56 20 52 30  |4store.6..MOV R0|
00005ed0  2c 23 30 0d 36 c4 11 42  20 73 6f 75 6e 64 5f 6c  |,#0.6..B sound_l|
00005ee0  61 74 63 68 0d 36 ce 04  0d 36 d8 0d 2e 52 31 34  |atch.6...6...R14|
00005ef0  73 74 6f 72 65 0d 36 e2  0a 45 51 55 44 20 30 0d  |store.6..EQUD 0.|
00005f00  36 ec 0a 45 51 55 44 20  30 0d 36 f6 04 0d 37 00  |6..EQUD 0.6...7.|
00005f10  10 2e 77 72 69 74 65 5f  6c 61 74 63 68 0d 37 0a  |..write_latch.7.|
00005f20  19 53 54 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 45  |.STRB R0,[mem,#E|
00005f30  6c 61 74 63 68 5d 0d 37  14 04 0d 37 1e 14 53 54  |latch].7...7..ST|
00005f40  52 20 52 31 34 2c 52 31  34 73 74 6f 72 65 0d 37  |R R14,R14store.7|
00005f50  28 0f 54 53 54 20 52 30  2c 23 25 31 30 0d 37 32  |(.TST R0,#%10.72|
00005f60  29 ec 51 20 52 30 2c 23  25 31 31 30 31 31 31 31  |).Q R0,#%1101111|
00005f70  31 20 3b 20 63 68 61 6e  6e 65 6c 20 31 20 76 6f  |1 ; channel 1 vo|
00005f80  6c 75 6d 65 20 30 0d 37  3c 2d 4d 4f 56 4e 45 20  |lume 0.7<-MOVNE |
00005f90  52 30 2c 23 25 31 31 30  31 30 30 30 30 20 3b 20  |R0,#%11010000 ; |
00005fa0  63 68 61 6e 6e 65 6c 20  31 20 76 6f 6c 75 6d 65  |channel 1 volume|
00005fb0  20 31 35 0d 37 46 16 53  54 52 42 20 52 30 2c 73  | 15.7F.STRB R0,s|
00005fc0  6f 75 6e 64 5f 64 61 74  61 0d 37 50 0d 4d 4f 56  |ound_data.7P.MOV|
00005fd0  20 52 30 2c 23 30 0d 37  5a 12 42 4c 20 73 6f 75  | R0,#0.7Z.BL sou|
00005fe0  6e 64 5f 6c 61 74 63 68  0d 37 64 04 0d 37 6e 26  |nd_latch.7d..7n&|
00005ff0  4d 4f 56 20 52 30 2c 23  25 31 31 31 31 31 31 31  |MOV R0,#%1111111|
00006000  31 20 3b 20 6e 6f 69 73  65 20 76 6f 6c 75 6d 65  |1 ; noise volume|
00006010  20 30 0d 37 78 16 53 54  52 42 20 52 30 2c 73 6f  | 0.7x.STRB R0,so|
00006020  75 6e 64 5f 64 61 74 61  0d 37 82 1e 4d 4f 56 20  |und_data.7..MOV |
00006030  52 30 2c 23 30 20 3a 20  42 4c 20 73 6f 75 6e 64  |R0,#0 : BL sound|
00006040  5f 6c 61 74 63 68 0d 37  8c 04 0d 37 96 14 4c 44  |_latch.7...7..LD|
00006050  52 20 52 31 34 2c 52 31  34 73 74 6f 72 65 0d 37  |R R14,R14store.7|
00006060  a0 19 4c 44 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |..LDRB R0,[mem,#|
00006070  45 6c 61 74 63 68 5d 0d  37 aa 04 0d 37 b4 24 80  |Elatch].7...7.$.|
00006080  20 52 30 2c 52 30 2c 23  25 30 30 31 31 31 30 30  | R0,R0,#%0011100|
00006090  30 20 3b 20 73 63 72 65  65 6e 20 6d 6f 64 65 0d  |0 ; screen mode.|
000060a0  37 be 10 4c 44 52 42 20  52 31 2c 6d 6f 64 65 0d  |7..LDRB R1,mode.|
000060b0  37 c8 0d 43 4d 50 20 52  30 2c 52 31 0d 37 d2 0d  |7..CMP R0,R1.7..|
000060c0  ec 51 20 50 43 2c 52 31  34 0d 37 dc 10 53 54 52  |.Q PC,R14.7..STR|
000060d0  42 20 52 30 2c 6d 6f 64  65 0d 37 e6 04 0d 37 f0  |B R0,mode.7...7.|
000060e0  25 4d 4f 56 20 52 31 2c  23 31 20 3a 20 53 54 52  |%MOV R1,#1 : STR|
000060f0  42 20 52 31 2c 5b 6d 65  6d 2c 23 74 61 6d 70 65  |B R1,[mem,#tampe|
00006100  72 5d 0d 37 fa 04 0d 38  04 12 43 4d 50 20 52 30  |r].7...8..CMP R0|
00006110  2c 23 37 20 3c 3c 20 33  0d 38 0e 15 84 52 45 51  |,#7 << 3.8...REQ|
00006120  20 46 2c 46 2c 23 31 20  3c 3c 20 31 32 0d 38 18  | F,F,#1 << 12.8.|
00006130  16 42 49 43 4e 45 20 46  2c 46 2c 23 31 20 3c 3c  |.BICNE F,F,#1 <<|
00006140  20 31 32 0d 38 22 11 53  57 49 45 51 20 26 31 30  | 12.8".SWIEQ &10|
00006150  30 2b 31 32 0d 38 2c 04  0d 38 36 12 43 4d 50 20  |0+12.8,..86.CMP |
00006160  52 30 2c 23 33 20 3c 3c  20 33 0d 38 40 10 4d 4f  |R0,#3 << 3.8@.MO|
00006170  56 4c 45 20 52 31 2c 23  38 30 0d 38 4a 10 4d 4f  |VLE R1,#80.8J.MO|
00006180  56 47 54 20 52 31 2c 23  34 30 0d 38 54 35 53 54  |VGT R1,#40.8T5ST|
00006190  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |RB R1,[mem,#crt_|
000061a0  72 65 67 73 2b 31 5d 20  3b 20 68 6f 72 69 7a 6f  |regs+1] ; horizo|
000061b0  6e 74 61 6c 20 63 68 61  72 61 63 74 65 72 73 0d  |ntal characters.|
000061c0  38 5e 13 4d 4f 56 20 52  30 2c 52 30 2c 4c 53 52  |8^.MOV R0,R0,LSR|
000061d0  23 31 0d 38 68 15 41 44  52 20 52 31 2c 6d 6f 64  |#1.8h.ADR R1,mod|
000061e0  65 5f 74 61 62 6c 65 0d  38 72 12 4c 44 52 20 52  |e_table.8r.LDR R|
000061f0  30 2c 5b 52 31 2c 52 30  5d 0d 38 7c 04 0d 38 86  |0,[R1,R0].8|..8.|
00006200  16 42 49 43 20 46 2c 46  2c 23 26 46 46 30 30 30  |.BIC F,F,#&FF000|
00006210  30 30 30 0d 38 90 16 42  49 43 20 46 2c 46 2c 23  |000.8..BIC F,F,#|
00006220  26 30 30 46 46 30 30 30  30 0d 38 9a 20 84 52 20  |&00FF0000.8. .R |
00006230  46 2c 46 2c 52 30 2c 4c  53 4c 23 31 36 20 3b 20  |F,F,R0,LSL#16 ; |
00006240  77 72 61 70 5f 61 64 64  72 0d 38 a4 04 0d 38 ae  |wrap_addr.8...8.|
00006250  14 4d 4f 56 20 52 30 2c  52 30 2c 4c 53 52 23 31  |.MOV R0,R0,LSR#1|
00006260  36 0d 38 b8 10 80 20 52  31 2c 52 30 2c 23 26 46  |6.8... R1,R0,#&F|
00006270  46 0d 38 c2 33 53 54 52  42 20 52 31 2c 5b 6d 65  |F.8.3STRB R1,[me|
00006280  6d 2c 23 63 72 74 5f 72  65 67 73 2b 36 5d 20 3b  |m,#crt_regs+6] ;|
00006290  20 76 65 72 74 69 63 61  6c 20 63 68 61 72 61 63  | vertical charac|
000062a0  74 65 72 73 0d 38 cc 0f  4d 4f 56 20 52 31 2c 23  |ters.8..MOV R1,#|
000062b0  26 32 34 0d 38 d6 25 53  54 52 42 20 52 31 2c 5b  |&24.8.%STRB R1,[|
000062c0  6d 65 6d 2c 23 63 72 74  5f 72 65 67 73 2b 33 5d  |mem,#crt_regs+3]|
000062d0  20 3b 20 6d 69 73 63 2e  0d 38 e0 13 4d 4f 56 20  | ; misc..8..MOV |
000062e0  52 30 2c 52 30 2c 4c 53  52 23 38 0d 38 ea 17 53  |R0,R0,LSR#8.8..S|
000062f0  54 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 66 65 32  |TRB R0,[mem,#fe2|
00006300  30 5d 0d 38 f4 2d 42 20  70 6f 6b 65 5f 75 70 64  |0].8.-B poke_upd|
00006310  61 74 65 70 69 78 65 6c  56 20 3b 20 69 6e 63 6c  |atepixelV ; incl|
00006320  75 64 65 73 20 4d 4f 56  20 50 43 2c 52 31 34 0d  |udes MOV PC,R14.|
00006330  38 fe 04 0d 39 08 09 2e  6d 6f 64 65 0d 39 12 0a  |8...9...mode.9..|
00006340  45 51 55 44 20 30 0d 39  1c 04 0d 39 26 0f 2e 6d  |EQUD 0.9...9&..m|
00006350  6f 64 65 5f 74 61 62 6c  65 0d 39 30 1b 45 51 55  |ode_table.90.EQU|
00006360  44 20 26 39 43 32 30 33  30 30 30 20 3b 20 6d 6f  |D &9C203000 ; mo|
00006370  64 65 20 30 0d 39 3a 1b  45 51 55 44 20 26 44 38  |de 0.9:.EQUD &D8|
00006380  32 30 33 30 30 30 20 3b  20 6d 6f 64 65 20 31 0d  |203000 ; mode 1.|
00006390  39 44 1b 45 51 55 44 20  26 46 34 32 30 33 30 30  |9D.EQUD &F420300|
000063a0  30 20 3b 20 6d 6f 64 65  20 32 0d 39 4e 1b 45 51  |0 ; mode 2.9N.EQ|
000063b0  55 44 20 26 39 43 31 39  34 30 30 30 20 3b 20 6d  |UD &9C194000 ; m|
000063c0  6f 64 65 20 33 0d 39 58  1b 45 51 55 44 20 26 38  |ode 3.9X.EQUD &8|
000063d0  38 32 30 35 38 30 30 20  3b 20 6d 6f 64 65 20 34  |8205800 ; mode 4|
000063e0  0d 39 62 1b 45 51 55 44  20 26 43 34 32 30 35 38  |.9b.EQUD &C42058|
000063f0  30 30 20 3b 20 6d 6f 64  65 20 35 0d 39 6c 1b 45  |00 ; mode 5.9l.E|
00006400  51 55 44 20 26 38 38 31  39 36 30 30 30 20 3b 20  |QUD &88196000 ; |
00006410  6d 6f 64 65 20 36 0d 39  76 1d 45 51 55 44 20 26  |mode 6.9v.EQUD &|
00006420  38 38 31 39 36 30 30 30  20 3b 20 28 6d 6f 64 65  |88196000 ; (mode|
00006430  20 37 29 0d 39 80 04 0d  39 8a 0f 2e 72 65 61 64  | 7).9...9...read|
00006440  5f 6c 61 74 63 68 0d 39  94 19 4c 44 52 42 20 52  |_latch.9..LDRB R|
00006450  30 2c 5b 6d 65 6d 2c 23  45 6c 61 74 63 68 5d 0d  |0,[mem,#Elatch].|
00006460  39 9e 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 39 a8  |9..MOV PC,R14.9.|
00006470  04 0d 39 b2 11 2e 77 72  69 74 65 5f 52 4f 4d 69  |..9...write_ROMi|
00006480  6e 74 0d 39 bc 19 53 54  52 42 20 52 30 2c 5b 6d  |nt.9..STRB R0,[m|
00006490  65 6d 2c 23 52 4f 4d 69  6e 74 5d 0d 39 c6 17 4c  |em,#ROMint].9..L|
000064a0  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 45 69 66  |DRB R1,[mem,#Eif|
000064b0  72 5d 0d 39 d0 12 54 53  54 20 52 30 2c 23 25 31  |r].9..TST R0,#%1|
000064c0  30 30 30 30 0d 39 da 15  42 49 43 4e 45 20 52 31  |0000.9..BICNE R1|
000064d0  2c 52 31 2c 23 25 31 30  30 0d 39 e4 14 3b 53 57  |,R1,#%100.9..;SW|
000064e0  49 4e 45 20 26 31 30 30  2b 97 22 2f 22 0d 39 ee  |INE &100+."/".9.|
000064f0  13 54 53 54 20 52 30 2c  23 25 31 30 30 30 30 30  |.TST R0,#%100000|
00006500  0d 39 f8 16 42 49 43 4e  45 20 52 31 2c 52 31 2c  |.9..BICNE R1,R1,|
00006510  23 25 31 30 30 30 0d 3a  02 14 3b 53 57 49 4e 45  |#%1000.:..;SWINE|
00006520  20 26 31 30 30 2b 97 22  2e 22 0d 3a 0c 14 54 53  | &100+.".".:..TS|
00006530  54 20 52 30 2c 23 25 31  30 30 30 30 30 30 0d 3a  |T R0,#%1000000.:|
00006540  16 39 42 49 43 4e 45 20  52 31 2c 52 31 2c 23 25  |.9BICNE R1,R1,#%|
00006550  31 30 30 30 30 30 30 20  3b 20 63 6c 65 61 72 20  |1000000 ; clear |
00006560  28 73 6f 6d 65 3f 29 20  74 61 70 65 20 69 6e 74  |(some?) tape int|
00006570  65 72 72 75 70 74 73 0d  3a 20 14 3b 53 57 49 4e  |errupts.: .;SWIN|
00006580  45 20 26 31 30 30 2b 97  22 2c 22 0d 3a 2a 17 53  |E &100+.",".:*.S|
00006590  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 45 69 66  |TRB R1,[mem,#Eif|
000065a0  72 5d 0d 3a 34 12 80 20  52 30 2c 52 30 2c 23 25  |r].:4.. R0,R0,#%|
000065b0  31 31 31 31 0d 3a 3e 0d  43 4d 50 20 52 30 2c 23  |1111.:>.CMP R0,#|
000065c0  38 0d 3a 48 0f 43 4d 50  4e 45 20 52 30 2c 23 39  |8.:H.CMPNE R0,#9|
000065d0  0d 3a 52 15 84 52 45 51  20 46 2c 46 2c 23 31 20  |.:R..REQ F,F,#1 |
000065e0  3c 3c 20 31 31 0d 3a 5c  16 42 49 43 4e 45 20 46  |<< 11.:\.BICNE F|
000065f0  2c 46 2c 23 31 20 3c 3c  20 31 31 0d 3a 66 14 3b  |,F,#1 << 11.:f.;|
00006600  53 57 49 45 51 20 26 31  30 30 2b 97 22 31 22 0d  |SWIEQ &100+."1".|
00006610  3a 70 14 3b 53 57 49 4e  45 20 26 31 30 30 2b 97  |:p.;SWINE &100+.|
00006620  22 30 22 0d 3a 7a 0e 42  4e 45 20 72 6f 6d 73 65  |"0".:z.BNE romse|
00006630  6c 0d 3a 84 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |l.:..MOV PC,R14.|
00006640  3a 8e 04 0d 3a 98 10 2e  72 65 61 64 5f 52 4f 4d  |:...:...read_ROM|
00006650  69 6e 74 0d 3a a2 11 2e  72 65 61 64 5f 63 6f 75  |int.:...read_cou|
00006660  6e 74 65 72 0d 3a ac 14  2e 77 72 69 74 65 5f 74  |nter.:...write_t|
00006670  61 70 65 5f 64 61 74 61  0d 3a b6 11 2e 72 65 61  |ape_data.:...rea|
00006680  64 5f 70 61 6c 65 74 74  65 0d 3a c0 0e 4d 4f 56  |d_palette.:..MOV|
00006690  20 50 43 2c 52 31 34 0d  3a ca 04 0d 3a d4 10 a4  | PC,R14.:...:...|
000066a0  73 6f 75 6e 64 5f 6c 61  74 63 68 0d 3a de 0f a4  |sound_latch.:...|
000066b0  73 6f 75 6e 64 5f 6d 69  73 63 0d 3a e8 04 0d 3a  |sound_misc.:...:|
000066c0  f2 0b 2e 6f 73 62 70 75  74 0d 3a fc 13 4d 4f 56  |...osbput.:..MOV|
000066d0  20 52 30 2c 41 2c 4c 53  52 23 32 34 0d 3b 06 13  | R0,A,LSR#24.;..|
000066e0  4d 4f 56 20 52 31 2c 59  2c 4c 53 52 23 32 34 0d  |MOV R1,Y,LSR#24.|
000066f0  3b 10 12 53 57 49 20 22  58 4f 53 5f 42 50 75 74  |;..SWI "XOS_BPut|
00006700  22 0d 3b 1a 11 42 56 53  20 73 77 69 5f 65 72 72  |".;..BVS swi_err|
00006710  6f 72 0d 3b 24 17 42 20  6f 70 63 6f 64 65 28 26  |or.;$.B opcode(&|
00006720  36 30 29 20 3b 20 72 74  73 0d 3b 2e 04 0d 3b 38  |60) ; rts.;...;8|
00006730  0b 2e 6f 73 62 67 65 74  0d 3b 42 13 4d 4f 56 20  |..osbget.;B.MOV |
00006740  52 30 2c 41 2c 4c 53 52  23 32 34 0d 3b 4c 13 4d  |R0,A,LSR#24.;L.M|
00006750  4f 56 20 52 31 2c 59 2c  4c 53 52 23 32 34 0d 3b  |OV R1,Y,LSR#24.;|
00006760  56 12 53 57 49 20 22 58  4f 53 5f 42 47 65 74 22  |V.SWI "XOS_BGet"|
00006770  0d 3b 60 11 42 56 53 20  73 77 69 5f 65 72 72 6f  |.;`.BVS swi_erro|
00006780  72 0d 3b 6a 13 4d 4f 56  20 41 2c 52 30 2c 4c 53  |r.;j.MOV A,R0,LS|
00006790  4c 23 32 34 0d 3b 74 0b  a4 73 65 74 75 70 43 0d  |L#24.;t..setupC.|
000067a0  3b 7e 17 42 20 6f 70 63  6f 64 65 28 26 36 30 29  |;~.B opcode(&60)|
000067b0  20 3b 20 72 74 73 0d 3b  88 04 0d 3b 92 0e 2e 73  | ; rts.;...;...s|
000067c0  77 69 5f 65 72 72 6f 72  0d 3b 9c 15 41 44 44 20  |wi_error.;..ADD |
000067d0  6d 65 6d 2c 6d 65 6d 2c  23 26 31 30 30 0d 3b a6  |mem,mem,#&100.;.|
000067e0  15 41 44 44 20 6d 65 6d  2c 6d 65 6d 2c 23 26 30  |.ADD mem,mem,#&0|
000067f0  30 32 0d 3b b0 13 4d 4f  56 20 52 31 2c 23 30 20  |02.;..MOV R1,#0 |
00006800  3b 20 42 52 4b 0d 3b ba  15 53 54 52 42 20 52 31  |; BRK.;..STRB R1|
00006810  2c 5b 6d 65 6d 2c 23 2d  32 5d 0d 3b c4 1b 4c 44  |,[mem,#-2].;..LD|
00006820  52 42 20 52 31 2c 5b 52  30 5d 20 3b 20 65 72 72  |RB R1,[R0] ; err|
00006830  6f 72 20 6e 6f 0d 3b ce  15 53 54 52 42 20 52 31  |or no.;..STRB R1|
00006840  2c 5b 6d 65 6d 2c 23 2d  31 5d 0d 3b d8 10 41 44  |,[mem,#-1].;..AD|
00006850  44 20 52 30 2c 52 30 2c  23 34 0d 3b e2 0e 4d 4f  |D R0,R0,#4.;..MO|
00006860  56 20 52 31 34 2c 23 30  0d 3b ec 04 0d 3b f6 11  |V R14,#0.;...;..|
00006870  2e 73 77 69 5f 65 72 72  5f 6c 6f 6f 70 0d 3c 00  |.swi_err_loop.<.|
00006880  15 4c 44 52 42 20 52 31  33 2c 5b 52 30 2c 52 31  |.LDRB R13,[R0,R1|
00006890  34 5d 0d 3c 0a 0e 43 4d  50 20 52 31 33 2c 23 30  |4].<..CMP R13,#0|
000068a0  0d 3c 14 12 3b 4d 4f 56  20 52 31 33 2c 23 97 22  |.<..;MOV R13,#."|
000068b0  41 22 0d 3c 1e 16 53 54  52 42 20 52 31 33 2c 5b  |A".<..STRB R13,[|
000068c0  6d 65 6d 2c 52 31 34 5d  0d 3c 28 12 41 44 44 20  |mem,R14].<(.ADD |
000068d0  52 31 34 2c 52 31 34 2c  23 31 0d 3c 32 0f ec 51  |R14,R14,#1.<2..Q|
000068e0  20 52 31 34 2c 23 32 35  35 0d 3c 3c 10 43 4d 50  | R14,#255.<<.CMP|
000068f0  20 52 31 34 2c 23 32 35  33 0d 3c 46 14 42 4c 45  | R14,#253.<F.BLE|
00006900  20 73 77 69 5f 65 72 72  5f 6c 6f 6f 70 0d 3c 50  | swi_err_loop.<P|
00006910  04 0d 3c 5a 17 4d 4f 56  20 7a 70 63 2c 23 26 31  |..<Z.MOV zpc,#&1|
00006920  30 30 20 3c 3c 20 31 36  0d 3c 64 15 53 55 42 20  |00 << 16.<d.SUB |
00006930  6d 65 6d 2c 6d 65 6d 2c  23 26 31 30 30 0d 3c 6e  |mem,mem,#&100.<n|
00006940  15 53 55 42 20 6d 65 6d  2c 6d 65 6d 2c 23 26 30  |.SUB mem,mem,#&0|
00006950  30 32 0d 3c 78 0b a4 66  65 74 63 68 32 0d 3c 82  |02.<x..fetch2.<.|
00006960  04 0d 3c 8c 04 0d 3c 96  04 0d 3c a0 04 0d 3c aa  |..<...<...<...<.|
00006970  11 2e 73 74 72 62 5f 72  6f 6d 5f 72 65 74 0d 3c  |..strb_rom_ret.<|
00006980  b4 04 0d 3c be 0b 2e 73  68 65 69 6c 61 0d 3c c8  |...<...sheila.<.|
00006990  15 53 55 42 53 20 52 32  2c 52 31 2c 23 26 46 45  |.SUBS R2,R1,#&FE|
000069a0  30 30 0d 3c d2 10 4d 4f  56 4c 54 20 50 43 2c 52  |00.<..MOVLT PC,R|
000069b0  31 34 0d 3c dc 14 53 55  42 53 20 52 32 2c 52 32  |14.<..SUBS R2,R2|
000069c0  2c 23 26 31 30 30 0d 3c  e6 10 4d 4f 56 47 45 20  |,#&100.<..MOVGE |
000069d0  50 43 2c 52 31 34 0d 3c  f0 0f 3b 42 47 45 20 46  |PC,R14.<..;BGE F|
000069e0  46 70 61 67 65 0d 3c fa  04 0d 3d 04 10 54 53 54  |Fpage.<...=..TST|
000069f0  20 74 69 6d 65 2c 23 25  31 0d 3d 0e 16 53 55 42  | time,#%1.=..SUB|
00006a00  4e 45 20 74 69 6d 65 2c  74 69 6d 65 2c 23 31 0d  |NE time,time,#1.|
00006a10  3d 18 16 53 55 42 45 51  20 74 69 6d 65 2c 74 69  |=..SUBEQ time,ti|
00006a20  6d 65 2c 23 32 0d 3d 22  04 0d 3d 2c 15 3b 53 54  |me,#2.="..=,.;ST|
00006a30  52 42 20 52 30 2c 5b 6d  65 6d 2c 52 31 5d 0d 3d  |RB R0,[mem,R1].=|
00006a40  36 18 42 49 43 20 52 31  2c 52 31 2c 23 26 46 30  |6.BIC R1,R1,#&F0|
00006a50  20 3b 20 65 6c 6b 0d 3d  40 26 53 55 42 20 52 32  | ; elk.=@&SUB R2|
00006a60  2c 6d 65 6d 2c 23 26 31  30 30 30 30 3a 53 54 52  |,mem,#&10000:STR|
00006a70  42 20 52 30 2c 5b 52 32  2c 52 31 5d 0d 3d 4a 04  |B R0,[R2,R1].=J.|
00006a80  0d 3d 54 0f 80 20 52 32  2c 52 31 2c 23 26 46 0d  |.=T.. R2,R1,#&F.|
00006a90  3d 5e 1b 3b 41 44 52 20  52 31 2c 73 68 65 69 6c  |=^.;ADR R1,sheil|
00006aa0  61 5f 77 72 69 74 65 74  61 62 0d 3d 68 18 4c 44  |a_writetab.=h.LD|
00006ab0  52 20 50 43 2c 5b 50 43  2c 52 32 2c 4c 53 4c 23  |R PC,[PC,R2,LSL#|
00006ac0  32 5d 0d 3d 72 21 45 51  55 44 20 30 20 3b 20 70  |2].=r!EQUD 0 ; p|
00006ad0  61 64 64 69 6e 67 20 66  6f 72 20 70 69 70 65 6c  |adding for pipel|
00006ae0  69 6e 65 0d 3d 7c 14 2e  73 68 65 69 6c 61 5f 77  |ine.=|..sheila_w|
00006af0  72 69 74 65 74 61 62 0d  3d 86 05 5d 0d 3d 90 10  |ritetab.=..].=..|
00006b00  e3 20 49 49 25 3d 30 20  b8 20 31 35 0d 3d 9a 09  |. II%=0 . 15.=..|
00006b10  5b 4f 50 54 70 0d 3d a4  13 45 51 55 44 20 77 72  |[OPTp.=..EQUD wr|
00006b20  69 74 65 5f 69 73 63 72  0d 3d ae 0e 45 51 55 44  |ite_iscr.=..EQUD|
00006b30  20 64 75 6d 6d 79 0d 3d  b8 1f 45 51 55 44 20 77  | dummy.=..EQUD w|
00006b40  72 69 74 65 5f 73 63 72  65 65 6e 5f 73 74 61 72  |rite_screen_star|
00006b50  74 5f 6c 6f 77 0d 3d c2  20 45 51 55 44 20 77 72  |t_low.=. EQUD wr|
00006b60  69 74 65 5f 73 63 72 65  65 6e 5f 73 74 61 72 74  |ite_screen_start|
00006b70  5f 68 69 67 68 0d 3d cc  18 45 51 55 44 20 77 72  |_high.=..EQUD wr|
00006b80  69 74 65 5f 74 61 70 65  5f 64 61 74 61 0d 3d d6  |ite_tape_data.=.|
00006b90  15 45 51 55 44 20 77 72  69 74 65 5f 52 4f 4d 69  |.EQUD write_ROMi|
00006ba0  6e 74 0d 3d e0 16 45 51  55 44 20 77 72 69 74 65  |nt.=..EQUD write|
00006bb0  5f 63 6f 75 6e 74 65 72  0d 3d ea 14 45 51 55 44  |_counter.=..EQUD|
00006bc0  20 77 72 69 74 65 5f 6c  61 74 63 68 0d 3d f4 1a  | write_latch.=..|
00006bd0  a4 65 71 75 64 28 38 2c  77 72 69 74 65 5f 70 61  |.equd(8,write_pa|
00006be0  6c 65 74 74 65 29 0d 3d  fe 05 5d 0d 3e 08 05 ed  |lette).=..].>...|
00006bf0  0d 3e 12 09 5b 4f 50 54  70 0d 3e 1c 04 0d 3e 26  |.>..[OPTp.>...>&|
00006c00  10 2e 6c 64 72 62 5f 46  46 70 61 67 65 0d 3e 30  |..ldrb_FFpage.>0|
00006c10  15 3b 53 55 42 20 74 69  6d 65 2c 74 69 6d 65 2c  |.;SUB time,time,|
00006c20  23 31 0d 3e 3a 0e 4d 4f  56 20 50 43 2c 52 31 34  |#1.>:.MOV PC,R14|
00006c30  0d 3e 44 04 0d 3e 4e 21  2e 6c 64 72 62 38 30 30  |.>D..>N!.ldrb800|
00006c40  30 20 3b 20 67 72 65 61  74 65 72 20 74 68 61 6e  |0 ; greater than|
00006c50  20 38 30 30 30 0d 3e 58  04 0d 3e 62 11 43 4d 50  | 8000.>X..>b.CMP|
00006c60  20 52 31 2c 23 26 46 45  30 30 0d 3e 6c 13 42 48  | R1,#&FE00.>l.BH|
00006c70  53 20 6c 64 72 62 5f 73  68 65 69 6c 61 0d 3e 76  |S ldrb_sheila.>v|
00006c80  04 0d 3e 80 14 4c 44 52  42 20 52 30 2c 5b 6d 65  |..>..LDRB R0,[me|
00006c90  6d 2c 52 31 5d 0d 3e 8a  0e 4d 4f 56 20 50 43 2c  |m,R1].>..MOV PC,|
00006ca0  52 31 34 0d 3e 94 04 0d  3e 9e 04 0d 3e a8 15 3b  |R14.>...>...>..;|
00006cb0  4d 4f 56 20 52 31 2c 52  31 2c 4c 53 52 23 31 36  |MOV R1,R1,LSR#16|
00006cc0  0d 3e b2 05 5d 0d 3e bc  0e e7 20 6d 61 73 74 65  |.>..].>... maste|
00006cd0  72 20 8c 0d 3e c6 09 5b  4f 50 54 70 0d 3e d0 24  |r ..>..[OPTp.>.$|
00006ce0  2e 6c 64 72 62 31 36 5f  38 30 30 30 20 3b 20 67  |.ldrb16_8000 ; g|
00006cf0  72 65 61 74 65 72 20 74  68 61 6e 20 38 30 30 30  |reater than 8000|
00006d00  0d 3e da 04 0d 3e e4 17  43 4d 50 20 52 31 2c 23  |.>...>..CMP R1,#|
00006d10  26 46 45 30 30 20 3c 3c  20 31 36 0d 3e ee 15 42  |&FE00 << 16.>..B|
00006d20  48 53 20 6c 64 72 62 31  36 5f 73 68 65 69 6c 61  |HS ldrb16_sheila|
00006d30  0d 3e f8 04 0d 3f 02 1b  4c 44 52 42 20 52 30 2c  |.>...?..LDRB R0,|
00006d40  5b 6d 65 6d 2c 52 31 2c  4c 53 52 23 31 36 5d 0d  |[mem,R1,LSR#16].|
00006d50  3f 0c 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 3f 16  |?..MOV PC,R14.?.|
00006d60  04 0d 3f 20 12 2e 6c 64  72 62 31 36 5f 73 63 72  |..? ..ldrb16_scr|
00006d70  65 65 6e 0d 3f 2a 17 43  4d 50 20 52 31 2c 23 26  |een.?*.CMP R1,#&|
00006d80  38 30 30 30 20 3c 3c 20  31 36 0d 3f 34 13 42 48  |8000 << 16.?4.BH|
00006d90  53 20 6c 64 72 62 31 36  5f 38 30 30 30 0d 3f 3e  |S ldrb16_8000.?>|
00006da0  04 0d 3f 48 1a 4c 44 52  42 20 52 31 32 2c 5b 6d  |..?H.LDRB R12,[m|
00006db0  65 6d 2c 23 41 43 43 43  4f 4e 5d 0d 3f 52 04 0d  |em,#ACCCON].?R..|
00006dc0  3f 5c 18 43 4d 50 20 7a  70 63 2c 23 26 43 30 30  |?\.CMP zpc,#&C00|
00006dd0  30 20 3c 3c 20 31 36 0d  3f 66 17 4d 4f 56 4c 54  |0 << 16.?f.MOVLT|
00006de0  20 52 31 33 2c 52 31 32  2c 4c 53 52 23 31 0d 3f  | R13,R12,LSR#1.?|
00006df0  70 11 4d 4f 56 47 45 20  52 31 33 2c 52 31 32 0d  |p.MOVGE R13,R12.|
00006e00  3f 7a 18 43 4d 50 20 7a  70 63 2c 23 26 45 30 30  |?z.CMP zpc,#&E00|
00006e10  30 20 3c 3c 20 31 36 0d  3f 84 35 4d 4f 56 47 45  |0 << 16.?.5MOVGE|
00006e20  20 52 31 33 2c 52 31 32  2c 4c 53 52 23 31 20 20  | R13,R12,LSR#1  |
00006e30  20 20 3b 20 6e 6f 77 20  62 69 74 20 31 20 6f 66  |  ; now bit 1 of|
00006e40  20 52 31 33 20 69 73 20  77 68 61 74 0d 3f 8e 2c  | R13 is what.?.,|
00006e50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00006e60  20 20 20 20 20 20 20 3b  20 77 65 20 6d 75 73 74  |       ; we must|
00006e70  20 6c 6f 6f 6b 20 61 74  0d 3f 98 04 0d 3f a2 10  | look at.?...?..|
00006e80  54 53 54 20 52 31 33 2c  23 25 31 30 0d 3f ac 38  |TST R13,#%10.?.8|
00006e90  53 55 42 4e 45 20 52 31  33 2c 6d 65 6d 2c 23 28  |SUBNE R13,mem,#(|
00006ea0  26 33 30 30 30 2b 26 31  30 30 30 30 29 20 3b 20  |&3000+&10000) ; |
00006eb0  73 68 61 64 6f 77 20 73  63 72 65 65 6e 20 6d 65  |shadow screen me|
00006ec0  6d 6f 72 79 0d 3f b6 0f  3b ec 51 20 52 31 33 2c  |mory.?..;.Q R13,|
00006ed0  6d 65 6d 0d 3f c0 1d 4c  44 52 4e 45 42 20 52 30  |mem.?..LDRNEB R0|
00006ee0  2c 5b 52 31 33 2c 52 31  2c 4c 53 52 23 31 36 5d  |,[R13,R1,LSR#16]|
00006ef0  0d 3f ca 1d 4c 44 52 45  51 42 20 52 30 2c 5b 6d  |.?..LDREQB R0,[m|
00006f00  65 6d 2c 52 31 2c 4c 53  52 23 31 36 5d 0d 3f d4  |em,R1,LSR#16].?.|
00006f10  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 3f de 05 5d  |.MOV PC,R14.?..]|
00006f20  0d 3f e8 05 cc 0d 3f f2  09 5b 4f 50 54 70 0d 3f  |.?....?..[OPTp.?|
00006f30  fc 12 2e 6c 64 72 62 31  36 5f 73 63 72 65 65 6e  |...ldrb16_screen|
00006f40  0d 40 06 17 43 4d 50 20  52 31 2c 23 26 46 45 30  |.@..CMP R1,#&FE0|
00006f50  30 20 3c 3c 20 31 36 0d  40 10 15 42 48 53 20 6c  |0 << 16.@..BHS l|
00006f60  64 72 62 31 36 5f 73 68  65 69 6c 61 0d 40 1a 04  |drb16_sheila.@..|
00006f70  0d 40 24 1b 4c 44 52 42  20 52 30 2c 5b 6d 65 6d  |.@$.LDRB R0,[mem|
00006f80  2c 52 31 2c 4c 53 52 23  31 36 5d 0d 40 2e 0e 4d  |,R1,LSR#16].@..M|
00006f90  4f 56 20 50 43 2c 52 31  34 0d 40 38 05 5d 0d 40  |OV PC,R14.@8.].@|
00006fa0  42 05 cd 0d 40 4c 04 0d  40 56 0e e7 20 6d 61 73  |B...@L..@V.. mas|
00006fb0  74 65 72 20 8c 0d 40 60  09 5b 4f 50 54 70 0d 40  |ter ..@`.[OPTp.@|
00006fc0  6a 04 0d 40 74 10 2e 6c  64 72 62 5f 73 63 72 65  |j..@t..ldrb_scre|
00006fd0  65 6e 0d 40 7e 21 2e 6c  64 72 62 33 30 30 30 20  |en.@~!.ldrb3000 |
00006fe0  3b 20 67 72 65 61 74 65  72 20 74 68 61 6e 20 33  |; greater than 3|
00006ff0  30 30 30 0d 40 88 04 0d  40 92 11 43 4d 50 20 52  |000.@...@..CMP R|
00007000  31 2c 23 26 38 30 30 30  0d 40 9c 10 42 48 53 20  |1,#&8000.@..BHS |
00007010  6c 64 72 62 38 30 30 30  0d 40 a6 04 0d 40 b0 1a  |ldrb8000.@...@..|
00007020  4c 44 52 42 20 52 31 32  2c 5b 6d 65 6d 2c 23 41  |LDRB R12,[mem,#A|
00007030  43 43 43 4f 4e 5d 0d 40  ba 04 0d 40 c4 18 43 4d  |CCCON].@...@..CM|
00007040  50 20 7a 70 63 2c 23 26  43 30 30 30 20 3c 3c 20  |P zpc,#&C000 << |
00007050  31 36 0d 40 ce 17 4d 4f  56 4c 54 20 52 31 33 2c  |16.@..MOVLT R13,|
00007060  52 31 32 2c 4c 53 52 23  31 0d 40 d8 11 4d 4f 56  |R12,LSR#1.@..MOV|
00007070  47 45 20 52 31 33 2c 52  31 32 0d 40 e2 18 43 4d  |GE R13,R12.@..CM|
00007080  50 20 7a 70 63 2c 23 26  45 30 30 30 20 3c 3c 20  |P zpc,#&E000 << |
00007090  31 36 0d 40 ec 35 4d 4f  56 47 45 20 52 31 33 2c  |16.@.5MOVGE R13,|
000070a0  52 31 32 2c 4c 53 52 23  31 20 20 20 20 3b 20 6e  |R12,LSR#1    ; n|
000070b0  6f 77 20 62 69 74 20 31  20 6f 66 20 52 31 33 20  |ow bit 1 of R13 |
000070c0  69 73 20 77 68 61 74 0d  40 f6 2c 20 20 20 20 20  |is what.@.,     |
000070d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000070e0  20 20 3b 20 77 65 20 6d  75 73 74 20 6c 6f 6f 6b  |  ; we must look|
000070f0  20 61 74 0d 41 00 04 0d  41 0a 10 54 53 54 20 52  | at.A...A..TST R|
00007100  31 33 2c 23 25 31 30 0d  41 14 38 53 55 42 4e 45  |13,#%10.A.8SUBNE|
00007110  20 52 31 33 2c 6d 65 6d  2c 23 28 26 33 30 30 30  | R13,mem,#(&3000|
00007120  2b 26 31 30 30 30 30 29  20 3b 20 73 68 61 64 6f  |+&10000) ; shado|
00007130  77 20 73 63 72 65 65 6e  20 6d 65 6d 6f 72 79 0d  |w screen memory.|
00007140  41 1e 0f 3b ec 51 20 52  31 33 2c 6d 65 6d 0d 41  |A..;.Q R13,mem.A|
00007150  28 16 4c 44 52 4e 45 42  20 52 30 2c 5b 52 31 33  |(.LDRNEB R0,[R13|
00007160  2c 52 31 5d 0d 41 32 16  4c 44 52 45 51 42 20 52  |,R1].A2.LDREQB R|
00007170  30 2c 5b 6d 65 6d 2c 52  31 5d 0d 41 3c 0e 4d 4f  |0,[mem,R1].A<.MO|
00007180  56 20 50 43 2c 52 31 34  0d 41 46 05 5d 0d 41 50  |V PC,R14.AF.].AP|
00007190  05 cc 0d 41 5a 09 5b 4f  50 54 70 0d 41 64 10 2e  |...AZ.[OPTp.Ad..|
000071a0  6c 64 72 62 5f 73 63 72  65 65 6e 0d 41 6e 21 2e  |ldrb_screen.An!.|
000071b0  6c 64 72 62 33 30 30 30  20 3b 20 67 72 65 61 74  |ldrb3000 ; great|
000071c0  65 72 20 74 68 61 6e 20  33 30 30 30 0d 41 78 11  |er than 3000.Ax.|
000071d0  43 4d 50 20 52 31 2c 23  26 46 45 30 30 0d 41 82  |CMP R1,#&FE00.A.|
000071e0  13 42 48 53 20 6c 64 72  62 5f 73 68 65 69 6c 61  |.BHS ldrb_sheila|
000071f0  0d 41 8c 14 4c 44 52 42  20 52 30 2c 5b 6d 65 6d  |.A..LDRB R0,[mem|
00007200  2c 52 31 5d 0d 41 96 0e  4d 4f 56 20 50 43 2c 52  |,R1].A..MOV PC,R|
00007210  31 34 0d 41 a0 05 5d 0d  41 aa 05 cd 0d 41 b4 04  |14.A..].A....A..|
00007220  0d 41 be 09 5b 4f 50 54  70 0d 41 c8 04 0d 41 d2  |.A..[OPTp.A...A.|
00007230  12 2e 6c 64 72 62 31 36  5f 73 68 65 69 6c 61 0d  |..ldrb16_sheila.|
00007240  41 dc 15 4d 4f 56 20 52  31 32 2c 52 31 2c 4c 53  |A..MOV R12,R1,LS|
00007250  52 23 31 36 0d 41 e6 12  42 20 6c 64 72 62 5f 73  |R#16.A..B ldrb_s|
00007260  68 65 69 6c 61 32 0d 41  f0 04 0d 41 fa 10 2e 6c  |heila2.A...A...l|
00007270  64 72 62 31 36 5f 38 30  30 30 0d 42 04 14 4d 4f  |drb16_8000.B..MO|
00007280  56 20 52 31 2c 52 31 2c  4c 53 52 23 31 36 0d 42  |V R1,R1,LSR#16.B|
00007290  0e 04 0d 42 18 0e 2e 6c  64 72 62 5f 38 30 30 30  |...B...ldrb_8000|
000072a0  0d 42 22 11 43 4d 50 20  52 31 2c 23 26 46 45 30  |.B".CMP R1,#&FE0|
000072b0  30 0d 42 2c 13 42 48 53  20 6c 64 72 62 5f 73 68  |0.B,.BHS ldrb_sh|
000072c0  65 69 6c 61 0d 42 36 11  43 4d 50 20 52 31 2c 23  |eila.B6.CMP R1,#|
000072d0  26 43 30 30 30 0d 42 40  10 4d 4f 56 48 53 20 50  |&C000.B@.MOVHS P|
000072e0  43 2c 52 31 34 0d 42 4a  04 0d 42 54 16 43 4d 50  |C,R14.BJ..BT.CMP|
000072f0  20 7a 70 63 2c 23 26 38  30 30 30 3c 3c 31 36 0d  | zpc,#&8000<<16.|
00007300  42 5e 28 42 4c 4f 20 6b  65 79 5f 73 6b 69 70 20  |B^(BLO key_skip |
00007310  3b 20 66 69 78 20 66 6f  72 20 73 74 72 79 6b 65  |; fix for stryke|
00007320  72 27 73 20 72 75 6e 0d  42 68 04 0d 42 72 12 54  |r's run.Bh..Br.T|
00007330  53 54 20 46 2c 23 31 20  3c 3c 20 31 31 0d 42 7c  |ST F,#1 << 11.B||
00007340  0d ec 51 20 50 43 2c 52  31 34 0d 42 86 0d 2e 6b  |..Q PC,R14.B...k|
00007350  65 79 5f 73 6b 69 70 0d  42 90 04 0d 42 9a 12 3b  |ey_skip.B...B..;|
00007360  53 57 49 20 26 31 30 30  2b 97 22 4b 22 0d 42 a4  |SWI &100+."K".B.|
00007370  04 0d 42 ae 1d 53 54 4d  46 44 20 6d 65 6d 2c 7b  |..B..STMFD mem,{|
00007380  52 31 2d 52 32 2c 52 31  32 2d 52 31 33 7d 0d 42  |R1-R2,R12-R13}.B|
00007390  b8 04 0d 42 c2 17 3b 20  65 6c 65 63 74 72 6f 6e  |...B..; electron|
000073a0  20 6b 65 79 62 6f 61 72  64 0d 42 cc 10 82 20 52  | keyboard.B... R|
000073b0  30 2c 52 31 2c 23 26 46  46 0d 42 d6 12 82 20 52  |0,R1,#&FF.B... R|
000073c0  30 2c 52 30 2c 23 26 46  46 30 30 0d 42 e0 20 42  |0,R0,#&FF00.B. B|
000073d0  49 43 20 52 30 2c 52 30  2c 23 25 31 31 30 30 30  |IC R0,R0,#%11000|
000073e0  30 30 30 30 30 30 30 30  30 30 30 0d 42 ea 1a 4c  |00000000000.B..L|
000073f0  44 52 20 52 32 2c 5b 6d  65 6d 2c 23 6b 65 79 5f  |DR R2,[mem,#key_|
00007400  61 64 64 72 5d 0d 42 f4  10 4d 4f 56 20 52 31 32  |addr].B..MOV R12|
00007410  2c 23 26 46 30 0d 42 fe  04 0d 43 08 13 4c 44 52  |,#&F0.B...C..LDR|
00007420  20 52 31 33 2c 5b 52 32  2c 23 30 5d 0d 43 12 11  | R13,[R2,#0].C..|
00007430  80 53 20 52 31 33 2c 52  31 33 2c 52 30 0d 43 1c  |.S R13,R13,R0.C.|
00007440  13 84 52 4e 45 20 52 31  32 2c 52 31 32 2c 23 31  |..RNE R12,R12,#1|
00007450  0d 43 26 04 0d 43 30 13  4c 44 52 20 52 31 33 2c  |.C&..C0.LDR R13,|
00007460  5b 52 32 2c 23 34 5d 0d  43 3a 11 80 53 20 52 31  |[R2,#4].C:..S R1|
00007470  33 2c 52 31 33 2c 52 30  0d 43 44 13 84 52 4e 45  |3,R13,R0.CD..RNE|
00007480  20 52 31 32 2c 52 31 32  2c 23 32 0d 43 4e 04 0d  | R12,R12,#2.CN..|
00007490  43 58 13 4c 44 52 20 52  31 33 2c 5b 52 32 2c 23  |CX.LDR R13,[R2,#|
000074a0  38 5d 0d 43 62 11 80 53  20 52 31 33 2c 52 31 33  |8].Cb..S R13,R13|
000074b0  2c 52 30 0d 43 6c 13 84  52 4e 45 20 52 31 32 2c  |,R0.Cl..RNE R12,|
000074c0  52 31 32 2c 23 34 0d 43  76 04 0d 43 80 14 4c 44  |R12,#4.Cv..C..LD|
000074d0  52 20 52 31 33 2c 5b 52  32 2c 23 31 32 5d 0d 43  |R R13,[R2,#12].C|
000074e0  8a 11 80 53 20 52 31 33  2c 52 31 33 2c 52 30 0d  |...S R13,R13,R0.|
000074f0  43 94 13 84 52 4e 45 20  52 31 32 2c 52 31 32 2c  |C...RNE R12,R12,|
00007500  23 38 0d 43 9e 04 0d 43  a8 0e 4d 4f 56 20 52 30  |#8.C...C..MOV R0|
00007510  2c 52 31 32 0d 43 b2 13  3b 80 53 20 52 31 32 2c  |,R12.C..;.S R12,|
00007520  52 31 32 2c 23 26 46 0d  43 bc 14 3b 53 57 49 4e  |R12,#&F.C..;SWIN|
00007530  45 20 26 31 30 30 2b 97  22 4b 22 0d 43 c6 1d 4c  |E &100+."K".C..L|
00007540  44 4d 45 41 20 6d 65 6d  2c 7b 52 31 2d 52 32 2c  |DMEA mem,{R1-R2,|
00007550  52 31 32 2d 52 31 33 7d  0d 43 d0 0e 4d 4f 56 20  |R12-R13}.C..MOV |
00007560  50 43 2c 52 31 34 0d 43  da 04 0d 43 e4 10 2e 6c  |PC,R14.C...C...l|
00007570  64 72 62 5f 73 68 65 69  6c 61 0d 43 ee 0e 4d 4f  |drb_sheila.C..MO|
00007580  56 20 52 31 32 2c 52 31  0d 43 f8 04 0d 44 02 11  |V R12,R1.C...D..|
00007590  2e 6c 64 72 62 5f 73 68  65 69 6c 61 32 0d 44 0c  |.ldrb_sheila2.D.|
000075a0  15 4c 44 52 42 20 52 30  2c 5b 6d 65 6d 2c 52 31  |.LDRB R0,[mem,R1|
000075b0  32 5d 0d 44 16 04 0d 44  20 16 53 55 42 53 20 52  |2].D...D .SUBS R|
000075c0  32 2c 52 31 32 2c 23 26  46 45 30 30 0d 44 2a 10  |2,R12,#&FE00.D*.|
000075d0  4d 4f 56 4c 54 20 50 43  2c 52 31 34 0d 44 34 14  |MOVLT PC,R14.D4.|
000075e0  53 55 42 53 20 52 32 2c  52 32 2c 23 26 31 30 30  |SUBS R2,R2,#&100|
000075f0  0d 44 3e 13 42 47 45 20  6c 64 72 62 5f 46 46 70  |.D>.BGE ldrb_FFp|
00007600  61 67 65 0d 44 48 04 0d  44 52 1a 42 49 43 20 52  |age.DH..DR.BIC R|
00007610  31 32 2c 52 31 32 2c 23  26 46 30 20 3b 20 65 6c  |12,R12,#&F0 ; el|
00007620  6b 0d 44 5c 27 53 55 42  20 52 32 2c 6d 65 6d 2c  |k.D\'SUB R2,mem,|
00007630  23 26 31 30 30 30 30 3a  4c 44 52 42 20 52 30 2c  |#&10000:LDRB R0,|
00007640  5b 52 32 2c 52 31 32 5d  0d 44 66 04 0d 44 70 14  |[R2,R12].Df..Dp.|
00007650  53 55 42 20 74 69 6d 65  2c 74 69 6d 65 2c 23 31  |SUB time,time,#1|
00007660  0d 44 7a 04 0d 44 84 11  80 20 52 32 2c 52 31 32  |.Dz..D... R2,R12|
00007670  2c 23 26 46 46 0d 44 8e  1a 3b 41 44 52 20 52 31  |,#&FF.D..;ADR R1|
00007680  2c 73 68 65 69 6c 61 5f  72 65 61 64 74 61 62 0d  |,sheila_readtab.|
00007690  44 98 18 4c 44 52 20 50  43 2c 5b 50 43 2c 52 32  |D..LDR PC,[PC,R2|
000076a0  2c 4c 53 4c 23 32 5d 0d  44 a2 21 45 51 55 44 20  |,LSL#2].D.!EQUD |
000076b0  30 20 3b 20 70 61 64 64  69 6e 67 20 66 6f 72 20  |0 ; padding for |
000076c0  70 69 70 65 6c 69 6e 65  0d 44 ac 13 2e 73 68 65  |pipeline.D...she|
000076d0  69 6c 61 5f 72 65 61 64  74 61 62 0d 44 b6 05 5d  |ila_readtab.D..]|
000076e0  0d 44 c0 10 e3 20 49 49  25 3d 30 20 b8 20 31 35  |.D... II%=0 . 15|
000076f0  0d 44 ca 09 5b 4f 50 54  70 0d 44 d4 12 45 51 55  |.D..[OPTp.D..EQU|
00007700  44 20 72 65 61 64 5f 69  73 63 72 0d 44 de 0e 45  |D read_iscr.D..E|
00007710  51 55 44 20 64 75 6d 6d  79 0d 44 e8 1e 45 51 55  |QUD dummy.D..EQU|
00007720  44 20 72 65 61 64 5f 73  63 72 65 65 6e 5f 73 74  |D read_screen_st|
00007730  61 72 74 5f 6c 6f 77 0d  44 f2 1f 45 51 55 44 20  |art_low.D..EQUD |
00007740  72 65 61 64 5f 73 63 72  65 65 6e 5f 73 74 61 72  |read_screen_star|
00007750  74 5f 68 69 67 68 0d 44  fc 17 45 51 55 44 20 72  |t_high.D..EQUD r|
00007760  65 61 64 5f 74 61 70 65  5f 64 61 74 61 0d 45 06  |ead_tape_data.E.|
00007770  14 45 51 55 44 20 72 65  61 64 5f 52 4f 4d 69 6e  |.EQUD read_ROMin|
00007780  74 0d 45 10 15 45 51 55  44 20 72 65 61 64 5f 63  |t.E..EQUD read_c|
00007790  6f 75 6e 74 65 72 0d 45  1a 13 45 51 55 44 20 72  |ounter.E..EQUD r|
000077a0  65 61 64 5f 6c 61 74 63  68 0d 45 24 19 a4 65 71  |ead_latch.E$..eq|
000077b0  75 64 28 38 2c 72 65 61  64 5f 70 61 6c 65 74 74  |ud(8,read_palett|
000077c0  65 29 0d 45 2e 05 5d 0d  45 38 05 ed 0d 45 42 09  |e).E..].E8...EB.|
000077d0  5b 4f 50 54 70 0d 45 4c  04 0d 45 56 25 a4 61 6c  |[OPTp.EL..EV%.al|
000077e0  69 67 6e 31 36 20 3b 20  66 69 74 20 69 6e 74 6f  |ign16 ; fit into|
000077f0  20 63 61 63 68 65 20 62  65 74 74 65 72 3f 0d 45  | cache better?.E|
00007800  60 04 0d 45 6a 0c a4 6f  70 63 6f 64 65 73 0d 45  |`..Ej..opcodes.E|
00007810  74 04 0d 45 7e 11 2e 70  61 74 63 68 5f 73 63 72  |t..E~..patch_scr|
00007820  65 65 6e 0d 45 88 0e 4d  4f 56 20 50 43 2c 52 31  |een.E..MOV PC,R1|
00007830  34 0d 45 92 10 2e 70 61  74 63 68 5f 70 69 78 65  |4.E...patch_pixe|
00007840  6c 0d 45 9c 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |l.E..MOV PC,R14.|
00007850  45 a6 04 0d 45 b0 08 2e  65 6e 64 0d 45 ba 05 5d  |E...E...end.E..]|
00007860  0d 45 c4 05 ed 0d 45 ce  38 ff 22 4c 6f 61 64 20  |.E....E.8."Load |
00007870  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 53 52 43  |<6502Em$Dir>.SRC|
00007880  2e 72 65 76 74 61 62 6c  65 20 22 2b c3 7e 28 63  |.revtable "+.~(c|
00007890  6f 64 65 2b 6d 6f 64 65  30 74 61 62 29 0d 45 d8  |ode+mode0tab).E.|
000078a0  38 ff 22 4c 6f 61 64 20  3c 36 35 30 32 45 6d 24  |8."Load <6502Em$|
000078b0  44 69 72 3e 2e 53 52 43  2e 6d 6f 64 65 31 74 61  |Dir>.SRC.mode1ta|
000078c0  62 20 22 2b c3 7e 28 63  6f 64 65 2b 6d 6f 64 65  |b "+.~(code+mode|
000078d0  31 74 61 62 29 0d 45 e2  39 ff 22 4c 6f 61 64 20  |1tab).E.9."Load |
000078e0  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 53 52 43  |<6502Em$Dir>.SRC|
000078f0  2e 48 6d 6f 64 65 32 74  61 62 20 22 2b c3 7e 28  |.Hmode2tab "+.~(|
00007900  63 6f 64 65 2b 6d 6f 64  65 32 74 61 62 29 0d 45  |code+mode2tab).E|
00007910  ec 39 ff 22 4c 6f 61 64  20 3c 36 35 30 32 45 6d  |.9."Load <6502Em|
00007920  24 44 69 72 3e 2e 53 52  43 2e 48 6d 6f 64 65 34  |$Dir>.SRC.Hmode4|
00007930  74 61 62 20 22 2b c3 7e  28 63 6f 64 65 2b 6d 6f  |tab "+.~(code+mo|
00007940  64 65 34 74 61 62 29 0d  45 f6 39 ff 22 4c 6f 61  |de4tab).E.9."Loa|
00007950  64 20 3c 36 35 30 32 45  6d 24 44 69 72 3e 2e 53  |d <6502Em$Dir>.S|
00007960  52 43 2e 48 6d 6f 64 65  35 74 61 62 20 22 2b c3  |RC.Hmode5tab "+.|
00007970  7e 28 63 6f 64 65 2b 6d  6f 64 65 35 74 61 62 29  |~(code+mode5tab)|
00007980  0d 46 00 04 0d 46 0a 05  e1 0d 46 14 04 0d 46 1e  |.F...F....F...F.|
00007990  06 44 45 0d 46 28 06 dd  46 0d 46 32 04 0d 46 3c  |.DE.F(..F.F2..F<|
000079a0  04 0d 46 46 10 dd a4 6c  64 72 62 32 28 52 2c 53  |..FF...ldrb2(R,S|
000079b0  29 0d 46 50 15 e7 20 52  3c 3e 30 20 84 20 53 3c  |).FP.. R<>0 . S<|
000079c0  3e 31 20 8c 20 fa 0d 46  5a 0e e7 20 6d 61 73 74  |>1 . ..FZ.. mast|
000079d0  65 72 20 8c 0d 46 64 09  5b 4f 50 54 70 0d 46 6e  |er ..Fd.[OPTp.Fn|
000079e0  13 3b 4c 44 52 42 20 52  2c 5b 6d 65 6d 2c 53 5d  |.;LDRB R,[mem,S]|
000079f0  0d 46 78 11 3b 43 4d 50  20 53 2c 23 26 46 45 30  |.Fx.;CMP S,#&FE0|
00007a00  30 0d 46 82 15 3b 42 4c  48 53 20 6c 64 72 62 5f  |0.F..;BLHS ldrb_|
00007a10  73 68 65 69 6c 61 0d 46  8c 10 43 4d 50 20 53 2c  |sheila.F..CMP S,|
00007a20  23 26 33 30 30 30 0d 46  96 14 4c 44 52 4c 4f 42  |#&3000.F..LDRLOB|
00007a30  20 52 2c 5b 6d 65 6d 2c  53 5d 0d 46 a0 14 42 4c  | R,[mem,S].F..BL|
00007a40  48 53 20 6c 64 72 62 5f  73 63 72 65 65 6e 0d 46  |HS ldrb_screen.F|
00007a50  aa 05 5d 0d 46 b4 05 cc  0d 46 be 09 5b 4f 50 54  |..].F....F..[OPT|
00007a60  70 0d 46 c8 12 4c 44 52  42 20 52 2c 5b 6d 65 6d  |p.F..LDRB R,[mem|
00007a70  2c 53 5d 0d 46 d2 11 3b  43 4d 50 20 53 2c 23 26  |,S].F..;CMP S,#&|
00007a80  46 45 30 30 0d 46 dc 15  3b 42 4c 48 53 20 6c 64  |FE00.F..;BLHS ld|
00007a90  72 62 5f 73 68 65 69 6c  61 0d 46 e6 10 43 4d 50  |rb_sheila.F..CMP|
00007aa0  20 53 2c 23 26 38 30 30  30 0d 46 f0 12 42 4c 48  | S,#&8000.F..BLH|
00007ab0  53 20 6c 64 72 62 5f 38  30 30 30 0d 46 fa 05 5d  |S ldrb_8000.F..]|
00007ac0  0d 47 04 05 cd 0d 47 0e  07 3d 22 22 0d 47 18 04  |.G....G..="".G..|
00007ad0  0d 47 22 11 dd a4 6c 64  72 62 31 36 28 52 2c 53  |.G"...ldrb16(R,S|
00007ae0  29 0d 47 2c 15 e7 20 52  3c 3e 30 20 84 20 53 3c  |).G,.. R<>0 . S<|
00007af0  3e 31 20 8c 20 fa 0d 47  36 0e e7 20 6d 61 73 74  |>1 . ..G6.. mast|
00007b00  65 72 20 8c 0d 47 40 09  5b 4f 50 54 70 0d 47 4a  |er ..G@.[OPTp.GJ|
00007b10  1a 3b 4c 44 52 42 20 52  2c 5b 6d 65 6d 2c 53 2c  |.;LDRB R,[mem,S,|
00007b20  4c 53 52 23 31 36 5d 0d  47 54 17 3b 43 4d 50 20  |LSR#16].GT.;CMP |
00007b30  53 2c 23 26 46 45 30 30  20 3c 3c 20 31 36 0d 47  |S,#&FE00 << 16.G|
00007b40  5e 17 3b 42 4c 48 53 20  6c 64 72 62 31 36 5f 73  |^.;BLHS ldrb16_s|
00007b50  68 65 69 6c 61 0d 47 68  16 43 4d 50 20 53 2c 23  |heila.Gh.CMP S,#|
00007b60  26 33 30 30 30 20 3c 3c  20 31 36 0d 47 72 1b 4c  |&3000 << 16.Gr.L|
00007b70  44 52 4c 4f 42 20 52 2c  5b 6d 65 6d 2c 53 2c 4c  |DRLOB R,[mem,S,L|
00007b80  53 52 23 31 36 5d 0d 47  7c 16 42 4c 48 53 20 6c  |SR#16].G|.BLHS l|
00007b90  64 72 62 31 36 5f 73 63  72 65 65 6e 0d 47 86 05  |drb16_screen.G..|
00007ba0  5d 0d 47 90 05 cc 0d 47  9a 09 5b 4f 50 54 70 0d  |].G....G..[OPTp.|
00007bb0  47 a4 19 4c 44 52 42 20  52 2c 5b 6d 65 6d 2c 53  |G..LDRB R,[mem,S|
00007bc0  2c 4c 53 52 23 31 36 5d  0d 47 ae 17 3b 43 4d 50  |,LSR#16].G..;CMP|
00007bd0  20 53 2c 23 26 46 45 30  30 20 3c 3c 20 31 36 0d  | S,#&FE00 << 16.|
00007be0  47 b8 17 3b 42 4c 48 53  20 6c 64 72 62 31 36 5f  |G..;BLHS ldrb16_|
00007bf0  73 68 65 69 6c 61 0d 47  c2 16 43 4d 50 20 53 2c  |sheila.G..CMP S,|
00007c00  23 26 38 30 30 30 20 3c  3c 20 31 36 0d 47 cc 14  |#&8000 << 16.G..|
00007c10  42 4c 48 53 20 6c 64 72  62 31 36 5f 38 30 30 30  |BLHS ldrb16_8000|
00007c20  0d 47 d6 05 5d 0d 47 e0  05 cd 0d 47 ea 07 3d 22  |.G..].G....G..="|
00007c30  22 0d 47 f4 04 0d 47 fe  0f dd a4 73 74 72 62 28  |".G...G....strb(|
00007c40  52 2c 53 29 0d 48 08 15  e7 20 52 3c 3e 30 20 84  |R,S).H... R<>0 .|
00007c50  20 53 3c 3e 31 20 8c 20  85 0d 48 12 09 5b 4f 50  | S<>1 . ..H..[OP|
00007c60  54 70 0d 48 1c 1e 43 4d  50 20 53 2c 46 2c 4c 53  |Tp.H..CMP S,F,LS|
00007c70  52 23 31 36 20 3b 20 77  72 61 70 5f 61 64 64 72  |R#16 ; wrap_addr|
00007c80  0d 48 26 11 3b 43 4d 50  20 53 2c 23 26 33 30 30  |.H&.;CMP S,#&300|
00007c90  30 0d 48 30 14 53 54 52  4c 54 42 20 52 2c 5b 6d  |0.H0.STRLTB R,[m|
00007ca0  65 6d 2c 53 5d 0d 48 3a  0d 42 4c 47 45 20 73 74  |em,S].H:.BLGE st|
00007cb0  72 62 0d 48 44 05 5d 0d  48 4e 07 3d 22 22 0d 48  |rb.HD.].HN.="".H|
00007cc0  58 04 0d 48 62 11 dd a4  73 74 72 62 31 36 28 52  |X..Hb...strb16(R|
00007cd0  2c 53 29 0d 48 6c 15 e7  20 52 3c 3e 30 20 84 20  |,S).Hl.. R<>0 . |
00007ce0  53 3c 3e 31 20 8c 20 85  0d 48 76 09 5b 4f 50 54  |S<>1 . ..Hv.[OPT|
00007cf0  70 0d 48 80 17 3b 43 4d  50 20 53 2c 23 26 43 30  |p.H..;CMP S,#&C0|
00007d00  30 30 20 3c 3c 20 31 36  0d 48 8a 1c 3b 53 54 52  |00 << 16.H..;STR|
00007d10  4c 4f 42 20 52 2c 5b 6d  65 6d 2c 53 2c 4c 53 52  |LOB R,[mem,S,LSR|
00007d20  23 31 36 5d 0d 48 94 12  4d 4f 56 20 53 2c 53 2c  |#16].H..MOV S,S,|
00007d30  4c 53 52 23 31 36 0d 48  9e 1e 43 4d 50 20 53 2c  |LSR#16.H..CMP S,|
00007d40  46 2c 4c 53 52 23 31 36  20 3b 20 77 72 61 70 5f  |F,LSR#16 ; wrap_|
00007d50  61 64 64 72 0d 48 a8 11  3b 43 4d 50 20 53 2c 23  |addr.H..;CMP S,#|
00007d60  26 33 30 30 30 0d 48 b2  14 53 54 52 4c 54 42 20  |&3000.H..STRLTB |
00007d70  52 2c 5b 6d 65 6d 2c 53  5d 0d 48 bc 12 42 4c 47  |R,[mem,S].H..BLG|
00007d80  45 20 73 74 72 62 20 3b  20 31 36 0d 48 c6 05 5d  |E strb ; 16.H..]|
00007d90  0d 48 d0 07 3d 22 22 0d  48 da 04 0d 48 e4 0e dd  |.H..="".H...H...|
00007da0  a4 73 68 6f 77 72 65 67  73 0d 48 ee 09 5b 4f 50  |.showregs.H..[OP|
00007db0  54 70 0d 48 f8 0f a4 70  72 69 6e 74 28 7a 70 63  |Tp.H...print(zpc|
00007dc0  29 0d 49 02 0d a4 70 72  69 6e 74 28 41 29 0d 49  |).I...print(A).I|
00007dd0  0c 0d a4 70 72 69 6e 74  28 58 29 0d 49 16 0d a4  |...print(X).I...|
00007de0  70 72 69 6e 74 28 59 29  0d 49 20 0e a4 70 72 69  |print(Y).I ..pri|
00007df0  6e 74 28 53 50 29 0d 49  2a 0d a4 70 72 69 6e 74  |nt(SP).I*..print|
00007e00  28 46 29 0d 49 34 16 41  44 44 20 52 31 32 2c 6d  |(F).I4.ADD R12,m|
00007e10  65 6d 2c 23 26 44 46 30  30 0d 49 3e 17 4c 44 52  |em,#&DF00.I>.LDR|
00007e20  42 20 52 31 32 2c 5b 52  31 32 2c 23 26 44 41 5d  |B R12,[R12,#&DA]|
00007e30  0d 49 48 16 4d 4f 56 20  52 31 32 2c 52 31 32 2c  |.IH.MOV R12,R12,|
00007e40  4c 53 4c 23 32 34 0d 49  52 0f a4 70 72 69 6e 74  |LSL#24.IR..print|
00007e50  32 28 31 32 29 0d 49 5c  0c 53 57 49 20 26 31 30  |2(12).I\.SWI &10|
00007e60  41 0d 49 66 15 3b 53 57  49 20 22 4f 53 5f 4e 65  |A.If.;SWI "OS_Ne|
00007e70  77 4c 69 6e 65 22 0d 49  70 05 5d 0d 49 7a 07 3d  |wLine".Ip.].Iz.=|
00007e80  22 22 0d 49 84 04 0d 49  8e 0e dd a4 70 72 69 6e  |"".I...I....prin|
00007e90  74 28 52 29 0d 49 98 0a  c8 8e 20 52 20 ca 0d 49  |t(R).I.... R ..I|
00007ea0  a2 19 c9 20 7a 70 63 20  3a 20 41 24 3d a4 70 72  |... zpc : A$=.pr|
00007eb0  69 6e 74 34 28 52 29 0d  49 ac 2e c9 20 46 20 20  |int4(R).I... F  |
00007ec0  20 3a 20 5b 4f 50 54 70  3a 4d 4f 56 20 52 32 2c  | : [OPTp:MOV R2,|
00007ed0  46 2c 4c 53 4c 23 32 34  3a a4 70 72 69 6e 74 32  |F,LSL#24:.print2|
00007ee0  28 32 29 3a 5d 0d 49 b6  05 7f 0d 49 c0 11 41 24  |(2):].I....I..A$|
00007ef0  3d a4 70 72 69 6e 74 32  28 52 29 0d 49 ca 05 cb  |=.print2(R).I...|
00007f00  0d 49 d4 07 3d 22 22 0d  49 de 04 0d 49 e8 19 c9  |.I..="".I...I...|
00007f10  20 41 20 20 20 3a 20 41  24 3d a4 70 72 69 6e 74  | A   : A$=.print|
00007f20  32 28 52 29 0d 49 f2 19  c9 20 58 20 20 20 3a 20  |2(R).I... X   : |
00007f30  41 24 3d a4 70 72 69 6e  74 32 28 52 29 0d 49 fc  |A$=.print2(R).I.|
00007f40  19 c9 20 59 20 20 20 3a  20 41 24 3d a4 70 72 69  |.. Y   : A$=.pri|
00007f50  6e 74 32 28 52 29 0d 4a  06 2d c9 20 53 50 20 20  |nt2(R).J.-. SP  |
00007f60  3a 20 5b 4f 50 54 70 3a  53 57 49 20 26 31 30 30  |: [OPTp:SWI &100|
00007f70  2b 97 22 31 22 3a a4 70  72 69 6e 74 32 28 53 50  |+."1":.print2(SP|
00007f80  29 3a 5d 0d 4a 10 1a c9  20 46 20 20 20 3a 20 41  |):].J... F   : A|
00007f90  24 3d a4 70 72 69 6e 74  66 6c 61 67 73 0d 4a 1a  |$=.printflags.J.|
00007fa0  05 cb 0d 4a 24 07 3d 22  22 0d 4a 2e 04 0d 4a 38  |...J$.="".J...J8|
00007fb0  10 dd a4 70 72 69 6e 74  66 6c 61 67 73 0d 4a 42  |...printflags.JB|
00007fc0  09 5b 4f 50 54 70 0d 4a  4c 34 54 53 54 20 46 2c  |.[OPTp.JL4TST F,|
00007fd0  23 25 31 3c 3c 37 20 3a  20 53 57 49 45 51 20 26  |#%1<<7 : SWIEQ &|
00007fe0  31 30 30 2b 97 22 6e 22  20 3a 20 53 57 49 4e 45  |100+."n" : SWINE|
00007ff0  20 26 31 30 30 2b 97 22  4e 22 0d 4a 56 34 54 53  | &100+."N".JV4TS|
00008000  54 20 46 2c 23 25 31 3c  3c 36 20 3a 20 53 57 49  |T F,#%1<<6 : SWI|
00008010  45 51 20 26 31 30 30 2b  97 22 76 22 20 3a 20 53  |EQ &100+."v" : S|
00008020  57 49 4e 45 20 26 31 30  30 2b 97 22 56 22 0d 4a  |WINE &100+."V".J|
00008030  60 34 54 53 54 20 46 2c  23 25 31 3c 3c 35 20 3a  |`4TST F,#%1<<5 :|
00008040  20 53 57 49 45 51 20 26  31 30 30 2b 97 22 30 22  | SWIEQ &100+."0"|
00008050  20 3a 20 53 57 49 4e 45  20 26 31 30 30 2b 97 22  | : SWINE &100+."|
00008060  31 22 0d 4a 6a 34 54 53  54 20 46 2c 23 25 31 3c  |1".Jj4TST F,#%1<|
00008070  3c 34 20 3a 20 53 57 49  45 51 20 26 31 30 30 2b  |<4 : SWIEQ &100+|
00008080  97 22 62 22 20 3a 20 53  57 49 4e 45 20 26 31 30  |."b" : SWINE &10|
00008090  30 2b 97 22 42 22 0d 4a  74 34 54 53 54 20 46 2c  |0+."B".Jt4TST F,|
000080a0  23 25 31 3c 3c 33 20 3a  20 53 57 49 45 51 20 26  |#%1<<3 : SWIEQ &|
000080b0  31 30 30 2b 97 22 64 22  20 3a 20 53 57 49 4e 45  |100+."d" : SWINE|
000080c0  20 26 31 30 30 2b 97 22  44 22 0d 4a 7e 34 54 53  | &100+."D".J~4TS|
000080d0  54 20 46 2c 23 25 31 3c  3c 32 20 3a 20 53 57 49  |T F,#%1<<2 : SWI|
000080e0  45 51 20 26 31 30 30 2b  97 22 69 22 20 3a 20 53  |EQ &100+."i" : S|
000080f0  57 49 4e 45 20 26 31 30  30 2b 97 22 49 22 0d 4a  |WINE &100+."I".J|
00008100  88 34 54 53 54 20 46 2c  23 25 31 3c 3c 31 20 3a  |.4TST F,#%1<<1 :|
00008110  20 53 57 49 45 51 20 26  31 30 30 2b 97 22 7a 22  | SWIEQ &100+."z"|
00008120  20 3a 20 53 57 49 4e 45  20 26 31 30 30 2b 97 22  | : SWINE &100+."|
00008130  5a 22 0d 4a 92 34 54 53  54 20 46 2c 23 25 31 3c  |Z".J.4TST F,#%1<|
00008140  3c 30 20 3a 20 53 57 49  45 51 20 26 31 30 30 2b  |<0 : SWIEQ &100+|
00008150  97 22 63 22 20 3a 20 53  57 49 4e 45 20 26 31 30  |."c" : SWINE &10|
00008160  30 2b 97 22 43 22 0d 4a  9c 0c 53 57 49 20 26 31  |0+."C".J..SWI &1|
00008170  32 30 0d 4a a6 05 5d 0d  4a b0 07 3d 22 22 0d 4a  |20.J..].J..="".J|
00008180  ba 04 0d 4a c4 0f dd a4  70 72 69 6e 74 32 28 52  |...J....print2(R|
00008190  29 0d 4a ce 07 ea 49 25  0d 4a d8 09 5b 4f 50 54  |).J...I%.J..[OPT|
000081a0  70 0d 4a e2 0c 4d 4f 56  20 52 31 2c 52 0d 4a ec  |p.J..MOV R1,R.J.|
000081b0  05 5d 0d 4a f6 0d e3 49  25 3d 30 20 b8 20 31 0d  |.].J...I%=0 . 1.|
000081c0  4b 00 0a 5b 4f 50 54 20  70 0d 4b 0a 14 4d 4f 56  |K..[OPT p.K..MOV|
000081d0  20 52 31 2c 52 31 2c 52  4f 52 23 32 38 0d 4b 14  | R1,R1,ROR#28.K.|
000081e0  0f 80 20 52 30 2c 52 31  2c 23 26 46 0d 4b 1e 0e  |.. R0,R1,#&F.K..|
000081f0  43 4d 50 20 52 30 2c 23  31 30 0d 4b 28 12 41 44  |CMP R0,#10.K(.AD|
00008200  44 47 45 20 52 30 2c 52  30 2c 23 37 0d 4b 32 11  |DGE R0,R0,#7.K2.|
00008210  41 44 44 20 52 30 2c 52  30 2c 23 34 38 0d 4b 3c  |ADD R0,R0,#48.K<|
00008220  13 53 57 49 20 22 4f 53  5f 57 72 69 74 65 43 22  |.SWI "OS_WriteC"|
00008230  0d 4b 46 05 5d 0d 4b 50  05 ed 0d 4b 5a 09 5b 4f  |.KF.].KP...KZ.[O|
00008240  50 54 70 0d 4b 64 0c 53  57 49 20 26 31 32 30 0d  |PTp.Kd.SWI &120.|
00008250  4b 6e 05 5d 0d 4b 78 07  3d 22 22 0d 4b 82 04 0d  |Kn.].Kx.="".K...|
00008260  4b 8c 0f dd a4 70 72 69  6e 74 34 28 52 29 0d 4b  |K....print4(R).K|
00008270  96 07 ea 49 25 0d 4b a0  09 5b 4f 50 54 70 0d 4b  |...I%.K..[OPTp.K|
00008280  aa 0c 4d 4f 56 20 52 31  2c 52 0d 4b b4 05 5d 0d  |..MOV R1,R.K..].|
00008290  4b be 0d e3 49 25 3d 30  20 b8 20 33 0d 4b c8 0a  |K...I%=0 . 3.K..|
000082a0  5b 4f 50 54 20 70 0d 4b  d2 14 4d 4f 56 20 52 31  |[OPT p.K..MOV R1|
000082b0  2c 52 31 2c 52 4f 52 23  32 38 0d 4b dc 0f 80 20  |,R1,ROR#28.K... |
000082c0  52 30 2c 52 31 2c 23 26  46 0d 4b e6 0e 43 4d 50  |R0,R1,#&F.K..CMP|
000082d0  20 52 30 2c 23 31 30 0d  4b f0 12 41 44 44 47 45  | R0,#10.K..ADDGE|
000082e0  20 52 30 2c 52 30 2c 23  37 0d 4b fa 11 41 44 44  | R0,R0,#7.K..ADD|
000082f0  20 52 30 2c 52 30 2c 23  34 38 0d 4c 04 13 53 57  | R0,R0,#48.L..SW|
00008300  49 20 22 4f 53 5f 57 72  69 74 65 43 22 0d 4c 0e  |I "OS_WriteC".L.|
00008310  05 5d 0d 4c 18 05 ed 0d  4c 22 09 5b 4f 50 54 70  |.].L....L".[OPTp|
00008320  0d 4c 2c 0c 53 57 49 20  26 31 32 30 0d 4c 36 05  |.L,.SWI &120.L6.|
00008330  5d 0d 4c 40 07 3d 22 22  0d 4c 4a 04 0d 4c 54 10  |].L@.="".LJ..LT.|
00008340  dd a4 70 72 69 6e 74 33  32 28 52 29 0d 4c 5e 07  |..print32(R).L^.|
00008350  ea 49 25 0d 4c 68 09 5b  4f 50 54 70 0d 4c 72 0c  |.I%.Lh.[OPTp.Lr.|
00008360  4d 4f 56 20 52 31 2c 52  0d 4c 7c 05 5d 0d 4c 86  |MOV R1,R.L|.].L.|
00008370  0e e3 49 25 3d 30 20 b8  20 33 31 0d 4c 90 0a 5b  |..I%=0 . 31.L..[|
00008380  4f 50 54 20 70 0d 4c 9a  14 4d 4f 56 20 52 31 2c  |OPT p.L..MOV R1,|
00008390  52 31 2c 52 4f 52 23 32  38 0d 4c a4 0f 80 20 52  |R1,ROR#28.L... R|
000083a0  30 2c 52 31 2c 23 26 46  0d 4c ae 0e 43 4d 50 20  |0,R1,#&F.L..CMP |
000083b0  52 30 2c 23 31 30 0d 4c  b8 12 41 44 44 47 45 20  |R0,#10.L..ADDGE |
000083c0  52 30 2c 52 30 2c 23 37  0d 4c c2 11 41 44 44 20  |R0,R0,#7.L..ADD |
000083d0  52 30 2c 52 30 2c 23 34  38 0d 4c cc 13 53 57 49  |R0,R0,#48.L..SWI|
000083e0  20 22 4f 53 5f 57 72 69  74 65 43 22 0d 4c d6 05  | "OS_WriteC".L..|
000083f0  5d 0d 4c e0 05 ed 0d 4c  ea 09 5b 4f 50 54 70 0d  |].L....L..[OPTp.|
00008400  4c f4 0c 53 57 49 20 26  31 32 30 0d 4c fe 05 5d  |L..SWI &120.L..]|
00008410  0d 4d 08 07 3d 22 22 0d  4d 12 04 0d 4d 1c 10 dd  |.M..="".M...M...|
00008420  a4 70 72 69 6e 74 73 28  41 24 29 0d 4d 26 09 5b  |.prints(A$).M&.[|
00008430  4f 50 54 70 0d 4d 30 13  53 57 49 20 22 4f 53 5f  |OPTp.M0.SWI "OS_|
00008440  57 72 69 74 65 53 22 0d  4d 3a 0b 45 51 55 53 20  |WriteS".M:.EQUS |
00008450  41 24 0d 4d 44 0b 45 51  55 42 20 31 30 0d 4d 4e  |A$.MD.EQUB 10.MN|
00008460  0b 45 51 55 42 20 31 33  0d 4d 58 0a 45 51 55 42  |.EQUB 13.MX.EQUB|
00008470  20 30 0d 4d 62 09 41 4c  49 47 4e 0d 4d 6c 05 5d  | 0.Mb.ALIGN.Ml.]|
00008480  0d 4d 76 07 3d 22 22 0d  4d 80 04 0d 4d 8a 0f dd  |.Mv.="".M...M...|
00008490  a4 75 6e 64 6f 63 28 41  25 29 0d 4d 94 15 e7 20  |.undoc(A%).M... |
000084a0  6f 70 63 6f 64 65 25 3c  3e 41 25 20 8c 20 fa 0d  |opcode%<>A% . ..|
000084b0  4d 9e 09 5b 4f 50 54 70  0d 4d a8 11 3b 54 53 54  |M..[OPTp.M..;TST|
000084c0  20 46 2c 23 25 31 30 30  30 0d 4d b2 14 3b 53 57  | F,#%1000.M..;SW|
000084d0  49 45 51 20 26 31 30 30  2b 97 22 64 22 0d 4d bc  |IEQ &100+."d".M.|
000084e0  14 3b 53 57 49 4e 45 20  26 31 30 30 2b 97 22 44  |.;SWINE &100+."D|
000084f0  22 0d 4d c6 04 0d 4d d0  21 3b 53 57 49 20 26 31  |".M...M.!;SWI &1|
00008500  30 30 2b 97 28 c0 c2 22  30 22 2b c3 7e 41 25 2c  |00+.(.."0"+.~A%,|
00008510  32 29 2c 31 29 29 0d 4d  da 19 3b 53 57 49 20 26  |2),1)).M..;SWI &|
00008520  31 30 30 2b 97 28 c2 c3  7e 41 25 2c 31 29 29 0d  |100+.(..~A%,1)).|
00008530  4d e4 12 3b 53 57 49 20  26 31 30 30 2b 97 22 20  |M..;SWI &100+." |
00008540  22 0d 4d ee 10 3b a4 70  72 69 6e 74 28 7a 70 63  |".M..;.print(zpc|
00008550  29 0d 4d f8 21 3b 53 57  49 20 26 31 30 30 2b 97  |).M.!;SWI &100+.|
00008560  22 20 22 3a 3b 53 57 49  20 26 31 30 30 2b 97 22  |" ":;SWI &100+."|
00008570  20 22 0d 4e 02 04 0d 4e  0c 20 3b 4d 4f 56 20 52  | ".N...N. ;MOV R|
00008580  30 2c 23 31 35 20 3a 20  3b 53 57 49 20 22 4f 53  |0,#15 : ;SWI "OS|
00008590  5f 42 79 74 65 22 0d 4e  16 0a 3b 53 57 49 20 34  |_Byte".N..;SWI 4|
000085a0  0d 4e 20 05 5d 0d 4e 2a  07 3d 22 22 0d 4e 34 04  |.N .].N*.="".N4.|
000085b0  0d 4e 3e 11 dd a4 65 71  75 64 28 41 25 2c 42 25  |.N>...equd(A%,B%|
000085c0  29 0d 4e 48 07 ea 49 25  0d 4e 52 0e e3 49 25 3d  |).NH..I%.NR..I%=|
000085d0  31 20 b8 20 41 25 0d 4e  5c 09 5b 4f 50 54 70 0d  |1 . A%.N\.[OPTp.|
000085e0  4e 66 0b 45 51 55 44 20  42 25 0d 4e 70 05 5d 0d  |Nf.EQUD B%.Np.].|
000085f0  4e 7a 05 ed 0d 4e 84 07  3d 22 22 0d 4e 8e 04 0d  |Nz...N..="".N...|
00008600  4e 98 12 dd a4 64 6f 5f  69 6e 74 65 72 72 75 70  |N....do_interrup|
00008610  74 0d 4e a2 09 5b 4f 50  54 70 0d 4e ac 12 3b 53  |t.N..[OPTp.N..;S|
00008620  57 49 20 26 31 30 30 2b  97 22 49 22 0d 4e b6 15  |WI &100+."I".N..|
00008630  4d 4f 56 20 52 30 2c 7a  70 63 2c 4c 53 52 23 32  |MOV R0,zpc,LSR#2|
00008640  34 0d 4e c0 0c a4 70 75  73 68 28 30 29 0d 4e ca  |4.N...push(0).N.|
00008650  15 4d 4f 56 20 52 30 2c  7a 70 63 2c 4c 53 52 23  |.MOV R0,zpc,LSR#|
00008660  31 36 0d 4e d4 0c a4 70  75 73 68 28 30 29 0d 4e  |16.N...push(0).N|
00008670  de 24 42 49 43 20 46 2c  46 2c 23 25 31 30 30 30  |.$BIC F,F,#%1000|
00008680  30 20 3b 20 63 6c 65 61  72 20 42 52 4b 20 66 6c  |0 ; clear BRK fl|
00008690  61 67 0d 4e e8 0c a4 70  75 73 68 28 46 29 0d 4e  |ag.N...push(F).N|
000086a0  f2 19 84 52 20 46 2c 46  2c 23 25 31 30 30 20 3b  |...R F,F,#%100 ;|
000086b0  20 21 21 21 21 21 21 0d  4e fc 22 4d 4f 56 20 52  | !!!!!!.N."MOV R|
000086c0  30 2c 23 26 46 46 30 30  20 3a 20 41 44 44 20 52  |0,#&FF00 : ADD R|
000086d0  30 2c 52 30 2c 23 26 46  45 0d 4f 06 14 4c 44 52  |0,R0,#&FE.O..LDR|
000086e0  20 7a 70 63 2c 5b 6d 65  6d 2c 52 30 5d 0d 4f 10  | zpc,[mem,R0].O.|
000086f0  16 4d 4f 56 20 7a 70 63  2c 7a 70 63 2c 4c 53 4c  |.MOV zpc,zpc,LSL|
00008700  23 31 36 0d 4f 1a 05 5d  0d 4f 24 07 3d 22 22 0d  |#16.O..].O$.="".|
00008710  4f 2e 04 0d 4f 38 17 dd  a4 64 69 76 6d 6f 64 28  |O...O8...divmod(|
00008720  41 2c 42 2c 43 2c 44 2c  45 29 0d 4f 42 0b 64 69  |A,B,C,D,E).OB.di|
00008730  76 25 2b 3d 31 0d 4f 4c  09 5b 4f 50 54 70 0d 4f  |v%+=1.OL.[OPTp.O|
00008740  56 0c 4d 4f 56 20 43 2c  23 31 0d 4f 60 0c 4d 4f  |V.MOV C,#1.O`.MO|
00008750  56 20 44 2c 23 30 0d 4f  6a 0b 4d 4f 56 20 45 2c  |V D,#0.Oj.MOV E,|
00008760  42 0d 4f 74 13 2e 64 69  76 6c 6f 6f 70 31 28 64  |B.Ot..divloop1(d|
00008770  69 76 25 29 0d 4f 7e 11  4d 4f 56 20 42 2c 42 2c  |iv%).O~.MOV B,B,|
00008780  4c 53 4c 23 31 0d 4f 88  11 4d 4f 56 20 43 2c 43  |LSL#1.O..MOV C,C|
00008790  2c 4c 53 4c 23 31 0d 4f  92 0b 43 4d 50 20 42 2c  |,LSL#1.O..CMP B,|
000087a0  41 0d 4f 9c 16 42 4c 4f  20 64 69 76 6c 6f 6f 70  |A.O..BLO divloop|
000087b0  31 28 64 69 76 25 29 0d  4f a6 04 0d 4f b0 13 2e  |1(div%).O...O...|
000087c0  64 69 76 6c 6f 6f 70 32  28 64 69 76 25 29 0d 4f  |divloop2(div%).O|
000087d0  ba 1f 43 4d 50 20 42 2c  41 20 3a 20 42 4c 53 20  |..CMP B,A : BLS |
000087e0  64 69 76 6a 75 6d 70 28  64 69 76 25 29 0d 4f c4  |divjump(div%).O.|
000087f0  1f 43 4d 50 20 42 2c 45  20 3a 20 42 4c 53 20 64  |.CMP B,E : BLS d|
00008800  69 76 6a 75 6d 70 28 64  69 76 25 29 0d 4f ce 11  |ivjump(div%).O..|
00008810  4d 4f 56 20 42 2c 42 2c  4c 53 52 23 31 0d 4f d8  |MOV B,B,LSR#1.O.|
00008820  11 4d 4f 56 20 43 2c 43  2c 4c 53 52 23 31 0d 4f  |.MOV C,C,LSR#1.O|
00008830  e2 14 42 20 64 69 76 6c  6f 6f 70 32 28 64 69 76  |..B divloop2(div|
00008840  25 29 0d 4f ec 12 2e 64  69 76 6a 75 6d 70 28 64  |%).O...divjump(d|
00008850  69 76 25 29 0d 4f f6 0b  43 4d 50 20 42 2c 41 0d  |iv%).O..CMP B,A.|
00008860  50 00 0f 53 55 42 4c 53  20 41 2c 41 2c 42 0d 50  |P..SUBLS A,A,B.P|
00008870  0a 0f 41 44 44 4c 53 20  44 2c 44 2c 43 0d 50 14  |..ADDLS D,D,C.P.|
00008880  0b 43 4d 50 20 42 2c 45  0d 50 1e 16 42 48 49 20  |.CMP B,E.P..BHI |
00008890  64 69 76 6c 6f 6f 70 32  28 64 69 76 25 29 0d 50  |divloop2(div%).P|
000088a0  28 05 5d 0d 50 32 07 3d  22 22 0d 50 3c 04 0d 50  |(.].P2.="".P<..P|
000088b0  46 0c dd a4 73 68 61 64  6f 77 0d 50 50 0e e7 20  |F...shadow.PP.. |
000088c0  6d 61 73 74 65 72 20 8c  0d 50 5a 09 5b 4f 50 54  |master ..PZ.[OPT|
000088d0  70 0d 50 64 19 4c 44 52  42 20 52 32 2c 5b 6d 65  |p.Pd.LDRB R2,[me|
000088e0  6d 2c 23 41 43 43 43 4f  4e 5d 0d 50 6e 15 3b 82  |m,#ACCCON].Pn.;.|
000088f0  20 52 32 2c 52 32 2c 52  32 2c 4c 53 52 23 32 0d  | R2,R2,R2,LSR#2.|
00008900  50 78 0e 54 53 54 20 52  32 2c 23 25 31 0d 50 82  |Px.TST R2,#%1.P.|
00008910  19 53 55 42 4e 45 20 52  31 33 2c 6d 65 6d 2c 23  |.SUBNE R13,mem,#|
00008920  26 31 33 30 30 30 0d 50  8c 0e ec 51 20 52 31 33  |&13000.P...Q R13|
00008930  2c 6d 65 6d 0d 50 96 05  5d 0d 50 a0 05 cc 0d 50  |,mem.P..].P....P|
00008940  aa 09 5b 4f 50 54 70 0d  50 b4 0f 4d 4f 56 20 52  |..[OPTp.P..MOV R|
00008950  31 33 2c 6d 65 6d 0d 50  be 05 5d 0d 50 c8 05 cd  |13,mem.P..].P...|
00008960  0d 50 d2 07 3d 22 22 0d  50 d3 04 0d 50 dc 15 dd  |.P..="".P...P...|
00008970  f2 63 6c 65 61 72 6d 65  6d 28 53 25 2c 45 25 29  |.clearmem(S%,E%)|
00008980  0d 50 e6 0d 50 25 3d 62  75 66 66 65 72 0d 50 f0  |.P..P%=buffer.P.|
00008990  09 5b 4f 50 54 32 0d 50  fa 14 45 51 55 44 20 53  |.[OPT2.P..EQUD S|
000089a0  25 20 3b 20 6d 65 6d 6f  72 79 0d 51 04 1a 45 51  |% ; memory.Q..EQ|
000089b0  55 44 20 45 25 20 3b 20  6d 65 6d 6f 72 79 2b 26  |UD E% ; memory+&|
000089c0  38 30 30 30 0d 51 0e 0a  2e 63 6c 65 61 72 0d 51  |8000.Q...clear.Q|
000089d0  18 0d 4d 4f 56 20 52 30  2c 23 30 0d 51 22 11 4c  |..MOV R0,#0.Q".L|
000089e0  44 52 20 52 31 2c 62 75  66 66 65 72 0d 51 2c 13  |DR R1,buffer.Q,.|
000089f0  4c 44 52 20 52 32 2c 62  75 66 66 65 72 2b 34 0d  |LDR R2,buffer+4.|
00008a00  51 36 09 2e 6c 6f 6f 70  0d 51 40 12 53 54 52 20  |Q6..loop.Q@.STR |
00008a10  52 30 2c 5b 52 31 5d 2c  23 34 0d 51 4a 0d 43 4d  |R0,[R1],#4.QJ.CM|
00008a20  50 20 52 31 2c 52 32 0d  51 54 0c 42 4e 45 20 6c  |P R1,R2.QT.BNE l|
00008a30  6f 6f 70 0d 51 5e 0e 4d  4f 56 20 50 43 2c 52 31  |oop.Q^.MOV PC,R1|
00008a40  34 0d 51 68 05 5d 0d 51  72 0b d6 20 63 6c 65 61  |4.Qh.].Qr.. clea|
00008a50  72 0d 51 7c 05 e1 0d 51  86 04 0d 51 90 0c dd a4  |r.Q|...Q...Q....|
00008a60  66 65 74 63 68 32 0d 51  9a 09 5b 4f 50 54 70 0d  |fetch2.Q..[OPTp.|
00008a70  51 a4 1c 4c 44 52 42 20  52 32 2c 5b 6d 65 6d 2c  |Q..LDRB R2,[mem,|
00008a80  7a 70 63 2c 4c 53 52 23  31 36 5d 0d 51 ae 19 41  |zpc,LSR#16].Q..A|
00008a90  44 44 20 50 43 2c 74 61  62 6c 65 2c 52 32 2c 4c  |DD PC,table,R2,L|
00008aa0  53 4c 23 38 0d 51 b8 05  5d 0d 51 c2 07 3d 22 22  |SL#8.Q..].Q..=""|
00008ab0  0d 51 cc 04 0d 51 d6 13  dd a4 66 65 74 63 68 33  |.Q...Q....fetch3|
00008ac0  28 4e 25 2c 54 25 29 0d  51 e0 2b e7 20 4e 25 3c  |(N%,T%).Q.+. N%<|
00008ad0  3e 30 20 8c 20 5b 4f 50  54 70 3a 41 44 44 20 7a  |>0 . [OPTp:ADD z|
00008ae0  70 63 2c 7a 70 63 2c 23  4e 25 20 3c 3c 20 31 36  |pc,zpc,#N% << 16|
00008af0  3a 5d 0d 51 ea 09 5b 4f  50 54 70 0d 51 f4 0e a4  |:].Q..[OPTp.Q...|
00008b00  73 68 6f 77 72 65 67 73  32 0d 51 fe 16 53 55 42  |showregs2.Q..SUB|
00008b10  53 20 74 69 6d 65 2c 74  69 6d 65 2c 23 54 25 0d  |S time,time,#T%.|
00008b20  52 08 1e 4c 44 52 50 4c  42 20 52 32 2c 5b 6d 65  |R..LDRPLB R2,[me|
00008b30  6d 2c 7a 70 63 2c 4c 53  52 23 31 36 5d 0d 52 12  |m,zpc,LSR#16].R.|
00008b40  1b 41 44 44 50 4c 20 50  43 2c 74 61 62 6c 65 2c  |.ADDPL PC,table,|
00008b50  52 32 2c 4c 53 4c 23 38  0d 52 1c 0c 42 20 66 65  |R2,LSL#8.R..B fe|
00008b60  74 63 68 32 0d 52 26 05  5d 0d 52 30 07 3d 22 22  |tch2.R&.].R0.=""|
00008b70  0d 52 3a 04 0d 52 44 12  dd a4 66 65 74 63 68 28  |.R:..RD...fetch(|
00008b80  4e 25 2c 54 25 29 0d 52  4e 2b e7 20 4e 25 3c 3e  |N%,T%).RN+. N%<>|
00008b90  30 20 8c 20 5b 4f 50 54  70 3a 41 44 44 20 7a 70  |0 . [OPTp:ADD zp|
00008ba0  63 2c 7a 70 63 2c 23 4e  25 20 3c 3c 20 31 36 3a  |c,zpc,#N% << 16:|
00008bb0  5d 0d 52 58 09 5b 4f 50  54 70 0d 52 62 0e a4 73  |].RX.[OPTp.Rb..s|
00008bc0  68 6f 77 72 65 67 73 32  0d 52 6c 16 53 55 42 53  |howregs2.Rl.SUBS|
00008bd0  20 74 69 6d 65 2c 74 69  6d 65 2c 23 54 25 0d 52  | time,time,#T%.R|
00008be0  76 1e 4c 44 52 50 4c 42  20 52 32 2c 5b 6d 65 6d  |v.LDRPLB R2,[mem|
00008bf0  2c 7a 70 63 2c 4c 53 52  23 31 36 5d 0d 52 80 1b  |,zpc,LSR#16].R..|
00008c00  41 44 44 50 4c 20 50 43  2c 74 61 62 6c 65 2c 52  |ADDPL PC,table,R|
00008c10  32 2c 4c 53 4c 23 38 0d  52 8a 0c 42 20 66 65 74  |2,LSL#8.R..B fet|
00008c20  63 68 32 0d 52 94 05 5d  0d 52 9e 0e 6f 70 63 6f  |ch2.R..].R..opco|
00008c30  64 65 25 2b 3d 31 0d 52  a8 13 e7 20 62 63 64 5f  |de%+=1.R... bcd_|
00008c40  6c 6f 6f 70 25 3d 30 20  8c 0d 52 b2 1d e7 20 6f  |loop%=0 ..R... o|
00008c50  70 63 6f 64 65 28 6f 70  63 6f 64 65 25 2d 31 29  |pcode(opcode%-1)|
00008c60  3d 30 20 8c 20 fa 0d 52  bc 22 e7 20 6f 70 63 6f  |=0 . ..R.". opco|
00008c70  64 65 28 6f 70 63 6f 64  65 25 29 3c 3e 30 20 80  |de(opcode%)<>0 .|
00008c80  20 70 3d 30 20 8c 20 fa  0d 52 c6 2b e7 20 50 25  | p=0 . ..R.+. P%|
00008c90  2d 6f 70 63 6f 64 65 28  30 29 3e 6f 70 63 6f 64  |-opcode(0)>opcod|
00008ca0  65 25 2a 34 2a 36 34 20  8c 20 f1 7e 6f 70 63 6f  |e%*4*64 . .~opco|
00008cb0  64 65 25 0d 52 d0 1d 50  25 3d 6f 70 63 6f 64 65  |de%.R..P%=opcode|
00008cc0  28 30 29 2b 6f 70 63 6f  64 65 25 2a 34 2a 36 34  |(0)+opcode%*4*64|
00008cd0  0d 52 da 0e 4f 25 3d 63  6f 64 65 2b 50 25 0d 52  |.R..O%=code+P%.R|
00008ce0  e4 05 cc 0d 52 ee 1a 50  25 3d 62 63 64 28 30 29  |....R..P%=bcd(0)|
00008cf0  2b 6f 70 63 6f 64 65 25  2a 34 2a 36 34 0d 52 f8  |+opcode%*4*64.R.|
00008d00  0e 4f 25 3d 63 6f 64 65  2b 50 25 0d 53 02 05 cd  |.O%=code+P%.S...|
00008d10  0d 53 0c 07 3d 22 22 0d  53 16 0f dd a4 62 63 64  |.S..="".S....bcd|
00008d20  28 41 25 29 20 3a 0d 53  20 24 e7 20 50 25 3e 6f  |(A%) :.S $. P%>o|
00008d30  70 63 6f 64 65 28 30 29  2b 28 41 25 2b 32 35 36  |pcode(0)+(A%+256|
00008d40  29 2a 34 2a 36 34 20 8c  20 fa 0d 53 2a 31 50 25  |)*4*64 . ..S*1P%|
00008d50  3d 6f 70 63 6f 64 65 28  30 29 2b 28 41 25 2b 32  |=opcode(0)+(A%+2|
00008d60  35 36 29 2a 34 2a 36 34  20 3a 20 4f 25 3d 63 6f  |56)*4*64 : O%=co|
00008d70  64 65 2b 50 25 20 3a 20  3d 22 22 0d 53 34 04 0d  |de+P% : ="".S4..|
00008d80  53 3e 0d dd a4 61 6c 69  67 6e 31 36 0d 53 48 13  |S>...align16.SH.|
00008d90  c8 95 20 28 50 25 20 80  20 31 35 29 3c 3e 30 0d  |.. (P% . 15)<>0.|
00008da0  53 52 11 50 25 2b 3d 31  20 3a 20 4f 25 2b 3d 31  |SR.P%+=1 : O%+=1|
00008db0  0d 53 5c 05 ce 0d 53 66  07 3d 22 22 0d 53 70 0c  |.S\...Sf.="".Sp.|
00008dc0  dd 20 f2 65 72 72 6f 72  0d 53 7a 15 f6 3a f1 20  |. .error.Sz..:. |
00008dd0  22 20 61 74 20 6c 69 6e  65 20 22 3b 9e 0d 53 84  |" at line ";..S.|
00008de0  05 e0 0d 53 8e 04 0d 53  98 0f dd a4 73 68 6f 77  |...S...S....show|
00008df0  72 65 67 73 32 0d 53 a2  09 5b 4f 50 54 70 0d 53  |regs2.S..[OPTp.S|
00008e00  ac 11 3b 42 4c 20 73 68  6f 77 5f 72 65 67 73 0d  |..;BL show_regs.|
00008e10  53 b6 05 5d 0d 53 c0 07  3d 22 22 0d ff           |S..].S..=""..|
00008e1d