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

!6502Em/src/6502Em130

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/6502Em130
Read OK:
File size: E5B8 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM > 6502Em
   20REMINPUT"Hardware scroll ";HWScroll
   30REMIF HWScroll<>0 THEN HWScroll=TRUE
   40HWScroll=TRUE
   50master=FALSE
   60*RMENSURE 6502Support 0.00 RMRun <6502Em$Res>.65Support
   70ON ERROR PROCerror
   80
   90REM V2. (bbc)
  100
  110IO_Podule%=FALSE
  120
  130DIM opcode(&100), bcd(&100), code 500*1024, buffer 1000
  140DIM l%(100)
  150DIM divloop1(10),divloop2(10),divjump(10)
  160div%=0
  170LIBRARY "<6502Em$Dir>.Src.Sound6"
  180LIBRARY "<6502Em$Dir>.Src.Opcodes"
  190LIBRARY "<6502Em$Dir>.Src.Screen"
  200LIBRARY "<6502Em$Dir>.Src.HWScroll"
  210
  220electron%=FALSE
  230master=FALSE
  240PROCassemble
  250
  260PRINT(end-start)/1024
  270OSCLI "Save <6502Em$Dir>.Code "+STR$~code+" "+STR$~(end+code)
  280OSCLI "SetType <6502Em$Dir>.Code Data"
  290
  300master=TRUE
  310PROCassemble
  320PRINT(end-start)/1024
  330OSCLI "Save <6502Em$Dir>.CodeM "+STR$~code+" "+STR$~(end+code)
  340OSCLI "SetType <6502Em$Dir>.CodeM Data"
  350
  360END
  370
  380OSCLI"LOAD <6502Em$Dir>.OS1,2 "+STR$~(memory+&C000)
  390OSCLI"LOAD <6502Em$Dir>.BASICII "+STR$~(memory+&8000)
  400
  410MODE 12
  420CALL init+code
  430PRINT"BOO"
  440
  450!pc_store=&D9CD << 16
  460
  470D%=memory : REM R3
  480CALL start+code
  490
  500END
  510DEFPROCassemble
  520PROCclearmem(code,code+200*1024)
  530R=1000 : S=1000 : T=1000
  540
  550A=4
  560X=5
  570Y=6
  580F=7
  590SP=8
  600mem=3
  610time=9
  620zpc=10
  630table=11
  640
  650a=-&100+0
  660x=-&100+4
  670y=-&100+8
  680f=-&100+12
  690sp=-&100+16
  700pc_store=-&100+20
  710T1mode=-&100+24
  720T2mode=-&100+25
  730T3mode=-&100+26
  740T4mode=-&100+27
  750T1=-&100+28
  760T1R=-&100+32
  770T2=-&100+36
  780T2R=-&100+40
  790T3=-&100+44
  800T3R=-&100+48
  810T4=-&100+52
  820T4R=-&100+56
  830screen=-&100+60
  840screenR=-&100+64
  850min=-&100+68
  860sound_timer=-&100+72
  870ifr=-&100+76
  880ier=-&100+77
  890ifr2=-&100+78
  900ier2=-&100+79
  910arc_screenstart=-&100+80
  920tamper=-&100+84
  930cursor_tamper=-&100+88
  940ROMSEL_ON=-&100+92
  950rom=-&100+96
  960ROMRAM=-&100+100
  970fe20=-&100+116
  980tape_handle=-&100+117
  990crt_regs=-&100+120
 1000scratch=-&100+140
 1010pal_regs=-&100+148
 1020Palette=-&100+164
 1030ACCCON=-&100+172
 1040patch_on=-&100+176
 1050pal_tamper=-&100+177
 1060lastmode=-&100+178
 1070fe10=-&100+179
 1080tape_count=-&100+180
 1090key_addr=-&100+184
 1100screenstart_tamper=-&100+188
 1110screenstart_previous=-&100+192
 1120speedR=-&100+196
 1130
 1140enD=-&100+200 : REM don't go past this
 1150
 1160FORp=4 TO 6 STEP 2
 1170div%=0
 1180O%=code
 1190l%=0
 1200P%=0
 1210opcode%=0
 1220[OPTp
 1230.Oa                            EQUD 0
 1240.Ox                            EQUD 0
 1250.Oy                            EQUD 0
 1260.Of                            EQUD 0
 1270.Osp                           EQUD 0
 1280.Opc_store                     EQUD 0
 1290.start_offset                 EQUD start
 1300.trace                        EQUD 0
 1310.trace2                       EQUD 0
 1320.init_addr                    EQUD init
 1330.crt_addr                     EQUD 0 ; was crt_regs
 1340.T1_addr                      EQUD 0 ; was T1
 1350.ifr_addr                     EQUD 0 ; ifr
 1360.column_counter_addr          EQUD column_counter
 1370.ROMSEL_addr                  EQUD 0 ; ROMSEL
 1380.Palette_addr                 EQUD 0 ; Palette
 1390.speed_addr                   EQUD screen_count+4
 1400.elite_addr                   EQUD 0 ; elite
 1410.opco_addr                    EQUD opcode(0) ; opcodetable
 1420.bcd_addr                     EQUD bcd(0)
 1430.sheila_writetab_addr         EQUD sheila_writetab
 1440.sheila_readtab_addr          EQUD sheila_readtab
 1450.sound_vectors_addr           EQUD sound_buffs_addr
 1460.patch_addr                   EQUD patch_screen
 1470
 1480.init ; only called once, before code called
 1490ADR R0,0
 1500;LDR R1,opco_addr
 1510;ADD R1,R1,R0
 1520;LDR R2,bcd_addr
 1530;ADD R2,R2,R0
 1540LDR R5,sheila_writetab_addr
 1550ADD R5,R5,R0
 1560LDR R6,sheila_readtab_addr
 1570ADD R6,R6,R0
 1580MOV R3,#255
 1590.init_loop
 1600;LDR R4,[R1,R3,LSL#2]
 1610;ADD R4,R4,R0
 1620;STR R4,[R1,R3,LSL#2]
 1630;LDR R4,[R2,R3,LSL#2]
 1640;ADD R4,R4,R0
 1650;STR R4,[R2,R3,LSL#2]
 1660LDR R4,[R5,R3,LSL#2]
 1670ADD R4,R4,R0
 1680STR R4,[R5,R3,LSL#2]
 1690LDR R4,[R6,R3,LSL#2]
 1700ADD R4,R4,R0
 1710STR R4,[R6,R3,LSL#2]
 1720SUBS R3,R3,#1
 1730BPL init_loop
 1740MOV PC,R14
 1750
 1760.start
 1770STMFD R13!,{R1-R12,R14}
 1780STR R13,return_addr
 1790STR R0,roms_addr
 1800;LDR R0,crt_addr
 1810;ADR R1,0
 1820;ADD R0,R0,R1
 1830;SWI "6502_Init"
 1840
 1850BL blank_cursor
 1860
 1870MOV R0,#&9C00 : ADD R0,R0,#&40
 1880STR R0,[mem,#screenR]
 1890
 1900SWI "6502_Getkeyaddr"
 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 time,[mem,#min]
 2040LDR A,[mem,#a]
 2050LDR X,[mem,#x]
 2060LDR Y,[mem,#y]
 2070LDR SP,[mem,#sp] : ORR SP,SP,#1
 2080LDR F,[mem,#f]
 2090LDR zpc,[mem,#pc_store]
 2100
 2110BL recalc_wrap
 2120LDRB R0,[mem,#patch_on]
 2130AND R0,R0,#%11111
 2140BIC F,F,#&FF00
 2150ORR F,F,R0,LSL#8
 2160
 2170;MOV time,#0
 2180
 2190LDRB R0,fe08_read
 2200BIC R0,R0,#&81
 2210STRB R0,fe08_read
 2220
 2230ADR R0,0
 2240TST F,#%1000
 2250LDREQ table,opco_addr
 2260LDRNE table,bcd_addr
 2270ADD table,table,R0
 2280;SWI "6502_ReInit"
 2290;SWI "6502_UpdateScreen
 2300BL poke_updatepixelV
 2310BL updatescreen
 2320B fetch2
 2330
 2340.reset_bcdflag
 2350ADR R1,0
 2360TST F,#%1000
 2370LDREQ table,opco_addr
 2380LDRNE table,bcd_addr
 2390ADD table,table,R1
 2400MOV PC,R14
 2410
 2420.block1
 2430EQUD 149 : EQUD -1
 2440.block2
 2450EQUD 0 : EQUD 0
 2460
 2470.screen_count
 2480EQUD 0
 2490EQUD 0
 2500
 2510.reg_comp
 2520EQUD &FFEE << 16
 2530
 2540.trace_on
 2550MOV R12,#1
 2560STRB R12,trace
 2570MOV PC,R14
 2580
 2590.show_regs
 2600
 2610;SWI "6502_Checkkdata"
 2620LDR R0,[mem,#key_addr]
 2630LDRB R0,[R0,#-4]
 2640
 2650
 2660CMP R0,#&1F ; Insert
 2670MOVEQ R1,#1
 2680STREQ R1,trace2
 2690
 2700LDRB R0,trace2
 2710CMP R0,#1
 2720MOVNE PC,R14
 2730
 2740;LDR R0,reg_comp
 2750;CMP R0,zpc
 2760;MOVEQ R0,#1
 2770;STREQB R0,trace
 2780
 2790;ADD R12,mem,#&DF00
 2800;LDRB R12,[R12,#&DA]
 2810;CMP R12,#0
 2820;MOVEQ R12,#1
 2830;STREQB R12,trace
 2840
 2850;LDRB R0,trace
 2860;CMP R0,#1
 2870;MOVNE PC,14
 2880
 2890FNshowregs
 2900MOV PC,R14
 2910
 2920.read_ifr
 2930LDRB R0,[mem,#ifr]
 2940
 2950LDR R1,[mem,#min]
 2960SUB R1,R1,time
 2970LDR R12,[mem,#screen]
 2980SUB R12,R12,R1
 2990CMP R12,#10
 3000ORRLT R0,R0,#%10 ; vsync
 3010;
 3020;
 3030; CMP zpc,#&8000 << 16
 3040; ORRLT R0,R0,#%10 ; vsync
 3050
 3060
 3070LDRB R1,[mem,#ier]
 3080BIC R0,R0,#&80
 3090ANDS R1,R1,R0
 3100ORRNE R0,R0,#&80
 3110
 3120MOV PC,R14
 3130
 3140.read_ier
 3150LDRB R0,[mem,#ier]
 3160ORR R0,R0,#&80
 3170MOV PC,R14
 3180
 3190.read_ifr2
 3200LDRB R0,[mem,#ifr2]
 3210LDRB R1,[mem,#ier2]
 3220BIC R0,R0,#&80
 3230ANDS R1,R1,R0
 3240ORRNE R0,R0,#&80
 3250MOV PC,R14
 3260
 3270.read_ier2
 3280LDRB R0,[mem,#ier2]
 3290ORR R0,R0,#&80
 3300MOV PC,R14
 3310
 3320.ldrb41
 3330
 3340SUB R12,mem,#512 ; sheila
 3350LDRB R1,[R12,#&C] ; PCR
 3360LDRB R2,[mem,#ifr]
 3370AND R13,R1,#%1110
 3380TEQ R13,   #%0010
 3390TEQNE R13, #%0110
 3400BICEQ R2,R2,#%11
 3410BICNE R2,R2,#%10
 3420STRB R2,[mem,#ifr]
 3430
 3440LDRB R0,[R12,#&4F]
 3450MOV PC,R14
 3460
 3470.ldrb4F
 3480
 3490SUB R12,mem,#512 ; sheila
 3500LDRB R0,[R12,#&4F]
 3510MOV PC,R14
 3520
 3530
 3540.readT4low_count
 3550LDRB R1,[mem,#ifr2]
 3560BIC R1,R1, #%00100000
 3570STRB R1,[mem,#ifr2]
 3580LDR R0,[mem,#T4]
 3590LDR R1,[mem,#min]
 3600SUB R0,R0,R1,LSL#15
 3610ADD R0,R0,time,LSL#15
 3620TST R0,#1 << 15 ; ???
 3630SUBNE time,time,#1
 3640MOV R0,R0,LSR#16
 3650AND R0,R0,#&FF
 3660MOV PC,R14
 3670
 3680.readT4high_count
 3690LDR R0,[mem,#T4]
 3700LDR R1,[mem,#min]
 3710SUB R0,R0,R1,LSL#15
 3720ADD R0,R0,time,LSL#15
 3730TST R0,#1 << 15 ; ???
 3740SUBNE time,time,#1
 3750MOV R0,R0,LSR#24
 3760MOV PC,R14
 3770
 3780.readT3low_count
 3790LDR R1,[mem,#ifr2]
 3800BIC R1,R1, #%1 << 6
 3810STRB R1,[mem,#ifr2] ; clear T3 interrupt flag
 3820LDR R0,[mem,#T3]
 3830LDR R1,[mem,#min]
 3840SUB R0,R0,R1,LSL#15
 3850ADD R0,R0,time,LSL#15
 3860TST R0,#1 << 15 ; ???
 3870SUBNE time,time,#1
 3880MOV R0,R0,LSR#16
 3890AND R0,R0,#&FF
 3900MOV PC,R14
 3910
 3920.readT3high_count
 3930LDR R0,[mem,#T3]
 3940LDR R1,[mem,#min]
 3950SUB R0,R0,R1,LSL#15
 3960ADD R0,R0,time,LSL#15
 3970TST R0,#1 << 15 ; ???
 3980SUBNE time,time,#1
 3990MOV R0,R0,LSR#24
 4000MOV PC,R14
 4010
 4020.readT3low_latch
 4030LDRB R0,[mem,#T3R+2]
 4040MOV PC,R14
 4050
 4060.readT3high_latch
 4070LDRB R0,[mem,#T3R+3]
 4080MOV PC,R14
 4090
 4100.ACRtemp
 4110EQUD 0
 4120
 4130.writeACR2
 4140;MOV R0,#0
 4150;STRB R0,[mem,#T3mode]
 4160SUB R0,mem,#512
 4170LDRB R1,[R0,#&60]
 4180ORR R1,R1,#&80
 4190STRB R1,[R0,#&60]
 4200;MOV R0,#1
 4210;STRB R0,ACRtemp
 4220MOV PC,R14
 4230
 4240.writeT3low_latch
 4250STRB R0,[mem,#T3R+2]
 4260MOV PC,R14
 4270
 4280.writeT3high_count
 4290STRB R0,[mem,#T3R+3]
 4300LDR R0,[mem,#T3R]
 4310ADD R0,R0,#2 << 16
 4320
 4330CMP R0,time,LSL#15 ; fix Exile's speech
 4340
 4350BHI skip_T3adjust
 4360LDRB R2,[mem,#ier2]
 4370
 4380TST R2,#%01000000
 4390MOVNE time,R0,LSR#15
 4400
 4410.skip_T3adjust
 4420LDR R1,[mem,#min]
 4430ADD R0,R0,R1,LSL#15
 4440SUB R0,R0,time,LSL#15
 4450STR R0,[mem,#T3]
 4460LDRB R1,[mem,#ifr2]
 4470BIC R1,R1, #%1 << 6
 4480STRB R1,[mem,#ifr2] ; clear T3 interrupt flag
 4490;SUB R0,R0,#&D
 4500SUB R0,mem,#512 ; sheila
 4510
 4520
 4530LDRB R1,[R0,#&6B]
 4540EOR R1,R1,#1<<7
 4550ANDS R1,R1,#&C0
 4560LDREQB R1,[R0,#&60]
 4570BICEQ R1,R1,#&80
 4580STREQB R1,[R0,#&60]
 4590
 4600LDRB R12,[mem,#crt_regs+9]
 4610CMP R12,#3
 4620MOVEQ PC,R14 ; fortress fudge
 4630
 4640MOV R0,#1 : STRB R0,[mem,#T3mode]
 4650MOV PC,R14
 4660
 4670.writeT3high_latch
 4680STRB R0,[mem,#T3R+3]
 4690MOV PC,R14
 4700
 4710.writeT4low_latch
 4720STRB R0,[mem,#T4R+2]
 4730MOV PC,R14
 4740
 4750.writeT4high_count
 4760LDRB R1,[mem,#T4R+2]
 4770ADD R1,R1,R0,LSL#8
 4780MOV R1,R1,LSL#16
 4790LDR R0,[mem,#min]
 4800ADD R1,R1,R0,LSL#15
 4810SUB R1,R1,time,LSL#15
 4820;ADD R1,R1,#2 << 16
 4830ADD R1,R1,#1 << 16
 4840STR R1,[mem,#T4]
 4850LDRB R1,[mem,#ifr2]
 4860BICS R1,R1, #%001 << 5
 4870STRB R1,[mem,#ifr2]
 4880MOV R0,#1 : STRB R0,[mem,#T4mode]
 4890MOV PC,R14
 4900
 4910.readT2low_count
 4920LDRB R1,[mem,#ifr]
 4930BIC R1,R1, #%101 << 5
 4940STRB R1,[mem,#ifr] ; clear T2 interrupt flag
 4950LDR R0,[mem,#T2]
 4960LDR R1,[mem,#min]
 4970SUB R0,R0,R1,LSL#15
 4980ADD R0,R0,time,LSL#15
 4990TST R0,#1 << 15 ; ???
 5000SUBNE time,time,#1
 5010MOV R0,R0,LSR#16
 5020AND R0,R0,#&FF
 5030MOV PC,R14
 5040
 5050.readT2high_count
 5060LDR R0,[mem,#T2]
 5070LDR R1,[mem,#min]
 5080SUB R0,R0,R1,LSL#15
 5090ADD R0,R0,time,LSL#15
 5100TST R0,#1 << 15 ; ???
 5110SUBNE time,time,#1
 5120MOV R0,R0,LSR#24
 5130MOV PC,R14
 5140
 5150.readT1low_count
 5160LDRB R1,[mem,#ifr]
 5170BIC R1,R1, #%1 << 6
 5180STRB R1,[mem,#ifr] ; clear T1 interrupt flag
 5190LDR R0,[mem,#T1]
 5200LDR R1,[mem,#min]
 5210SUB R0,R0,R1,LSL#15
 5220ADD R0,R0,time,LSL#15
 5230TST R0,#1 << 15 ; ???
 5240SUBNE time,time,#1
 5250MOV R0,R0,LSR#16
 5260AND R0,R0,#&FF
 5270MOV PC,R14
 5280
 5290.readT1high_count
 5300LDR R0,[mem,#T1]
 5310LDR R1,[mem,#min]
 5320SUB R0,R0,R1,LSL#15
 5330ADD R0,R0,time,LSL#15
 5340TST R0,#1 << 15 ; ???
 5350SUBNE time,time,#1
 5360MOV R0,R0,LSR#24
 5370MOV PC,R14
 5380
 5390.readT1low_latch
 5400LDRB R0,[mem,#T1R+2]
 5410MOV PC,R14
 5420
 5430.readT1high_latch
 5440LDRB R0,[mem,#T1R+3]
 5450MOV PC,R14
 5460
 5470.writeT1low_latch
 5480STRB R0,[mem,#T1R+2]
 5490MOV PC,R14
 5500
 5510.writeT1high_count
 5520STRB R0,[mem,#T1R+3]
 5530LDR R0,[mem,#T1R]
 5540LDR R1,[mem,#min]
 5550ADD R0,R0,R1,LSL#15
 5560SUB R0,R0,time,LSL#15
 5570ADD R0,R0,#2 << 16
 5580STR R0,[mem,#T1]
 5590LDR R1,[mem,#ifr]
 5600BIC R1,R1, #%1 << 6
 5610STRB R1,[mem,#ifr] ; clear T1 interrupt flag
 5620SUB R0,mem,#512 ; sheila
 5630LDRB R1,[R0,#&40]
 5640BIC R1,R1,#&80
 5650STRB R1,[R0,#&40]
 5660MOV R0,#1 : STRB R0,[mem,#T1mode]
 5670MOV PC,R14
 5680
 5690.writeT1high_latch
 5700STRB R0,[mem,#T1R+3]
 5710MOV PC,R14
 5720
 5730.writeT2low_latch
 5740STRB R0,[mem,#T2R+2]
 5750MOV PC,R14
 5760
 5770.writeT2high_count
 5780LDRB R1,[mem,#T2R+2]
 5790ADD R1,R1,R0,LSL#8
 5800MOV R1,R1,LSL#16
 5810LDR R0,[mem,#min]
 5820ADD R1,R1,R0,LSL#15
 5830SUB R1,R1,time,LSL#15
 5840ADD R1,R1,#2 << 16
 5850STR R1,[mem,#T2]
 5860LDR R1,[mem,#ifr]
 5870BICS R1,R1, #%101 << 5
 5880STRB R1,[mem,#ifr] ; clear T2 interrupt flag
 5890MOV R0,#1 : STRB R0,[mem,#T2mode]
 5900MOV PC,R14
 5910
 5920;.T1mode
 5930;EQUD 1
 5940;.T2mode
 5950;EQUD 0
 5960;.T3mode
 5970;EQUD 1
 5980;.T4mode
 5990;EQUD 0
 6000;.T1
 6010;EQUD &1234 << 16
 6020;.T1R
 6030;EQUD 20000 << 16
 6040;.T2
 6050;EQUD 98765 << 16
 6060;.T2R
 6070;EQUD 255   << 16
 6080;.T3
 6090;EQUD 6777  << 16
 6100;.T3R
 6110;EQUD 6777  << 16
 6120;.T4
 6130;EQUD 7380  << 16
 6140;.T4R
 6150;EQUD 255   << 16
 6160;.screen
 6170;EQUD 432
 6180;.screenR
 6190;EQUD 40000
 6200;.min
 6210;EQUD 200
 6220;.sound_timer
 6230;EQUD 0
 6240
 6250
 6260.keychk
 6270EQUD 0
 6280
 6290.CLI
 6300BIC F,F,#%100
 6310ADD zpc,zpc,#1 << 16
 6320LDRB R0,keychk
 6330CMP R0,#0
 6340BLEQ keyboard
 6350;BL keyboard
 6360FNfetch3(0,2)
 6370
 6380
 6390
 6400.fetch2
 6410
 6420LDR R0,[mem,#min]
 6430SUB R0,R0,time
 6440LDR R1,[mem,#sound_timer]
 6450SUB R1,R1,R0
 6460STR R1,[mem,#sound_timer]
 6470
 6480
 6490MOV R0,#0 : STR R0,keychk
 6500LDR R0,[mem,#min]
 6510SUB R0,R0,time ; ***
 6520LDR R1,[mem,#screen]
 6530SUBS R1,R1,R0
 6540STRGT R1,[mem,#screen]
 6550BLLE vsync
 6560
 6570LDR R0,[mem,#min]
 6580SUB R0,R0,time ; ***
 6590LDR R1,speed
 6600SUBS R1,R1,R0
 6610STRGT R1,speed
 6620BLLE speed_control
 6630
 6640; LDR R0,[mem,#T1mode]
 6650; TST R0,#%1
 6660; BEQ skip_timer1
 6670
 6680LDR R0,[mem,#min]
 6690SUB R0,R0,time ; ***
 6700LDR R1,[mem,#T1]
 6710SUBS R1,R1,R0,LSL#15
 6720STRGT R1,[mem,#T1]
 6730BLLE timer1
 6740.skip_timer1
 6750
 6760; LDR R0,[mem,#T2mode]
 6770; TST R0,#%1
 6780; BEQ skip_timer2
 6790
 6800LDR R0,[mem,#min]
 6810SUB R0,R0,time ; ***
 6820LDR R1,[mem,#T2]
 6830SUBS R1,R1,R0,LSL#15
 6840STR R1,[mem,#T2]
 6850BLLE timer2
 6860.skip_timer2
 6870
 6880; LDR R0,[mem,#T3mode]
 6890; TST R0,#%1
 6900; BEQ skip_timer3
 6910
 6920LDR R0,[mem,#min]
 6930SUB R0,R0,time ; ***
 6940LDR R1,[mem,#T3]
 6950SUBS R1,R1,R0,LSL#15
 6960STRGT R1,[mem,#T3]
 6970BLLE timer3
 6980.skip_timer3
 6990
 7000; LDR R0,[mem,#T4mode]
 7010; TST R0,#%1
 7020; MVNEQ R1,#0 ; -1
 7030; STREQ R1,T4
 7040; BEQ skip_timer4
 7050
 7060LDR R0,[mem,#min]
 7070SUB R0,R0,time ; ***
 7080LDR R1,[mem,#T4]
 7090SUBS R1,R1,R0,LSL#15
 7100STR R1,[mem,#T4]
 7110BLLE timer4
 7120.skip_timer4
 7130
 7140LDR R0,[mem,#min]
 7150SUB R0,R0,time
 7160LDR R1,[mem,#tape_count]
 7170SUBS R1,R1,R0
 7180STRGT R1,[mem,#tape_count]
 7190BLLE tape_fetch
 7200
 7210LDRB R1,[mem,#ifr]
 7220LDRB R2,[mem,#ifr2]
 7230LDRB R12,[mem,#ier] : AND R1,R1,R12
 7240LDRB R12,[mem,#ier2]: AND R2,R2,R12
 7250;BIC R1,R1,#&80 : ;BIC R2,R2,#&80
 7260
 7270
 7280;LDRB R0,[mem,#ier]
 7290;BIC R0,R0,#%1 ; ignore keyboard interrupt
 7300;ANDS R0,R0,R1
 7310;ORRNE R1,R1,#&80
 7320;LDRB R0,[mem,#ier2]
 7330;ANDS R0,R0,R2
 7340;ORRNE R2,R2,#&80
 7350
 7360TST F,#%100
 7370BNE skip_do_interrupt
 7380;TST R1,#&80
 7390;TSTEQ R2,#&80
 7400ANDS R1,R1,#%01111111
 7410ANDEQS R2,R2,#%01111111
 7420BEQ skip_do_interrupt
 7430;CMP R13,#1
 7440;BNE skip_do_interrupt
 7450
 7460.do_interrupt
 7470FNdo_interrupt
 7480
 7490.skip_do_interrupt
 7500
 7510;BL keyboard MOVED TO CLI!!!
 7520BL keys2
 7530.skip_keys
 7540LDR time,[mem,#T1]
 7550MOV time,time,LSR#15
 7560LDR R1,[mem,#screen]
 7570CMP R1,#0 : MOVEQ R1,time
 7580CMP R1,time
 7590MOVLT time,R1
 7600LDRB R1,[mem,#T2mode]
 7610CMP R1,#0
 7620BEQ skipT2
 7630LDR R1,[mem,#T2]
 7640
 7650;RJW
 7660MOVS R1,R1,LSR#15
 7670MOVEQ R1,time
 7680CMP R1,time
 7690MOVLT time,R1
 7700.skipT2
 7710LDR R1,[mem,#T3]
 7720MOVS R1,R1,LSR#15
 7730
 7740; RJW
 7750MOVEQ R1,time
 7760CMP R1,time
 7770MOVLT time,R1
 7780LDRB R1,[mem,#T4mode]
 7790CMP R1,#0
 7800BEQ skipT4
 7810LDR R1,[mem,#T4]
 7820
 7830; RJW
 7840MOVS R1,R1,LSR#15
 7850MOVEQ R1,time
 7860CMP R1,time
 7870MOVLT time,R1
 7880.skipT4
 7890;CMP time,#0 : ;MOVEQ time,#1
 7900SUB time,time,#4
 7910STR time,[mem,#min]
 7920FNfetch2
 7930
 7940.interrupt
 7950
 7960TST F,#%100
 7970MOVNE PC,R14
 7980
 7990LDRB R1,[mem,#ifr]
 8000LDRB R2,[mem,#ifr2]
 8010LDRB R12,[mem,#ier] : AND R1,R1,R12
 8020LDRB R12,[mem,#ier2]: AND R2,R2,R12
 8030
 8040ANDS R1,R1,#%01111111
 8050ANDEQS R2,R2,#%01111111
 8060MOVEQ PC,R14
 8070
 8080FNdo_interrupt
 8090
 8100MOV PC,R14
 8110
 8120.F10temp
 8130EQUD 0
 8140
 8150.F10
 8160SWI "6502_Getkdata"
 8170STR R14,F10temp
 8180MOV R0,#255
 8190STRB R0,[mem,#lastmode]
 8200BL updatescreen
 8210BL force_update_pal
 8211BL cursor
 8220LDR PC,F10temp
 8230
 8240;.fetch3
 8250.keys2
 8260;SWI "6502_Checkkdata"
 8270LDR R0,[mem,#key_addr]
 8280LDRB R0,[R0,#-4]
 8290
 8300
 8310CMP R0,#&1F ; Insert
 8320MOVEQ R1,#1
 8330STREQ R1,trace2
 8340CMP R0,#10 ; F10
 8350BEQ F10
 8360CMP R0,#11 ; F11
 8370CMPNE R0,#12 ; F12
 8380CMPNE R0,#15 ; break
 8390BEQ raw_exit2
 8400MOV PC,R14
 8410
 8420.keyboard
 8430MOV R0,#1 : STR R0,keychk
 8440
 8450
 8460;SWI "6502_Checkkdata"
 8470LDR R0,[mem,#key_addr]
 8480LDRB R0,[R0,#-4]
 8490CMP R0,#&FF : MOVEQ PC,R14
 8500
 8510
 8520SWI "6502_Getkdata"
 8530;CMP R0,#&FF : ;MOVEQ PC,R14
 8540CMP R0,#&1F ; Insert
 8550MOVEQ R1,#1
 8560STREQ R1,trace2
 8570CMP R0,#10 ; F10
 8580BEQ F10
 8590CMP R0,#15
 8600CMPNE R0,#12
 8610CMPNE R0,#11 ; F11
 8620BEQ raw_exit
 8630
 8640;CMP R0,#0 ; escape
 8650;LDREQB R0,[mem,#&FF]
 8660;ORREQ R0,R0,#&80
 8670;STREQB R0,[mem,#&FF]
 8680LDRB R0,[R1,R0]
 8690CMP R0,#&FF
 8700;BEQ not_keyboard
 8710MOVEQ PC,R14
 8720
 8730;B not_keyboard
 8740CMP R0,#10 ; shift, ctrl
 8750MOVLT PC,R14
 8760LDRB R1,[mem,#ifr]
 8770ORR R1,R1,#%1 ; interrupt is from keyboard
 8780STRB R1,[mem,#ifr]
 8790LDRB R0,[mem,#ier]
 8800TST R0,#%1
 8810MOVEQ PC,R14
 8820FNdo_interrupt
 8830MOV PC,R14
 8840
 8850
 8860;.no_interrupt
 8870;LDRB R0,trace2
 8880;CMP R0,#0
 8890;BEQ notrace2
 8900;FNshowregs
 8910;.notrace2
 8920;FNfetch2
 8930
 8940.define_cursor
 8950MOV R1,#0 : STRB R1,cursor_state
 8960.define_cursor2
 8970LDRB R1,cursor_state
 8980CMP R1,#0:MOVNE PC,R14
 8990
 9000LDRB R1,[mem,#crt_regs+10] ; cursor start
 9010
 9020EOR R12,R1,#%100000
 9030TST R12,#%1100000
 9040BEQ blank_cursor
 9050
 9060LDRB R2,[mem,#crt_regs+11] ; cursor end
 9070AND R1,R1,#31
 9080AND R2,R2,#31
 9090
 9100SUBS R12,R2,R1
 9110BLT blank_cursor
 9120
 9130
 9140LDRB R12,[mem,#fe20]
 9150EOR R12,R12,#%100000
 9160
 9170TST R12,#%1000
 9180MOVEQ R13,#2 ; mode 5
 9190MOVNE R13,#1
 9200
 9210MOV R0,#1
 9220MOV R0,R0,LSL R13
 9230TSTEQ R12,#%100000
 9240MOVEQ R0,#8 ; mode 2
 9250MOVEQ R13,#3
 9260STRB R0,cursor_width
 9270
 9280TST R12,#%10 ; teletext
 9290MVNNE R12,#7
 9300MOVEQ R12,#1
 9310
 9320ADD R2,R2,R12
 9330STRB R2,cursor_height
 9340
 9350;MOV R0,#1
 9360;MOV R0,R0,LSL R13
 9370;STRB R0,cursor_width
 9380
 9390
 9400ADR R0,cursor_data
 9410SUB R0,R0,R1,LSL R13
 9420SUB R0,R0,R12,LSL R13
 9430STR R0,cursor_block+6
 9440
 9450MOV R0,#21
 9460ADR R1,cursor_block
 9470SWI "OS_Word"
 9480MOVS PC,R14
 9490
 9500.blank_cursor
 9510MOV R1,#1 : STRB R1,cursor_state
 9520.blank_cursor2
 9530
 9540ADR R1,cursor_block
 9550ADR R0,blank_data
 9560STR R0,cursor_block+6
 9570MOV R0,#21
 9580SWI "OS_Word"
 9590MOV PC,R14
 9600
 9610.cursor_state
 9620EQUD 0
 9630
 9640.cursor_flash
 9650EQUD 0
 9660.flash_state
 9670EQUD 0
 9680
 9690;.not_keyboard
 9700EQUW 0
 9710.cursor_block
 9720EQUB 0
 9730EQUB 2 ; shape number
 9740.cursor_width
 9750EQUB 2 ; width in bytes
 9760.cursor_height
 9770EQUB 9 ; height in pixels
 9780EQUB 0
 9790EQUB 0
 9800EQUD 0 ; address of data
 9810
 9820
 9830ALIGN
 9840.blank_data
 9850EQUD 0
 9860EQUD 0
 9870EQUD 0
 9880EQUD 0
 9890EQUD 0
 9900EQUD 0
 9910EQUD 0
 9920EQUD 0
 9930EQUD 0
 9940EQUD 0
 9950EQUD 0
 9960EQUD 0
 9970EQUD 0
 9980EQUD 0
 9990EQUD 0
10000EQUD 0
10010EQUD 0
10020EQUD 0
10030EQUD 0
10040EQUD 0
10050EQUD 0
10060EQUD 0
10070EQUD 0
10080EQUD 0
10090EQUD 0
10100EQUD 0
10110EQUD 0
10120EQUD 0
10130EQUD 0
10140EQUD 0
10150EQUD 0
10160EQUD 0
10170.cursor_data
10180EQUD &FFFFFFFF
10190EQUD &FFFFFFFF
10200EQUD &FFFFFFFF
10210EQUD &FFFFFFFF
10220EQUD &FFFFFFFF
10230EQUD &FFFFFFFF
10240EQUD &FFFFFFFF
10250EQUD &FFFFFFFF
10260EQUD &FFFFFFFF
10270EQUD &FFFFFFFF
10280EQUD &FFFFFFFF
10290EQUD &FFFFFFFF
10300EQUD &FFFFFFFF
10310EQUD &FFFFFFFF
10320EQUD &FFFFFFFF
10330EQUD &FFFFFFFF
10340EQUD &FFFFFFFF
10350EQUD &FFFFFFFF
10360EQUD &FFFFFFFF
10370EQUD &FFFFFFFF
10380EQUD &FFFFFFFF
10390EQUD &FFFFFFFF
10400EQUD &FFFFFFFF
10410EQUD &FFFFFFFF
10420EQUD &FFFFFFFF
10430EQUD &FFFFFFFF
10440EQUD &FFFFFFFF
10450EQUD &FFFFFFFF
10460EQUD &FFFFFFFF
10470EQUD &FFFFFFFF
10480EQUD &FFFFFFFF
10490EQUD &FFFFFFFF
10500
10510.cursor7
10520
10530LDRB R0,[mem,#crt_regs+14]
10540LDRB R1,[mem,#crt_regs+15]
10550ADD R0,R1,R0,LSL#8
10560
10570LDRB R1,[mem,#crt_regs+12] : ;AND R1,R1,#%1111
10580LDRB R2,[mem,#crt_regs+13]
10590ADD R2,R2,R1,LSL#8
10600SUBS R0,R0,R2
10610MOVMI R0,#0
10620
10630;LDRB R12,[mem,#crt_regs+1] ; horiz. chars
10640;MOV R12,#40
10650
10660;FNdivmod(0,12,1,2,13) ; R0 = R0 MOD R12
10670                      ; R2 = R0 DIV R12
10680;RSB R2,R2,#25
10690;MOV R2,R2,LSL#5
10700;ADD R2,R2,R2,LSR#2
10710;MOV R0,R0,LSL#5
10720;ADD R0,R0,R2,LSL#16
10730; We know that R0<1000
10740; R0 = R0 MOD 40
10750; R2 = R0 DIV 40
10760;FNdivmod(0,12,1,2,13)
10770MOV R2,#((25<<5)+(25<<3))<<16
10780CMP R0,#640
10790SUBGE R0,R0,#640
10800SUBGE R2,R2,#((1<<9)+(1<<7))<<16
10810CMP R0,#320
10820SUBGE R0,R0,#320
10830SUBGE R2,R2,#((1<<8)+(1<<6))<<16
10840CMP R0,#160
10850SUBGE R0,R0,#160
10860SUBGE R2,R2,#((1<<7)+(1<<5))<<16
10870CMP R0,#80
10880SUBGE R0,R0,#80
10890SUBGE R2,R2,#((1<<6)+(1<<4))<<16
10900CMP R0,#40
10910SUBGE R0,R0,#40
10920SUBGE R2,R2,#((1<<5)+(1<<3))<<16
10930
10940
10950ADD R0,R2,R0,LSL#5
10960STR R0,osword21_5_block1
10970ADR R1,osword21_5_block
10980MOV R0,#21
10990SWI "OS_Word" ; set pointer position
11000;MOV PC,R14
11001B define_cursor2
11010
11020;B cursor_cont
11030
11040.padding_to_align_osword
11050EQUB 0 : EQUB 0 : EQUB 0
11060.osword21_5_block
11070EQUB 5
11080.osword21_5_block1
11090EQUD 0
11100
11110EOR R0,R0,#&20 : ADD R0,R0,#&74 : AND R0,R0,#&FF
11120
11130
11140.cursor
11150MOV R0,#0 : STR R0,[mem,#cursor_tamper]
11160
11170\LDRB R1,[mem,#cursor_on]
11180\CMP R1,#0:\MOVNE PC,R14
11190TST F,#1 << 10 ; cursor on?
11200MOVEQ PC,R14
11210
11220LDRB R0,[mem,#fe20]
11230
11240TST R0,#%11100000
11250BEQ blank_cursor
11260
11270TST R0,#%10 ; teletext
11280BNE cursor7
11290
11300LDRB R0,[mem,#crt_regs+14]
11310LDRB R1,[mem,#crt_regs+15]
11320ADD R0,R1,R0,LSL#8
11330
11340LDRB R1,[mem,#crt_regs+12] : AND R1,R1,#%1111
11350LDRB R2,[mem,#crt_regs+13]
11360ADD R2,R2,R1,LSL#8
11370SUBS R0,R0,R2
11380MOVMI R0,#0
11390
11400.cursor_cont
11410
11420LDRB R12,[mem,#crt_regs+1] ; horiz. chars
11430
11440CMP R12,#0 : MOVEQ PC,R14
11450
11460;FNdivmod(0,12,1,2,13) ; R0 = R0 MOD R12
11470                      ; R2 = R0 DIV R12
11480;RSB R2,R2,#32
11490;MOV R2,R2,LSL#5
11500
11510; We know R0<32*R12
11520; R0 = R0 MOD R12
11530; R2 = R0 DIV R12
11540MOV R2,#32<<21
11550CMP R0,R12,LSL#4
11560SUBGE R0,R0,R12,LSL#4
11570SUBGE R2,R2,#16<<21
11580CMP R0,R12,LSL#3
11590SUBGE R0,R0,R12,LSL#3
11600SUBGE R2,R2,#8<<21
11610CMP R0,R12,LSL#2
11620SUBGE R0,R0,R12,LSL#2
11630SUBGE R2,R2,#4<<21
11640CMP R0,R12,LSL#1
11650SUBGE R0,R0,R12,LSL#1
11660SUBGE R2,R2,#2<<21
11670CMP R0,R12
11680SUBGE R0,R0,R12
11690SUBGE R2,R2,#1<<21
11700
11710
11720LDRB R1,[mem,#fe20] : TST R1,#%10000 : MOVEQ R0,R0,LSL#1
11730;MOV R0,R0,LSL#4         ;   these two surplus
11740;ADD R0,R0,R2,LSL#16     ;
11750ADD R0,R2,R0,LSL#4       ;   this line missing in 1.30
11760STR R0,osword21_5_block1
11770ADR R1,osword21_5_block
11780MOV R0,#21
11790SWI "OS_Word" ; set pointer position
11800;MOV PC,R14
11801B define_cursor2
11810
11820.mono_time
11830EQUD 0
11840.speed
11850EQUD 0
11860
11870.speed_control
11880LDR R0,[mem,#speedR]
11890ADD R1,R1,R0
11900STR R1,speed
11910
11920LDR R1,mono_time
11930.mono_loop
11940SWI "OS_ReadMonotonicTime"
11950MOV R0,R0,LSR#1
11960CMP R0,R1
11970BEQ mono_loop
11980STR R0,mono_time
11990
12000MOV PC,R14
12010
12020
12030
12040.vsync
12050STR R14,vsyncR14
12060
12070
12080LDR R0,[mem,#screenR]
12090ADD R1,R1,R0
12100STR R1,[mem,#screen]
12110
12120LDRB R0,ldrb40_tamper
12130CMP R0,#1 : BLEQ ldrb40_update
12140
12150;BL trace_on
12160
12170;LDRB R1,screen_count
12180;SUBS R1,R1,#1
12190;LDRMIB R1,screen_count+4
12200;STRB R1,screen_count
12210LDR R0,[mem,#tamper]
12220CMP R0,#0
12230
12240BEQ no_tamper
12250MOV R0,#0
12260STR R0,[mem,#tamper]
12270;SWI "6502_UpdateScreen"
12280BL recalc_wrap
12290BL updatescreen
12300TST F,#1 << 10 ; cursor on?
12310;BLNE define_cursor
12320BLNE cursor
12330.no_tamper
12340LDRB R0,[mem,#pal_tamper]
12350CMP R0,#0
12360BLNE update_pal
12370
12380
12390LDR R0,[mem,#cursor_tamper]
12400CMP R0,#0
12410BLNE cursor
12420
12430
12440
12450SUB R0,mem,#512 ; sheila
12460LDRB R1,[R0,#&20]
12470TST R1,#%10 ; teletext?
12480;SWINE "6502_UpdateScreen"
12490BLNE updatescreen
12500ADD R0,R0,#&4D
12510;LDRB R1,[R0]
12520;LDRB R2,[R0,#1]
12530LDRB R1,[mem,#ifr]
12540LDRB R2,[mem,#ier]
12550ORR R1,R1,#%10 ; interrupt is from vsync
12560TST R2,#%10 ; is vsync interrupt enabled?
12570ORRNE R1,R1,#&80
12580;STRB R1,[R0]
12590STRB R1,[mem,#ifr]
12600;BEQ no_interrupt
12610;FNfetch2
12620
12630;TST F,#1 << 9
12640;BEQ skip_exact
12650
12660;LDR R1,mono_time
12670;.mono_loop
12680;SWI "OS_ReadMonotonicTime"
12690;MOV R0,R0,LSR#1
12700;CMP R0,R1
12710;BEQ mono_loop
12720;STR R0,mono_time
12730
12740.skip_exact
12750
12760TST F,#1 << 10 ; cursor on?
12770LDREQ PC,vsyncR14
12780
12790LDRB R1,cursor_state
12800CMP R1,#0
12810LDRNE PC,vsyncR14
12820
12830LDRB R1,[mem,#crt_regs+10]
12840TST R1,#%1000000 ; cursor blinking enabled?
12850LDREQ PC,vsyncR14
12860
12870LDRB R0,cursor_flash
12880SUBS R0,R0,#1
12890STRB R0,cursor_flash
12900LDRGE PC,vsyncR14
12910
12920TST R1,#%100000
12930MOVEQ R0,#15
12940MOVNE R0,#31
12950STRB R0,cursor_flash
12960
12970LDR R14,vsyncR14
12980LDRB R0,flash_state
12990EOR R0,R0,#1
13000STRB R0,flash_state
13010CMP R0,#0 : BEQ blank_cursor2
13020B define_cursor2
13030
13040;LDR PC,vsyncR14
13050.vsyncR14
13060EQUD 0
13070
13080.ldrb40
13090
13100LDRB R2,ldrb40_value
13110BIC R0,R0,#%110000
13120ORR R0,R0,R2
13130MOV R1,#1
13140STRB R1,ldrb40_tamper
13150MOV PC,R14
13160
13170.ldrb40_update
13180MOV R0,#%110000
13190STRB R0,ldrb40_value
13200MOV R0,#0
13210STRB R0,ldrb40_tamper
13220TST F,#1<<9 ; joystick
13230MOVEQ PC,R14
13240SWI &63F40 ; "XJoystick_Read"
13250BVS ldrb40_mouse
13260AND R1,R0,#&10000
13270MOV R0,#1
13280SWI &63F40 ; "XJoystick_Read"
13290MOVVS R0,#0
13300AND R0,R0,#&10000
13310ADD R1,R1,R0,LSL#1
13320AND R1,R1,#&30000
13330MOV R1,R1,LSR#(16-4)
13340
13350EOR R2,R1,#%110000
13360
13370;ADD R13,mem,#&FE00
13380;LDRB R0,[R13,#&40]
13390;BIC R0,R0,#%110000
13400STRB R2,ldrb40_value
13410;ORR R0,R0,R2
13420
13430MOV PC,R14
13440
13450.ldrb40_tamper
13460EQUD 0
13470.ldrb40_value
13480EQUD 0
13490
13500.ldrb40_mouse
13510MOV R13,R3
13520SWI "OS_Mouse"
13530MOV R3,R13
13540
13550MOV R2,R2,LSR#1
13560RSB R2,R2,#3
13570MOV R2,R2,LSL#4
13580;ADD R13,mem,#&FE00
13590;LDRB R0,[R13,#&40]
13600;BIC R0,R0,#%110000
13610STRB R2,ldrb40_value
13620;ORR R0,R0,R2
13630
13640MOV PC,R14
13650
13660.write_ADC_status
13670
13680TST F,#1<<9 ; joystick
13690MOVEQ PC,R14
13700
13710
13720BIC R12,R0,#%11110000
13730
13740MOV R0,R0,LSR#1
13750AND R0,R0,#%1 ; joystick number
13760SWI &63F40 ; "XJoystick_Read"
13770BVS write_ADC_mouse
13780
13790
13800TST R12,#%1  ; left/right or up/down
13810MOVEQ R0,R0,LSR#8
13820ADD R0,R0,#127
13830AND R0,R0,#&FF
13840RSBEQ R0,R0,#255
13850
13860MOV R1,R0,LSR#2
13870AND R1,R1,#%110000
13880ORR R12,R12,R1
13890ORR R12,R12,#%1000000
13900
13910SUB R1,mem,#512 ; sheila
13920
13930STRB R12,[R1,#&C0]
13940STRB R12,[R1,#&18]
13950
13960STRB R0,[R1,#&C1]
13970STRB R0,[R1,#&19]
13980MOV R12,#0
13990STRB R12,[R1,#&C2]
14000STRB R12,[R1,#&1A]
14010
14020MOV PC,R14
14030
14040.write_ADC_mouse
14050
14060MOV R13,R3
14070SWI "OS_Mouse"
14080MOV R3,R13
14090
14100MOV R2,#1024
14110SUB R2,R2,#1
14120SUBS R0,R2,R0
14130MOVLT R0,#0
14140
14150;CMP R0,#1024
14160;MOVGE R0,#1024
14170;SUBGE R0,R0,#1
14180
14190TST R12,#%1  ; left/right or up/down
14200MOVNE R0,R1
14210
14220MOV R1,R0,LSL#4
14230AND R1,R1,#%110000
14240ORR R12,R12,R1
14250ORR R12,R12,#%1000000
14260
14270SUB R1,mem,#512 ; sheila
14280
14290STRB R12,[R1,#&C0]
14300STRB R12,[R1,#&18]
14310
14320MOV R12,R0,LSR#2
14330STRB R12,[R1,#&C1]
14340STRB R12,[R1,#&19]
14350MOV R12,R0,LSL#6
14360STRB R12,[R1,#&C2]
14370STRB R12,[R1,#&1A]
14380
14390MOV PC,R14
14400
14410
14420.timer1
14430LDR R0,[mem,#T1R]
14440ADD R1,R1,R0
14450ADD R1,R1,#2 << 16
14460STR R1,[mem,#T1]
14470
14480SUB R0,mem,#512 ; sheila
14490
14500LDRB R1,[R0,#&4B] ; FE4B
14510TST R1,#%01000000
14520MOVEQ R2,#0
14530STREQB R2,[mem,#T1mode]
14540
14550TST R1,#%10000000
14560LDRNEB R2,[R0,#&40] ; FE40
14570EORNE R2,R2,#&80
14580STRNEB R2,[R0,#&40] ; FE40
14590
14600LDRB R1,[mem,#ifr]
14610ORR R1,R1,#%01000000 ; interrupt is from timer 1
14620STRB R1,[mem,#ifr]
14630
14640MOV PC,R14
14650
14660.timer2
14670LDRB R0,[mem,#T2mode]
14680CMP R0,#0
14690MOVEQ PC,R14
14700MOV R0,#0
14710STRB R0,[mem,#T2mode]
14720
14730LDRB R1,[mem,#ifr]
14740ORR R1,R1,#%00100000
14750STRB R1,[mem,#ifr]
14760
14770MOV PC,R14
14780
14790.timer3
14800LDR R0,[mem,#T3R]
14810ADD R1,R1,R0
14820STR R1,[mem,#T3]
14830
14840SUB R0,mem,#512 ; sheila
14850
14860LDRB R1,[R0,#&6B]
14870TST R1,#%01000000
14880BNE T3mode_skip2
14890
14900LDRB R1,[mem,#T3mode]
14910CMP R1,#1
14920;SWINE &100+ASC"1"
14930;SWIEQ &100+ASC"0"
14940BNE T3mode_skip
14950
14960.T3mode_skip2
14970LDRB R1,[mem,#ifr2]
14980ORR R1,R1,#%01000000
14990STRB R1,[mem,#ifr2]
15000
15010
15020;LDRB R1,[R0,#&6B] ; FE6B
15030;TST R1,#%01000000
15040;MOVEQ R2,#0
15050;MOVNE R2,#1
15060;STREQB R2,[mem,#T3mode]
15070;SWIEQ &100+ASC"z"
15080
15090.T3mode_skip
15100MOV R2,#0
15110STRB R2,[mem,#T3mode]
15120
15130;LDRB R1,[R0,#&6B] ; FE6B
15140;TST R1,#%10000000
15150;LDRB R2,[R0,#&60] ; FE60
15160;EORNE R2,R2,#&80
15170;ORREQ R2,R2,#&80
15180;STRB R2,[R0,#&60] ; FE60
15190
15200LDRB R1,[R0,#&6B] ; FE6B
15210EOR R1,R1,#&C0
15220TST R1,#&C0
15230LDRB R2,[R0,#&60] ; FE60
15240EOREQ R2,R2,#&80
15250ORRNE R2,R2,#&80
15260STRB R2,[R0,#&60] ; FE60
15270
15280
15290MOV PC,R14
15300.return_addr
15310EQUD 0
15320
15330.roms_addr
15340EQUD 0
15350
15360.timer4
15370LDRB R1,[mem,#T4mode]
15380CMP R1,#0
15390MOVEQ PC,R14
15400MOV R0,#0
15410STRB R0,[mem,#T4mode]
15420
15430
15440LDRB R1,[mem,#ifr2]
15450ORR R1,R1,#%00100000 ; interrupt is from timer 4
15460STRB R1,[mem,#ifr2]
15470
15480MOV PC,R14
15490
15500
15510;.trace2
15520;EQUD 0
15530
15540.reset
15550;MOV R1,#1
15560;STR R1,trace
15570MOV R0,#15 : MOV R1,#0 : SWI "OS_Byte"
15580MOV R0,#&10000
15590SUB R0,R0,#4
15600LDR R0,[mem,R0]
15610MOV zpc,R0,LSL#16
15620BIC F,F,#%1000 ; clear Decimal mode
15630ORR F,F,#%100  ; set interrupt disable
15640FNfetch2
15650
15660
15670.exit
15680MOV R0,#0
15690.raw_exit2
15700SWI "6502_Getkdata"
15710.raw_exit
15720STR time,[mem,#min]
15730STR A,[mem,#a]
15740STR X,[mem,#x]
15750STR Y,[mem,#y]
15760STR SP,[mem,#sp]
15770STR F,[mem,#f]
15780STR zpc,[mem,#pc_store]
15790LDR R13,return_addr
15800LDMFD R13!,{R1-R12,PC}
15810;MOV PC,R14
15820
15830
15840.fe08_read
15850EQUB 0
15860.fe08_write
15870EQUB 0
15880.fe09
15890EQUB 0
15900;.fe10
15910;EQUB 0
15920ALIGN
15930.tbuffer
15940EQUD 0
15950
15960.tape_fetch
15970;LDR R0,[mem,#tapeR]
15980;MOV R0,#&3400 ; 2000000/(1200/8)~=1200 baud
15990MOV R0,#&6000
16000ADDS R1,R1,R0
16010MOVLE R1,#&6000
16020
16030LDRB R0,[mem,#fe10]
16040TST R0,#&80 ; is *Motor on?
16050MOVEQ R1,#&100000
16060
16070STR R1,[mem,#tape_count]
16080
16090MOVEQ PC,R14
16100
16110LDRB R1,[mem,#tape_handle]
16120CMP R1,#0
16130MOVEQ PC,R14
16140
16150.tape_get
16160SWI "XOS_BGet"
16170MOVVS R1,#0
16180STRVSB R1,[mem,#tape_handle]
16190MOVVS PC,R14
16200
16210BCC tape_skip10
16220
16230MOV R0,#1
16240MOV R2,#0
16250SWI "XOS_Args" ; rewind tape to start
16260MOVVS R1,#0
16270STRVSB R1,[mem,#tape_handle]
16280MOVVS PC,R14
16290
16300.tape_skip10
16310
16320CMP R0,#&FF
16330BNE not_FF
16340SWIEQ "XOS_BGet"
16350CMP R0,#&FF
16360BEQ not_FF
16370
16380LDRB R1,fe08_read
16390BIC R1,R1,#%100
16400AND R0,R0,#%100
16410ORR R1,R1,R0
16420;ORR R1,R1,#&80 ; ??
16430STRB R1,fe08_read
16440
16450CMP R0,#0
16460
16470;MOV R0,#&10000
16480;STR R0,[mem,#tape_count]
16490
16500;B do_interrupt
16510MOVEQ PC,R14
16520
16530ORR R1,R1,#&80
16540STRB R1,fe08_read
16550B do_interrupt
16560
16570.not_FF
16580STRB R0,fe09
16590
16600
16610LDRB R0,fe08_write
16620TST R0,#&80 ; receive interrupt enable bit
16630MOVEQ PC,R14
16640
16650LDRB R0,fe08_read
16660ORR R0,R0,#&81
16670STRB R0,fe08_read
16680
16690B do_interrupt
16700;MOV PC,R14
16710
16720.readFE08
16730;LDRB R1,tbuffer
16740;LDRB R0,[mem,#&C2]
16750;CMP R0,#1
16760LDRB R0,fe08_read
16770;CMPEQ R1,#ASC"*"
16780;ORREQ R0,R0,#%100
16790;BICNE R0,R0,#%100
16800MOV PC,R14
16810
16820.readFE09
16830LDRB R0,fe08_read
16840BIC R0,R0,#&81
16850STRB R0,fe08_read
16860LDRB R0,fe09
16870MOV PC,R14
16880
16890.writeFE08
16900STRB R0,fe08_write
16910MOV PC,R14
16920
16930.writeFE09
16940MOV PC,R14
16950
16960.readFE10
16970MOV R0,#&A2
16980MOV PC,R14
16990
17000.writeFE10
17010STRB R0,[mem,#fe10]
17020MOV PC,R14
17030
17040.dummy
17050MOV PC,R14
17060
17070;.ROMSEL
17080;EQUD 0
17090
17100;.rom ; ROM paged in
17110;EQUD 0
17120
17130;.ROMRAM ; which banks are RAM?
17140;EQUD 0 : ;EQUD 0 : ;EQUD 0 : ;EQUD 0
17150
17160;.ACCCON
17170;EQUD 0
17180
17190
17200.swap_main_shadow
17210
17220STMFD mem,{R0-R2,R4-R11,R14}
17230ADD R14,mem,#&3000
17240SUB R13,mem,#&10000
17250MOV R12,#&5000
17260.swap_loop
17270LDMIA R14,{R0-R2,R4-R5}
17280;LDR R0,[R14,#0]
17290;LDR R1,[R14,#4]
17300;LDR R2,[R14,#8]
17310;LDR R4,[R14,#12]
17320;LDR R5,[R14,#16]
17330
17340LDMIA R13,{R6-R10}
17350;LDR R6,[R13,#0]
17360;LDR R7,[R13,#4]
17370;LDR R8,[R13,#8]
17380;LDR R9,[R13,#12]
17390;LDR R10,[R13,#16]
17400
17410STMIA R13!,{R0-R2,R4-R5}
17420;STR R0,[R13,#0]
17430;STR R1,[R13,#4]
17440;STR R2,[R13,#8]
17450;STR R4,[R13,#12]
17460;STR R5,[R13,#16]
17470
17480STMIA R14!,{R6-R10}
17490;STR R6,[R14,#0]
17500;STR R7,[R14,#4]
17510;STR R8,[R14,#8]
17520;STR R9,[R14,#12]
17530;STR R10,[R14,#16]
17540
17550;ADD R14,R14,#20
17560;ADD R13,R13,#20
17570SUBS R12,R12,#20
17580BHI swap_loop
17590
17600LDMEA mem,{R0-R2,R4-R11,R14}
17610B swap_exit
17620
17630
17640.strb_rom_ret2 ; between C000 AND E000
17650LDRB R2,[mem,#ACCCON]
17660TST R2,#%1000
17670;SUBNE R13,mem,#(&C000+&A000)
17680;STRNEB R0,[R13,R1]
17690STRNEB R0,[mem,R1]
17700MOV PC,R14
17710
17720.acccon
17730]
17740IF NOTmaster THEN [OPTp:MOV PC,R14:]
17750[OPTp
17760LDRB R1,[mem,#ACCCON]
17770STRB R0,[mem,#ACCCON]
17780EOR R2,R0,R1
17790
17800TST R2,#%1 ; main/shadow to be displayed
17810STRNEB R12,[mem,#tamper]
17820
17830;MOV PC,R14
17840
17850;TST R2,#%100 ; main/shadow to be paged in
17860;BNE swap_main_shadow
17870.swap_exit
17880
17890ANDS R2,R2,#%1000 ; filing system RAM
17900MOVEQ PC,R14
17910
17920STMFD mem,{R0-R2,R4-R9,R14}
17930
17940TST R1,#%1000
17950BEQ os_out
17960;BNE os_in
17970
17980.os_in ; RJW
17990LDR R12,roms_addr
18000ADD R12,R12,#16*16*1024 ; 17th ROM = OS3.2
18010MOV R13,#&2000
18020SUB R2,mem,#&B000
18030ADD mem,mem,#&C000
18040.os_in_loop
18050LDMIA mem, {R0,R1,R4,R5,R6,R7,R8,R9}
18060STMIA R2!, {R0,R1,R4,R5,R6,R7,R8,R9}
18070LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R9}
18080STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R9}
18090SUBS R13,R13,#4*8
18100BGT os_in_loop
18110SUB mem,mem,#&E000
18120LDMEA mem,{R0-R2,R4-R9,PC}
18130
18140.os_out ; RJW
18150MOV R13,#&2000
18160SUB R2,mem,#&B000
18170ADD mem,mem,#&C000
18180.os_out_loop
18190LDMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R9}
18200STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R9}
18210SUBS R13,R13,#4*8
18220BGT os_out_loop
18230SUB mem,mem,#&E000
18240LDMEA mem,{R0-R2,R4-R9,PC}
18250
18260.strb8000      ; greater than 8000
18270]
18280IF master THEN
18290[OPTp
18300CMP R1,#&E000
18310BGE strb_rom_ret
18320CMP R1,#&C000
18330BGE strb_rom_ret2
18340CMP R1,#&9000
18350BGE strb_rom
18360]
18370ELSE
18380[OPTp
18390CMP R1,#&C000
18400BGE strb_rom_ret
18410]
18420ENDIF
18430[OPTp
18440
18450LDRB R12,[mem,#rom]
18460TST R12,#&80
18470BEQ strb_rom
18480
18490;SUB R13,mem,#(&8000+&B000) ; 4k Private RAM
18500;STRB R0,[R13,R1]
18510STRB R0,[mem,R1]
18520MOV PC,R14
18530
18540.strb_rom
18550SUB R12,mem,#-ROMRAM
18560LDRB R13,[mem,#rom]
18570LDRB R13,[R12,R13]
18580CMP R13,#0
18590STREQB R0,[mem,R1]
18600MOV PC,R14
18610;B strb_rom_ret
18620
18630.romsel
18640LDRB R12,[mem,#ROMSEL_ON]
18650CMP R12,#0
18660MOVNE PC,R14
18670
18680LDRB R1,[mem,#rom]
18690
18700]
18710IF NOTmaster THEN
18720[OPTp
18730AND R0,R0,#%1111
18740CMP R0,R1 : MOVEQ PC,R14 ; WAR (used to) need this commented out!?!
18750B romsel_next
18760]
18770ENDIF
18780[OPTp
18790
18800AND R0,R0,#%10001111
18810
18820CMP R0,R1 : MOVEQ PC,R14 ; WAR (used to) need this commented out!?!
18830
18840EOR R2,R0,R1
18850ANDS R2,R2,#%10000000 ; private RAM bit
18860BEQ romsel_next ; bit not changed
18870
18880TST R1,#%10000000
18890BNE private_out ; map out private RAM
18900BEQ private_in  ; map in private RAM
18910
18920
18930
18940.romsel_next
18950LDR R12,roms_addr
18960AND R2,R0,#&F ; socket number
18970LDRB R1,[mem,#rom]
18980AND R1,R1,#&F
18990STRB R0,[mem,#rom]
19000SUB R13,mem,#-ROMRAM
19010LDRB R13,[R13,R1]
19020CMP R13,#0 ; is the bank being paged out RAM?
19030BNE romsel2
19040
19050TST R0,#%10000000 ; private RAM mapped in?
19060MOVEQ R13,#&8000
19070MOVNE R13,#&9000
19080AND R0,R0,#&F
19090
19100ADD R2,R12,R1,LSL#14
19110ADDNE R2,R2,#&1000
19120ADD R12,R12,R0,LSL#14 ; R0*16*1024
19130ADDNE R12,R12,#&1000
19140ADR R1,romsel_loop_temp
19150STMIA R1,{R0,R4-R8,R14}
19160ADD mem,mem,R13
19170RSB R13,R13,#&C000
19180.romsel_loop
19190LDMIA mem,{R0,R1,R4,R5,R6,R7,R8,R14}
19200STMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R14}
19210LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R14}
19220STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
19230SUBS R13,R13,#4*8
19240BNE romsel_loop
19250SUB mem,mem,#&C000
19260ADR R1,romsel_loop_temp
19270LDMIA R1,{R0,R4-R8,PC}
19280.romsel_loop_temp
19290EQUD 0:EQUD 0:EQUD 0:EQUD 0
19300EQUD 0:EQUD 0:EQUD 0:EQUD 0
19310
19320.romsel_empty
19330ADD R13,R2,R2,LSL#8
19340ADD R13,R13,R13,LSL#16
19350ADD R0,mem,#&8000
19360STR R13,[R0,#0]
19370STR R13,[R0,#4]
19380STR R13,[R0,#8]
19390STR R13,[R0,#12]
19400MOV PC,R14
19410
19420.romsel2
19430
19440SUB R13,mem,#-ROMRAM
19450LDRB R13,[R13,R2]
19460CMP R13,#2 ; is the bank being paged out empty?
19470BEQ romsel_empty
19480
19490TST R0,#%10000000 ; private RAM mapped in?
19500MOVEQ R13,#&8000
19510MOVNE R13,#&9000
19520AND R0,R0,#&F
19530
19540
19550ADD R12,R12,R0,LSL#14 ; R0*16*1024
19560ADDNE R12,R12,#&1000
19570ADD mem,mem,R13
19580RSB R13,R13,#&C000
19590ADR R1,romsel_loop_temp
19600STMIA R1,{R0,R4-R8,R14}
19610.romsel2_loop
19620LDMIA  R12 !,{R0,R1,R4,R5,R6,R7,R8,R14}
19630STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
19640;LDR R1,[R12],#4
19650;STR R1,[mem],#4 ; store byte from ROM in main memory map
19660SUBS R13,R13,#4*8
19670BNE romsel2_loop
19680SUB mem,mem,#&C000
19690ADR R1,romsel_loop_temp
19700LDMIA R1,{R0,R4-R8,PC}
19710
19720.private_in ; RJW
19730STMFD mem,{R0-R2,R4-R10}
19740LDR R2,roms_addr
19750AND R1,R1,#&F
19760ADD R2,R2,R1,LSL#14 ; R1*16*1024
19770SUB R12,mem,#&B000-&8000
19780MOV R13,#&1000
19790ADD mem,mem,#&8000
19800.priv_in_loop
19810LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
19820STMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
19830LDMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
19840STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
19850SUBS R13,13,#4*8
19860BNE priv_in_loop
19870SUB mem,mem,#&9000
19880LDMEA mem,{R0-R2,R4-R10}
19890B romsel_next
19900
19910.private_out ; RJW
19920STMFD mem,{R0-R2,R4-R10}
19930LDR R2,roms_addr
19940LDRB R1,[mem,#rom]
19950AND R1,R0,#&F
19960ADD R2,R2,R1,LSL#14 ; R1*16*1024
19970SUB R12,mem,#&B000-&8000
19980MOV R13,#&1000
19990ADD mem,mem,#&8000
20000.priv_out_loop
20010LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
20020STMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
20030LDMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
20040STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
20050SUBS R13,R13,#4*8
20060BNE priv_out_loop
20070SUB mem,mem,#&9000
20080LDMEA mem,{R0-R2,R4-R10}
20090B romsel_next
20100
20110.crt
20120SUB R1,mem,#512 ; sheila
20130LDRB R12,[R1,#0]
20140AND R12,R12,#%11111
20150CMP R12,#17
20160MOVHI PC,R14
20170;ADR R13,crt_regs
20180SUB R13,mem,#-crt_regs
20190LDRB R1,[R13,R12]
20200CMP R1,R0 : MOVEQ PC,R14 ; no change
20210STRB R0,[R13,R12]
20220ADD PC,PC,R12,LSL#2
20230MOV R0,R0 ; padding for pipeline
20240MOV PC,R14                    ; reg 0
20250B new_horizvert               ; reg 1
20260MOV PC,R14                    ; reg 2
20270MOV PC,R14                    ; reg 3
20280MOV PC,R14                    ; reg 4
20290MOV PC,R14                    ; reg 5
20300B new_horizvert               ; reg 6
20310MOV PC,R14                    ; reg 7
20320MOV PC,R14                    ; reg 8
20330MOV PC,R14                    ; reg 9
20340B cursor_start                ; reg 10
20350B cursor_end                  ; reg 11
20360B crt12                       ; reg 12
20370B crt13                       ; reg 13
20380B cursor_changed              ; reg 14
20390B cursor_changed              ; reg 15
20400MOV PC,R14                    ; reg 16
20410MOV PC,R14                    ; reg 17
20420
20430
20440
20450CMP R12,#14 : CMPNE R12,#15 : MOVEQ R0,#1 : STREQ R0,[mem,#cursor_tamper]
20460CMP R12,#10 : BEQ cursor_start
20470CMP R12,#11 : BEQ cursor_end
20480CMP R12,#12 : BEQ crt12 : .crt12cont
20490CMP R12,#12
20500CMPNE R12,#13
20510CMPNE R12,#1
20520CMPNE R12,#6
20530MOVNE PC,R14
20540MOV R13,#1
20550STR R13,[mem,#tamper]
20560CMP R12,#1
20570CMPNE R12,#6
20580BEQ new_horizvert
20590;CMP R12,#13
20600;SWIEQ "6502_UpdateScreen"
20610CMP R12,#12
20620CMPNE R12,#13
20630MOVNE PC,R14
20640B recalc_wrap
20650
20660.cursor_changed
20670MOV R0,#1
20680STRB R0,[mem,#cursor_tamper]
20690MOV PC,R14
20700
20710.new_horizvert
20720MOV R13,#1
20730STR R13,[mem,#tamper]
20740SUB R12,R1,R0
20750CMP R12,#2
20760MOVLE PC,R14
20770MOV R12,#255 : STRB R12,[mem,#lastmode]
20780MOV PC,R14
20790
20800.crt12
20810CMP R0,#%0110
20820MOVLT R0,#%110
20830STRB R0,[R13,R12]
20840;B crt12cont
20850.crt13
20860
20870TST F,#1<<11
20880;]
20890;IF NOT HWScroll THEN
20900;[OPTp
20910MOVEQ R13,#1
20920STREQ R13,[mem,#tamper]   ; don't want this for HW Scroll
20930BEQ recalc_wrap
20940;]
20950;ELSE
20960
20970;[OPTp
20980; HW scroll
20990LDR R12,updatepixelV
21000ADR R13,dohardware_scroll
21010CMP R12,R13
21020STRNE R13,updatepixelV
21030
21040B recalc_wrap
21050
21060.dohardware_scroll
21070; Here we do the hardware scrolling
21080STR R14,yuk
21090BL dohardwarescroll
21100BL poke_updatepixelV
21110LDR R14,yuk
21120; Then we go do the update as normal.
21130;LDR PC,dohardware_scrollV ; old contents of upV
21140LDR PC,updatepixelV
21150
21160.yuk
21170EQUD 0
21180
21190;.dohardware_scrollV
21200;EQUD 0
21210
21220.dohardwarescroll
21230FNdohardwarescroll
21240
21250;.screenwidthchanged
21260;MOV PC,R14
21270
21280.hardware_scroll_stack_space
21290]:P%+=256:O%+=256:[OPT p
21300.hardware_scroll_stack_space_top
21310]
21320
21330ENDIF
21340
21350[OPTp
21360; end of hardware scroll stuff
21370
21380.cursor_start
21390\LDRB R1,[mem,#cursor_on]
21400\CMP R1,#0:\MOVNE PC,R14
21410TST F,#1 << 10 ; cursor on?
21420MOVEQ PC,R14
21430LDRB R1,[mem,#crt_regs+11]
21440AND R1,R1,#%11111
21450AND R2,R0,#%11111
21460CMP R2,R1
21470BGT blank_cursor
21480
21490EOR R0,R0,#%100000
21500TST R0,#%1100000
21510BEQ blank_cursor
21520B define_cursor
21530
21540.cursor_end
21550\LDRB R1,[mem,#cursor_on]
21560\CMP R1,#0:\MOVNE PC,R14
21570TST F,#1 << 10 ; cursor on?
21580MOVEQ PC,R14
21590AND R1,R0,#%11111
21600LDRB R2,[mem,#crt_regs+10]
21610AND R2,R2,#%11111
21620CMP R2,R1
21630BGT blank_cursor
21640B define_cursor
21650;MOV PC,R14
21660
21670.link
21680EQUD 0
21690
21700.caps_lock
21710AND R0,R0,#%1000
21720MOV R1,R0,LSL#1
21730MOV R0,#202
21740MOV R2,#%11101111
21750SWI "OS_Byte"
21760MOV R0,#118
21770SWI "OS_Byte"
21780MOV PC,R14
21790
21800.latch
21810;ORR R0,R0,#%110000
21820;STRB R0,[mem,R1] ; no fire buttons
21830ANDS R2,R0,#%111
21840
21850;RJW
21860;CMP R2,#0
21870TSTEQ F,#1<<12 ; sound on?
21880BEQ sound_latch
21890CMP R2,#3
21900BEQ latch_keyb
21910CMP R2,#6
21920BEQ caps_lock
21930LDRB R12,[mem,#crt_regs+19]
21940CMP R2,#4
21950ANDEQ R13,R0,#%1000
21960BICEQ R12,R12,#%1
21970ORREQ R12,R12,R13,LSR#3
21980CMP R2,#5
21990ANDEQ R13,R0,#%1000
22000BICEQ R12,R12,#%10
22010ORREQ R12,R12,R13,LSR#2
22020STRB R12,[mem,#crt_regs+19]
22030
22040.recalc_wrap
22050LDRB R12,[mem,#crt_regs+19]
22060ANDS R12,R12,#%11
22070MOVNE R13,#&5800
22080MOVEQ R13,#&4000
22090CMP R12,#%10
22100MOVEQ R13,#&3000
22110CMP R12,#%01
22120MOVEQ R13,#&6000
22130
22140LDRB R12,[mem,#crt_regs+13]
22150LDRB R2,[mem,#crt_regs+12]
22160AND R2,R2,#%1111
22170ADD R12,R12,R2,LSL#8
22180
22190CMP R13,R12,LSL#3
22200MOVGT R13,R12,LSL#3
22210
22220SUB R12,mem,#512 ; sheila
22230LDRB R12,[R12,#&20]
22240
22250TST R12,#%10 ; teletext?
22260MOVNE R13,#&7C00
22270
22280;AND F,F,#&FF
22290BIC F,F,#&FF000000
22300BIC F,F,#&FF0000
22310ORR F,F,R13,LSL#16
22320;STR R13,wrap_addr
22330MOV PC,R14
22340
22350
22360.latch_keyb
22370
22380AND R2,R0,#%1000
22390STRB R2,key_write_ena
22400CMP R2,#%1000
22410MOVNE PC,R14
22420MOV R2,#0
22430STRB R2,column_counter
22440MOV PC,R14
22450
22460.printer_write
22470SWI &102
22480SWI &101
22490SWI "OS_WriteC"
22500MOV R0,#152 : MOV R1,#3
22510SWI "OS_Byte" ; check printer buffer
22520BCS printer_on
22530MOV R0,#21 : MOV R1,#3
22540SWI "OS_Byte" ; flush buffer
22550.printer_on
22560SWI &103
22570LDRB R0,[mem,#ifr2]
22580ORR R0,R0,#%10
22590STRB R0,[mem,#ifr2]
22600MOV PC,R14
22610
22620.regB_41
22630
22640SUB R12,mem,#512 ; sheila
22650LDRB R1,[R12,#&C] ; PCR
22660LDRB R2,[mem,#ifr]
22670AND R13,R1,#%1110
22680TEQ R13,   #%0010
22690TEQNE R13, #%0110
22700BICEQ R2,R2,#%11
22710BICNE R2,R2,#%10
22720STRB R2,[mem,#ifr]
22730.regB_4F
22740SUB R12,mem,#512 ; sheila
22750
22760STRB R0,sound_data            ; keep a copy in sound_data
22770
22780LDRB R2,[R12,#&43] ; R2=data direction
22790AND R1,R0,R2
22800;MOV R1,R0
22810ANDS R0,R1,#%01110000 : MOVNE R0,#0 : STRNEB R0,column_counter
22820;EOR R1,R1,#&FF
22830;SWI "6502_Getkeyaddr"
22840LDR R0,[mem,#key_addr]
22850LDRB R2,[R0] ; shift pressed?
22860CMP R2,#0
22870ADDNE R0,R0,#256
22880
22890AND R2,R1,#&F
22900CMP R2,#&F ; column counter disabled?
22910BEQ disable_column_counter
22920LDRB R2,column_counter
22930CMP R2,#&F
22940BEQ check_row
22950
22960;BIC R1,R1,#&80
22970LDRB R0,[R0,R1]
22980;EOR R0,R0,R1,LSR#7 ; ************
22990;EOR R0,R0,#1
23000;CMP R0,#0 : ;MOVEQ R1,#0
23010ORR R0,R1,R0,LSL#7
23020;MOV R0,R1,LSL#7
23030;MOV R0,R1
23040;ADD R0,R1,R1,LSL#7
23050
23060;MOV R0,#&81
23070;MOV R2,#&FF
23080;SWI "OS_Byte"
23090;CMP R0,#98 ; space
23100;CMP R1,#&FF
23110;MOVEQ R0,#&80
23120;MOVNE R0,#0
23130STRB R0,[R12,#&4F]
23140STRB R0,[R12,#&41]
23150MOV PC,R14
23160
23170.column_counter
23180EQUD 0
23190.key_write_ena
23200EQUD 0
23210
23220.disable_column_counter
23230STRB R2,column_counter
23240.check_row
23250AND R1,R1,#%00001111
23260MOV R13,#0
23270;SWI "6502_Getkeyaddr"
23280LDR R0,[mem,#key_addr]
23290LDRB R2,[R0] ; shift pressed?
23300CMP R2,#0
23310ADDNE R0,R0,#256
23320
23330.row_loop
23340LDRB R2,[R0,R1]
23350ORR R13,R13,R2
23360ADD R1,R1,#%10000
23370TST R1,#%1110000
23380BNE row_loop
23390ANDS R12,R13,#%1
23400LDRNEB R13,[mem,#ifr]
23410ORRNE R13,R13,R12
23420STRNEB R13,[mem,#ifr]
23430SUB R0,mem,#512 ; sheila
23440LDRB R1,[R0,#&4F]
23450BIC R1,R1,#&80
23460ORR R1,R1,R12,LSL#7
23470STRB R1,[R0,#&4F]
23480STRB R1,[R0,#&41]
23490MOV PC,R14
23500
23510.interrupt_flags
23520LDRB R2,[mem,#ifr]
23530BIC R2,R2,R0
23540STRB R2,[mem,#ifr]
23550MOV PC,R14
23560
23570
23580.interrupt_enable
23590LDRB R1,[mem,#ier]
23600TST R0,#&80
23610BICEQ R1,R1,R0
23620ORRNE R1,R1,R0
23630ORR R1,R1,#&80 ; &81
23640STRB R1,[mem,#ier]
23650;TST time,#%1
23660;SUBNE time,time,#1
23670MOV PC,R14
23680
23690.interrupt_flags2
23700LDRB R2,[mem,#ifr2]
23710BIC R2,R2,R0
23720STRB R2,[mem,#ifr2]
23730MOV PC,R14
23740
23750
23760.interrupt_enable2
23770LDRB R1,[mem,#ier2]
23780TST R0,#&80
23790BICEQ R1,R1,R0
23800ORRNE R1,R1,R0
23810ORR R1,R1,#&80 ; &81
23820STRB R1,[mem,#ier2]
23830MOV PC,R14
23840
23850.flash
23860;LDRB R1,elite
23870;CMP R1,#0
23880;BNE skip_fe20
23890TST F,#1 << 8 ; patch on?
23900BNE skip_fe20
23910LDRB R12,[mem,#fe20]
23920AND R1,R12,#%11100
23930AND R2,R0, #%11100
23940CMP R1,R2
23950MOVNE R2,#1
23960STRNEB R2,[mem,#tamper]
23970
23980AND R1,R12,#%11100000
23990AND R2,R0, #%11100000
24000CMP R1,R2
24010MOVNE R2,#1
24020STRNEB R2,[mem,#cursor_tamper]
24030
24040.skip_fe20
24050LDRB R12,[mem,#fe20]
24060STRB R0,[mem,#fe20]
24070TST R0,#%1
24080MOVEQ R0,#9
24090MOVNE R0,#10
24100MOV R1,#0
24110SWI "OS_Byte"
24120B poke_updatepixelV ; includes MOV PC,R14
24130;MOV PC,R14
24140
24150;.fe20
24160;EQUD 0
24170
24180;.crt_regs
24190;EQUD 0
24200;EQUD 0
24210;EQUD 0
24220;EQUD 0
24230;EQUD 0
24240
24250; include the sound code here contained in the Sound library
24260FNsound_latch
24270
24280
24290FNscreen
24300
24310]
24320IF HWScroll THEN [OPTp:FNhardwarescroll:]
24330[OPTp
24340
24350
24360.FFpage
24370;SUB time,time,#1
24380MOV PC,R14
24390
24400.update_pal
24410LDRB R1,[mem,#Palette]
24420CMP R1,#0
24430MOVNE PC,R14
24440.force_update_pal
24450STR R14,[mem,#Palette+4]
24460SUB R13,mem,#-pal_regs
24470LDRB R0,[R13,#0]
24480BL do_pal
24490LDRB R0,[R13,#1]
24500BL do_pal
24510LDRB R0,[R13,#2]
24520BL do_pal
24530LDRB R0,[R13,#3]
24540BL do_pal
24550LDRB R0,[R13,#4]
24560BL do_pal
24570LDRB R0,[R13,#5]
24580BL do_pal
24590LDRB R0,[R13,#6]
24600BL do_pal
24610LDRB R0,[R13,#7]
24620BL do_pal
24630LDRB R0,[R13,#8]
24640BL do_pal
24650LDRB R0,[R13,#9]
24660BL do_pal
24670LDRB R0,[R13,#10]
24680BL do_pal
24690LDRB R0,[R13,#11]
24700BL do_pal
24710LDRB R0,[R13,#12]
24720BL do_pal
24730LDRB R0,[R13,#13]
24740BL do_pal
24750LDRB R0,[R13,#14]
24760BL do_pal
24770LDRB R0,[R13,#15]
24780BL do_pal
24790MOV R14,#0:STRB R14,[mem,#pal_tamper]
24800LDR PC,[mem,#Palette+4]
24810
24820
24830.palette
24840SUB R12,mem,#-pal_regs
24850STRB R0,[R12,R0,LSR#4]
24860
24870LDRB R1,[mem,#Palette]
24880CMP R1,#0
24890MOVNE PC,R14
24900
24910MOV R1,#255:STRB R1,[mem,#pal_tamper]
24920MOV PC,R14
24930
24940.do_pal
24950LDRB R1,[mem,#fe20]
24960TST R1,#%10
24970MOVNE PC,R14 ; mode 7
24980AND R1,R1,#%11100
24990CMP R1,#%11100 : BEQ twocolpal
25000CMP R1,#%01000 : BEQ twocolpal
25010CMP R1,#%11000 : BEQ fourcolpal
25020CMP R1,#%00100 : BEQ fourcolpal
25030
25040
25050.sixteencolpal
25060AND R1,R0,#&F
25070MOV R0,R0,LSR#4
25080EOR R1,R1,#7
25090
25100;CMP R0,#0 ; for Exile
25110;SWINE ETC ETC
25120
25130SWI &100+19
25140SWI "OS_WriteC"
25150MOV R0,R1
25160SWI "OS_WriteC"
25170SWI &100
25180SWI &100
25190SWI &100
25200MOV PC,R14
25210
25220.twocolpal
25230AND R1,R0,#&F
25240MOV R0,R0,LSR#7
25250EOR R1,R1,#7
25260CMP R0,#1
25270MOVEQ R0,#3 ; mode 4 fix
25280SWI &100+19
25290SWI "OS_WriteC"
25300MOV R0,R1
25310SWI "OS_WriteC"
25320SWI &100
25330SWI &100
25340SWI &100
25350MOV PC,R14
25360
25370.fourcolpal
25380AND R1,R0,#&F
25390AND R0,R0,  #%10100000
25400TST R0,     #%10000000
25410ORRNE R0,R0,#%01000000
25420BICNE R0,R0,#%10000000
25430MOV R0,R0,LSR#5
25440EOR R1,R1,#7
25450SWI &100+19
25460SWI "OS_WriteC"
25470MOV R0,R1
25480SWI "OS_WriteC"
25490SWI &100
25500SWI &100
25510SWI &100
25520MOV PC,R14
25530
25540.osbput
25550MOV R0,A,LSR#24
25560MOV R1,Y,LSR#24
25570SWI "XOS_BPut"
25580BVS swi_error
25590B opcode(&60) ; rts
25600
25610.osbget
25620MOV R0,A,LSR#24
25630MOV R1,Y,LSR#24
25640SWI "XOS_BGet"
25650BVS swi_error
25660MOV A,R0,LSL#24
25670FNsetupC
25680B opcode(&60) ; rts
25690
25700.swi_error
25710ADD mem,mem,#&100
25720ADD mem,mem,#&002
25730MOV R1,#0 ; BRK
25740STRB R1,[mem,#-2]
25750LDRB R1,[R0] ; error no
25760STRB R1,[mem,#-1]
25770ADD R0,R0,#4
25780MOV R14,#0
25790
25800.swi_err_loop
25810LDRB R13,[R0,R14]
25820CMP R13,#0
25830;MOV R13,#ASC"A"
25840STRB R13,[mem,R14]
25850ADD R14,R14,#1
25860MOVEQ R14,#255
25870CMP R14,#253
25880BLE swi_err_loop
25890
25900MOV zpc,#&100 << 16
25910SUB mem,mem,#&100
25920SUB mem,mem,#&002
25930FNfetch2
25940
25950.return_ROMSEL
25960LDRB R0,[mem,#rom]
25970MOV PC,R14
25980
25990.return_ACCCON
26000LDRB R0,[mem,#ACCCON]
26010MOV PC,R14
26020
26030
26040
26050.strb_rom_ret
26060
26070.sheila
26080SUBS R2,R1,#&FE00
26090MOVLT PC,R14
26100SUBS R2,R2,#&100
26110MOVGE PC,R14
26120;BGE FFpage
26130
26140TST time,#%1
26150SUBNE time,time,#1
26160SUBEQ time,time,#2
26170
26180;STRB R0,[mem,R1]
26190SUB R2,mem,#&10000:STRB R0,[R2,R1]
26200
26210AND R2,R1,#&FF
26220;ADR R1,sheila_writetab
26230LDR PC,[PC,R2,LSL#2]
26240EQUD 0 ; padding for pipeline
26250.sheila_writetab
26260; 0-F
26270EQUD dummy
26280EQUD crt
26290EQUD dummy
26300EQUD crt
26310EQUD dummy
26320EQUD crt
26330EQUD dummy
26340EQUD crt
26350EQUD writeFE08
26360EQUD writeFE09
26370FNequd(6,dummy)
26380; 10-17
26390EQUD writeFE10
26400FNequd(7,dummy)
26410; 18-1F
26420EQUD write_ADC_status
26430FNequd(7,dummy)
26440; 20-2F
26450EQUD flash
26460EQUD palette
26470FNequd(14,dummy)
26480; 30-3F
26490FNequd(4,romsel)
26500EQUD acccon
26510FNequd(11,romsel)
26520; 40-4F
26530EQUD latch
26540EQUD regB_41
26550EQUD dummy
26560EQUD dummy
26570EQUD writeT1low_latch
26580EQUD writeT1high_count
26590EQUD writeT1low_latch
26600EQUD writeT1high_latch
26610EQUD writeT2low_latch
26620EQUD writeT2high_count
26630EQUD dummy
26640EQUD dummy
26650EQUD dummy
26660EQUD interrupt_flags
26670EQUD interrupt_enable
26680EQUD regB_4F
26690; 50-5F
26700EQUD latch
26710EQUD regB_41
26720EQUD dummy
26730EQUD dummy
26740EQUD writeT1low_latch
26750EQUD writeT1high_count
26760EQUD writeT1low_latch
26770EQUD writeT1high_latch
26780EQUD writeT2low_latch
26790EQUD writeT2high_count
26800EQUD dummy
26810EQUD dummy
26820EQUD dummy
26830EQUD interrupt_flags
26840EQUD interrupt_enable
26850EQUD regB_4F
26860; 60-7F
26870]
26880IF IO_Podule% THEN
26890[OPTp
26900FNequd(&20,IOpodule_Write)
26910]
26920ELSE
26930[OPTp
26940EQUD dummy
26950EQUD printer_write
26960EQUD dummy
26970EQUD dummy
26980EQUD writeT3low_latch
26990EQUD writeT3high_count
27000EQUD writeT3low_latch
27010EQUD writeT3high_latch
27020EQUD writeT4low_latch
27030EQUD writeT4high_count
27040EQUD dummy
27050EQUD writeACR2
27060EQUD dummy
27070EQUD interrupt_flags2
27080EQUD interrupt_enable2
27090EQUD printer_write
27100
27110EQUD dummy
27120EQUD printer_write
27130EQUD dummy
27140EQUD dummy
27150EQUD writeT3low_latch
27160EQUD writeT3high_count
27170EQUD writeT3low_latch
27180EQUD writeT3high_latch
27190EQUD writeT4low_latch
27200EQUD writeT4high_count
27210EQUD dummy
27220EQUD dummy
27230EQUD dummy
27240EQUD interrupt_flags2
27250EQUD interrupt_enable2
27260EQUD printer_write
27270]
27280ENDIF
27290
27300[OPTp
27310; 80-BF
27320FNequd(&40,dummy)
27330; C0-CF
27340EQUD write_ADC_status
27350FNequd(15,dummy)
27360; D0-FF
27370FNequd(&30,dummy)
27380
27390.ldrb_FFpage
27400;SUB time,time,#1
27410MOV PC,R14
27420
27430.ldrb8000 ; greater than 8000
27440
27450CMP R1,#&FE00
27460BHS ldrb_sheila
27470
27480LDRB R0,[mem,R1]
27490MOV PC,R14
27500
27510
27520;MOV R1,R1,LSR#16
27530]
27540IF master THEN
27550[OPTp
27560.ldrb16_8000 ; greater than 8000
27570
27580CMP R1,#&FE00 << 16
27590BHS ldrb16_sheila
27600
27610LDRB R0,[mem,R1,LSR#16]
27620MOV PC,R14
27630
27640.ldrb16_screen
27650CMP R1,#&8000 << 16
27660BHS ldrb16_8000
27670
27680LDRB R12,[mem,#ACCCON]
27690
27700CMP zpc,#&C000 << 16
27710MOVLT R13,R12,LSR#1
27720MOVGE R13,R12
27730CMP zpc,#&E000 << 16
27740MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
27750                       ; we must look at
27760
27770TST R13,#%10
27780SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
27790;MOVEQ R13,mem
27800LDRNEB R0,[R13,R1,LSR#16]
27810LDREQB R0,[mem,R1,LSR#16]
27820MOV PC,R14
27830]
27840ELSE
27850[OPTp
27860.ldrb16_screen
27870CMP R1,#&FE00 << 16
27880BHS ldrb16_sheila
27890
27900LDRB R0,[mem,R1,LSR#16]
27910MOV PC,R14
27920]
27930ENDIF
27940
27950IF master THEN
27960[OPTp
27970
27980.ldrb_screen
27990.ldrb3000 ; greater than 3000
28000
28010CMP R1,#&8000
28020BHS ldrb8000
28030
28040LDRB R12,[mem,#ACCCON]
28050
28060CMP zpc,#&C000 << 16
28070MOVLT R13,R12,LSR#1
28080MOVGE R13,R12
28090CMP zpc,#&E000 << 16
28100MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
28110                       ; we must look at
28120
28130TST R13,#%10
28140SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
28150;MOVEQ R13,mem
28160LDRNEB R0,[R13,R1]
28170LDREQB R0,[mem,R1]
28180MOV PC,R14
28190]
28200ELSE
28210[OPTp
28220.ldrb_screen
28230.ldrb3000 ; greater than 3000
28240CMP R1,#&FE00
28250BHS ldrb_sheila
28260LDRB R0,[mem,R1]
28270MOV PC,R14
28280]
28290ENDIF
28300
28310[OPTp
28320
28330.ldrb16_sheila
28340MOV R12,R1,LSR#16
28350B ldrb_sheila2
28360
28370.ldrb_sheila
28380MOV R12,R1
28390
28400.ldrb_sheila2
28410LDRB R0,[mem,R12]
28420
28430SUBS R2,R12,#&FE00
28440MOVLT PC,R14
28450SUBS R2,R2,#&100
28460BGE ldrb_FFpage
28470
28480SUB R2,mem,#&10000:LDRB R0,[R2,R12]
28490
28500SUB time,time,#1
28510
28520AND R2,R12,#&FF
28530;ADR R1,sheila_readtab
28540LDR PC,[PC,R2,LSL#2]
28550EQUD 0 ; padding for pipeline
28560.sheila_readtab
28570; 0-F
28580FNequd(8,dummy)
28590EQUD readFE08
28600EQUD readFE09
28610FNequd(6,dummy)
28620; 10-2F
28630EQUD readFE10
28640FNequd(&1F,dummy)
28650; 30-3F
28660FNequd(4,return_ROMSEL)
28670FNequd(4,return_ACCCON)
28680FNequd(8,dummy)
28690; 40-4F
28700EQUD ldrb40
28710EQUD ldrb41
28720EQUD dummy
28730EQUD dummy
28740EQUD readT1low_count
28750EQUD readT1high_count
28760EQUD readT1low_latch
28770EQUD readT1high_latch
28780EQUD readT2low_count
28790EQUD readT2high_count
28800EQUD dummy
28810EQUD dummy
28820EQUD dummy
28830EQUD read_ifr
28840EQUD read_ier
28850EQUD ldrb4F
28860; 50-5F
28870EQUD ldrb40
28880EQUD ldrb41
28890EQUD dummy
28900EQUD dummy
28910EQUD readT1low_count
28920EQUD readT1high_count
28930EQUD readT1low_latch
28940EQUD readT1high_latch
28950EQUD readT2low_count
28960EQUD readT2high_count
28970EQUD dummy
28980EQUD dummy
28990EQUD dummy
29000EQUD read_ifr
29010EQUD read_ier
29020EQUD ldrb4F
29030; 60-6F
29040]
29050IF IO_Podule% THEN
29060[OPTp
29070FNequd(&20,IOpodule_Read)
29080]
29090ELSE
29100[OPTp
29110EQUD dummy
29120EQUD dummy
29130EQUD dummy
29140EQUD dummy
29150EQUD readT3low_count
29160EQUD readT3high_count
29170EQUD readT3low_latch
29180EQUD readT3high_latch
29190EQUD readT4low_count
29200EQUD readT4high_count
29210EQUD dummy
29220EQUD dummy
29230EQUD dummy
29240EQUD read_ifr2
29250EQUD read_ier2
29260EQUD dummy
29270
29280EQUD dummy
29290EQUD dummy
29300EQUD dummy
29310EQUD dummy
29320EQUD readT3low_count
29330EQUD readT3high_count
29340EQUD readT3low_latch
29350EQUD readT3high_latch
29360EQUD readT4low_count
29370EQUD readT4high_count
29380EQUD dummy
29390EQUD dummy
29400EQUD dummy
29410EQUD read_ifr2
29420EQUD read_ier2
29430EQUD dummy
29440]
29450ENDIF
29460
29470[OPTp
29480; 80-FF
29490FNequd(&80,dummy)
29500
29510FNsound_misc
29520
29530.opcode7
29540SWI &100+ASC"O"
29550SWI &100+ASC"p"
29560SWI &100+ASC"7"
29570SWI &100+ASC" "
29580FNprint(zpc)
29590B opcode7
29600
29610FNalign16 ; fit into cache better?
29620
29630FNopcodes
29640
29650.patch_screen
29660MOV PC,R14
29670.patch_pixel
29680MOV PC,R14
29690
29700.end
29710]
29720NEXT
29730OSCLI"Load <6502Em$Dir>.SRC.revtable "+STR$~(code+mode0tab)
29740OSCLI"Load <6502Em$Dir>.SRC.mode1tab "+STR$~(code+mode1tab)
29750OSCLI"Load <6502Em$Dir>.SRC.Hmode2tab "+STR$~(code+mode2tab)
29760OSCLI"Load <6502Em$Dir>.SRC.Hmode4tab "+STR$~(code+mode4tab)
29770OSCLI"Load <6502Em$Dir>.SRC.Hmode5tab "+STR$~(code+mode5tab)
29780
29790ENDPROC
29800
29810DE
29820DEFF
29830
29840
29850DEFFNldrb2(R,S)
29860IF R<>0 OR S<>1 THEN STOP
29870IF master THEN
29880[OPTp
29890;LDRB R,[mem,S]
29900;CMP S,#&FE00
29910;BLHS ldrb_sheila
29920CMP S,#&3000
29930LDRLOB R,[mem,S]
29940BLHS ldrb_screen
29950]
29960ELSE
29970[OPTp
29980LDRB R,[mem,S]
29990CMP S,#&FE00
30000BLHS ldrb_sheila
30010]
30020ENDIF
30030=""
30040
30050DEFFNldrb16(R,S)
30060IF R<>0 OR S<>1 THEN STOP
30070IF master THEN
30080[OPTp
30090;LDRB R,[mem,S,LSR#16]
30100;CMP S,#&FE00 << 16
30110;BLHS ldrb16_sheila
30120CMP S,#&3000 << 16
30130LDRLOB R,[mem,S,LSR#16]
30140BLHS ldrb16_screen
30150]
30160ELSE
30170[OPTp
30180LDRB R,[mem,S,LSR#16]
30190CMP S,#&FE00 << 16
30200BLHS ldrb16_sheila
30210]
30220ENDIF
30230=""
30240
30250DEFFNstrb(R,S)
30260IF R<>0 OR S<>1 THEN ERROR
30270[OPTp
30280CMP S,F,LSR#16 ; wrap_addr
30290;CMP S,#&3000
30300STRLTB R,[mem,S]
30310BLGE strb
30320]
30330=""
30340
30350DEFFNstrb16(R,S)
30360IF R<>0 OR S<>1 THEN ERROR
30370[OPTp
30380;CMP S,#&C000 << 16
30390;STRLOB R,[mem,S,LSR#16]
30400MOV S,S,LSR#16
30410CMP S,F,LSR#16 ; wrap_addr
30420;CMP S,#&3000
30430STRLTB R,[mem,S]
30440BLGE strb ; 16
30450]
30460=""
30470
30480DEFFNshowregs
30490[OPTp
30500FNprint(zpc)
30510FNprint(A)
30520FNprint(X)
30530FNprint(Y)
30540FNprint(SP)
30550FNprint(F)
30560ADD R12,mem,#&DF00
30570LDRB R12,[R12,#&DA]
30580MOV R12,R12,LSL#24
30590FNprint2(12)
30600SWI &10A
30610;SWI "OS_NewLine"
30620]
30630=""
30640
30650DEFFNprint(R)
30660CASE R OF
30670WHEN zpc : A$=FNprint4(R)
30680WHEN F   : [OPTp:MOV R2,F,LSL#24:FNprint2(2):]
30690OTHERWISE
30700A$=FNprint2(R)
30710ENDCASE
30720=""
30730
30740WHEN A   : A$=FNprint2(R)
30750WHEN X   : A$=FNprint2(R)
30760WHEN Y   : A$=FNprint2(R)
30770WHEN SP  : [OPTp:SWI &100+ASC"1":FNprint2(SP):]
30780WHEN F   : A$=FNprintflags
30790ENDCASE
30800=""
30810
30820DEFFNprintflags
30830[OPTp
30840TST F,#%1<<7 : SWIEQ &100+ASC"n" : SWINE &100+ASC"N"
30850TST F,#%1<<6 : SWIEQ &100+ASC"v" : SWINE &100+ASC"V"
30860TST F,#%1<<5 : SWIEQ &100+ASC"0" : SWINE &100+ASC"1"
30870TST F,#%1<<4 : SWIEQ &100+ASC"b" : SWINE &100+ASC"B"
30880TST F,#%1<<3 : SWIEQ &100+ASC"d" : SWINE &100+ASC"D"
30890TST F,#%1<<2 : SWIEQ &100+ASC"i" : SWINE &100+ASC"I"
30900TST F,#%1<<1 : SWIEQ &100+ASC"z" : SWINE &100+ASC"Z"
30910TST F,#%1<<0 : SWIEQ &100+ASC"c" : SWINE &100+ASC"C"
30920SWI &120
30930]
30940=""
30950
30960DEFFNprint2(R)
30970LOCALI%
30980[OPTp
30990MOV R1,R
31000]
31010FORI%=0 TO 1
31020[OPT p
31030MOV R1,R1,ROR#28
31040AND R0,R1,#&F
31050CMP R0,#10
31060ADDGE R0,R0,#7
31070ADD R0,R0,#48
31080SWI "OS_WriteC"
31090]
31100NEXT
31110[OPTp
31120SWI &120
31130]
31140=""
31150
31160DEFFNprint4(R)
31170LOCALI%
31180[OPTp
31190MOV R1,R
31200]
31210FORI%=0 TO 3
31220[OPT p
31230MOV R1,R1,ROR#28
31240AND R0,R1,#&F
31250CMP R0,#10
31260ADDGE R0,R0,#7
31270ADD R0,R0,#48
31280SWI "OS_WriteC"
31290]
31300NEXT
31310[OPTp
31320SWI &120
31330]
31340=""
31350
31360DEFFNprint32(R)
31370LOCALI%
31380[OPTp
31390MOV R1,R
31400]
31410FORI%=0 TO 31
31420[OPT p
31430MOV R1,R1,ROR#28
31440AND R0,R1,#&F
31450CMP R0,#10
31460ADDGE R0,R0,#7
31470ADD R0,R0,#48
31480SWI "OS_WriteC"
31490]
31500NEXT
31510[OPTp
31520SWI &120
31530]
31540=""
31550
31560DEFFNprints(A$)
31570[OPTp
31580SWI "OS_WriteS"
31590EQUS A$
31600EQUB 10
31610EQUB 13
31620EQUB 0
31630ALIGN
31640]
31650=""
31660
31670DEFFNundoc(A%)
31680IF opcode%<>A% THEN STOP
31690[OPTp
31700;TST F,#%1000
31710;SWIEQ &100+ASC"d"
31720;SWINE &100+ASC"D"
31730
31740;SWI &100+ASC(LEFT$(RIGHT$("0"+STR$~A%,2),1))
31750;SWI &100+ASC(RIGHT$(STR$~A%,1))
31760;SWI &100+ASC" "
31770;FNprint(zpc)
31780;SWI &100+ASC" ":;SWI &100+ASC" "
31790
31800;MOV R0,#15 : ;SWI "OS_Byte"
31810;SWI 4
31820]
31830=""
31840
31850DEFFNequd(A%,B%)
31860LOCALI%
31870FORI%=1 TO A%
31880[OPTp
31890EQUD B%
31900]
31910NEXT
31920=""
31930
31940DEFFNdo_interrupt
31950[OPTp
31960MOV R0,zpc,LSR#24
31970FNpush(0)
31980MOV R0,zpc,LSR#16
31990FNpush(0)
32000BIC F,F,#%10000 ; clear BRK flag
32010FNpush(F)
32020ORR F,F,#%100 ; !!!!!!
32030MOV R0,#&FF00 : ADD R0,R0,#&FE
32040LDR zpc,[mem,R0]
32050MOV zpc,zpc,LSL#16
32060]
32070=""
32080
32090DEFFNdivmod(A,B,C,D,E)
32100div%+=1
32110[OPTp
32120MOV C,#1
32130MOV D,#0
32140MOV E,B
32150.divloop1(div%)
32160MOV B,B,LSL#1
32170MOV C,C,LSL#1
32180CMP B,A
32190BLO divloop1(div%)
32200
32210.divloop2(div%)
32220CMP B,A : BLS divjump(div%)
32230CMP B,E : BLS divjump(div%)
32240MOV B,B,LSR#1
32250MOV C,C,LSR#1
32260B divloop2(div%)
32270.divjump(div%)
32280CMP B,A
32290SUBLS A,A,B
32300ADDLS D,D,C
32310CMP B,E
32320BHI divloop2(div%)
32330]
32340=""
32350
32360DEFFNshadow
32370IF master THEN
32380[OPTp
32390LDRB R2,[mem,#ACCCON]
32400;EOR R2,R2,R2,LSR#2
32410TST R2,#%1
32420SUBNE R13,mem,#&13000
32430MOVEQ R13,mem
32440]
32450ELSE
32460[OPTp
32470MOV R13,mem
32480]
32490ENDIF
32500=""
32510DEFPROCclearmem(S%,E%)
32520P%=buffer
32530[OPT2
32540EQUD S% ; memory
32550EQUD E% ; memory+&8000
32560.clear
32570MOV R0,#0
32580LDR R1,buffer
32590LDR R2,buffer+4
32600.loop
32610STR R0,[R1],#4
32620CMP R1,R2
32630BNE loop
32640MOV PC,R14
32650]
32660CALL clear
32670ENDPROC
32680
32690DEFFNfetch2
32700[OPTp
32710LDRB R2,[mem,zpc,LSR#16]
32720ADD PC,table,R2,LSL#8
32730]
32740=""
32750
32760DEFFNfetch3(N%,T%)
32770IF N%<>0 THEN [OPTp:ADD zpc,zpc,#N% << 16:]
32780[OPTp
32790FNshowregs2
32800SUBS time,time,#T%
32810LDRPLB R2,[mem,zpc,LSR#16]
32820ADDPL PC,table,R2,LSL#8
32830B fetch2
32840]
32850=""
32860
32870DEFFNfetch(N%,T%)
32880IF N%<>0 THEN [OPTp:ADD zpc,zpc,#N% << 16:]
32890[OPTp
32900FNshowregs2
32910SUBS time,time,#T%
32920LDRPLB R2,[mem,zpc,LSR#16]
32930ADDPL PC,table,R2,LSL#8
32940B fetch2
32950]
32960opcode%+=1
32970IF bcd_loop%=0 THEN
32980IF opcode(opcode%-1)=0 THEN STOP
32990IF opcode(opcode%)<>0 AND p=0 THEN STOP
33000IF P%-opcode(0)>opcode%*4*64 THEN PRINT~opcode%
33010P%=opcode(0)+opcode%*4*64
33020O%=code+P%
33030ELSE
33040P%=bcd(0)+opcode%*4*64
33050O%=code+P%
33060ENDIF
33070=""
33080DEFFNbcd(A%) :
33090IF P%>opcode(0)+(A%+256)*4*64 THEN STOP
33100P%=opcode(0)+(A%+256)*4*64 : O%=code+P% : =""
33110
33120DEFFNalign16
33130WHILE (P% AND 15)<>0
33140P%+=1 : O%+=1
33150ENDWHILE
33160=""
33170DEF PROCerror
33180REPORT:PRINT " at line ";ERL
33190END
33200
33210DEFFNshowregs2
33220[OPTp
33230;BL show_regs
33240]
33250=""

� > 6502Em
%�INPUT"Hardware scroll ";HWScroll
&�IF HWScroll<>0 THEN HWScroll=TRUE
(HWScroll=�
2master=�
<;*RMENSURE 6502Support 0.00 RMRun <6502Em$Res>.65Support
F� � �error
P
Z� V2. (bbc)
d
nIO_Podule%=�
x
�9� opcode(&100), bcd(&100), code 500*1024, buffer 1000
�
� l%(100)
�+� divloop1(10),divloop2(10),divjump(10)
�
div%=0
� ț "<6502Em$Dir>.Src.Sound6"
�!ț "<6502Em$Dir>.Src.Opcodes"
� ț "<6502Em$Dir>.Src.Screen"
�"ț "<6502Em$Dir>.Src.HWScroll"
�
�electron%=�
�master=�
�
�assemble
�
�(end-start)/1024
7� "Save <6502Em$Dir>.Code "+�~code+" "+�~(end+code)
&� "SetType <6502Em$Dir>.Code Data"
"
,master=�
6
�assemble
@�(end-start)/1024
J8� "Save <6502Em$Dir>.CodeM "+�~code+" "+�~(end+code)
T'� "SetType <6502Em$Dir>.CodeM Data"
^
h�
r
|0�"LOAD <6502Em$Dir>.OS1,2 "+�~(memory+&C000)
�2�"LOAD <6502Em$Dir>.BASICII "+�~(memory+&8000)
�
�� 12
�� init+code
�
�"BOO"
�
�!pc_store=&D9CD << 16
�
�D%=memory : � R3
�� start+code
�
��
���assemble
!�clearmem(code,code+200*1024)
R=1000 : S=1000 : T=1000

&A=4
0X=5
:Y=6
DF=7
NSP=8
X	mem=3
b
time=9
l
zpc=10
vtable=11
�
�
a=-&100+0
�
x=-&100+4
�
y=-&100+8
�f=-&100+12
�sp=-&100+16
�pc_store=-&100+20
�T1mode=-&100+24
�T2mode=-&100+25
�T3mode=-&100+26
�T4mode=-&100+27
�T1=-&100+28
�T1R=-&100+32
T2=-&100+36
T2R=-&100+40
T3=-&100+44
 T3R=-&100+48
*T4=-&100+52
4T4R=-&100+56
>screen=-&100+60
HscreenR=-&100+64
Rmin=-&100+68
\sound_timer=-&100+72
fifr=-&100+76
pier=-&100+77
zifr2=-&100+78
�ier2=-&100+79
�arc_screenstart=-&100+80
�tamper=-&100+84
�cursor_tamper=-&100+88
�ROMSEL_ON=-&100+92
�rom=-&100+96
�ROMRAM=-&100+100
�fe20=-&100+116
�tape_handle=-&100+117
�crt_regs=-&100+120
�scratch=-&100+140
�pal_regs=-&100+148
�Palette=-&100+164
ACCCON=-&100+172
patch_on=-&100+176
pal_tamper=-&100+177
$lastmode=-&100+178
.fe10=-&100+179
8tape_count=-&100+180
Bkey_addr=-&100+184
L screenstart_tamper=-&100+188
V"screenstart_previous=-&100+192
`speedR=-&100+196
j
t(enD=-&100+200 : � don't go past this
~
��p=4 � 6 � 2
�
div%=0
�O%=code
�l%=0
�P%=0
�
opcode%=0
�	[OPTp
�).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
27.crt_addr                     EQUD 0 ; was crt_regs
<1.T1_addr                      EQUD 0 ; was T1
F..ifr_addr                     EQUD 0 ; ifr
P5.column_counter_addr          EQUD column_counter
Z1.ROMSEL_addr                  EQUD 0 ; ROMSEL
d2.Palette_addr                 EQUD 0 ; Palette
n5.speed_addr                   EQUD screen_count+4
x0.elite_addr                   EQUD 0 ; elite
�>.opco_addr                    EQUD opcode(0) ; opcodetable
�-.bcd_addr                     EQUD bcd(0)
�6.sheila_writetab_addr         EQUD sheila_writetab
�5.sheila_readtab_addr          EQUD sheila_readtab
�7.sound_vectors_addr           EQUD sound_buffs_addr
�3.patch_addr                   EQUD patch_screen
�
�0.init ; only called once, before code called
�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
6.init_loop
@;LDR R4,[R1,R3,LSL#2]
J;ADD R4,R4,R0
T;STR R4,[R1,R3,LSL#2]
^;LDR R4,[R2,R3,LSL#2]
h;ADD R4,R4,R0
r;STR R4,[R2,R3,LSL#2]
|LDR R4,[R5,R3,LSL#2]
�ADD R4,R4,R0
�STR R4,[R5,R3,LSL#2]
�LDR R4,[R6,R3,LSL#2]
�ADD R4,R4,R0
�STR R4,[R6,R3,LSL#2]
�SUBS R3,R3,#1
�BPL init_loop
�MOV 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"
0
:BL blank_cursor
D
N"MOV R0,#&9C00 : ADD R0,R0,#&40
XSTR R0,[mem,#screenR]
b
lSWI "6502_Getkeyaddr"
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 time,[mem,#min]
�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]
4
>BL recalc_wrap
HLDRB R0,[mem,#patch_on]
R� R0,R0,#%11111
\BIC F,F,#&FF00
f�R F,F,R0,LSL#8
p
z;MOV time,#0
�
�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
	8TST F,#%1000
	BLDREQ table,opco_addr
	LLDRNE table,bcd_addr
	VADD table,table,R1
	`MOV PC,R14
	j
	t.block1
	~EQUD 149 : EQUD -1
	�.block2
	�EQUD 0 : EQUD 0
	�
	�.screen_count
	�
EQUD 0
	�
EQUD 0
	�
	�
.reg_comp
	�EQUD &FFEE << 16
	�
	�
.trace_on
	�MOV R12,#1
STRB R12,trace

MOV PC,R14

.show_regs
(
2;SWI "6502_Checkkdata"
<LDR R0,[mem,#key_addr]
FLDRB R0,[R0,#-4]
P
Z
dCMP R0,#&1F ; Insert
n�Q R1,#1
xSTREQ R1,trace2
�
�LDRB R0,trace2
�
CMP R0,#1
�MOVNE PC,R14
�
�;LDR R0,reg_comp
�;CMP R0,zpc
�
;�Q R0,#1
�;STREQB R0,trace
�
�;ADD R12,mem,#&DF00
�;LDRB R12,[R12,#&DA]
�;CMP R12,#0
;�Q R12,#1
;STREQB R12,trace

";LDRB R0,trace
,;CMP R0,#1
6;MOVNE PC,14
@
J
�showregs
TMOV PC,R14
^
h
.read_ifr
rLDRB R0,[mem,#ifr]
|
�LDR R1,[mem,#min]
�SUB R1,R1,time
�LDR R12,[mem,#screen]
�SUB R12,R12,R1
�CMP R12,#10
��RLT R0,R0,#%10 ; vsync
�;
�;
�; CMP zpc,#&8000 << 16
�; �RLT R0,R0,#%10 ; vsync
�
�
�LDRB R1,[mem,#ier]
BIC R0,R0,#&80
�S R1,R1,R0
�RNE R0,R0,#&80
&
0MOV PC,R14
:
D
.read_ier
NLDRB R0,[mem,#ier]
X�R R0,R0,#&80
bMOV PC,R14
l
v.read_ifr2
�LDRB R0,[mem,#ifr2]
�LDRB R1,[mem,#ier2]
�BIC R0,R0,#&80
��S R1,R1,R0
��RNE R0,R0,#&80
�MOV PC,R14
�
�.read_ier2
�LDRB R0,[mem,#ier2]
��R R0,R0,#&80
�MOV PC,R14
�
�.ldrb41



SUB R12,mem,#512 ; sheila

LDRB R1,[R12,#&C] ; PCR

 LDRB R2,[mem,#ifr]

*� R13,R1,#%1110

4TEQ R13,   #%0010

>TEQNE R13, #%0110

HBICEQ R2,R2,#%11

RBICNE R2,R2,#%10

\STRB R2,[mem,#ifr]

f

pLDRB R0,[R12,#&4F]

zMOV PC,R14

�

�.ldrb4F

�

�SUB R12,mem,#512 ; sheila

�LDRB R0,[R12,#&4F]

�MOV PC,R14

�

�

�.readT4low_count

�LDRB R1,[mem,#ifr2]

�BIC R1,R1, #%00100000

�STRB R1,[mem,#ifr2]

�LDR R0,[mem,#T4]
LDR R1,[mem,#min]
SUB R0,R0,R1,LSL#15
ADD R0,R0,time,LSL#15
$TST R0,#1 << 15 ; ???
.SUBNE time,time,#1
8MOV R0,R0,LSR#16
B� R0,R0,#&FF
LMOV PC,R14
V
`.readT4high_count
jLDR R0,[mem,#T4]
tLDR R1,[mem,#min]
~SUB R0,R0,R1,LSL#15
�ADD R0,R0,time,LSL#15
�TST R0,#1 << 15 ; ???
�SUBNE time,time,#1
�MOV R0,R0,LSR#24
�MOV PC,R14
�
�.readT3low_count
�LDR R1,[mem,#ifr2]
�BIC R1,R1, #%1 << 6
�1STRB R1,[mem,#ifr2] ; clear T3 interrupt flag
�LDR R0,[mem,#T3]
�LDR R1,[mem,#min]
SUB R0,R0,R1,LSL#15

ADD R0,R0,time,LSL#15
TST R0,#1 << 15 ; ???
SUBNE time,time,#1
(MOV R0,R0,LSR#16
2� R0,R0,#&FF
<MOV PC,R14
F
P.readT3high_count
ZLDR R0,[mem,#T3]
dLDR R1,[mem,#min]
nSUB R0,R0,R1,LSL#15
xADD R0,R0,time,LSL#15
�TST R0,#1 << 15 ; ???
�SUBNE time,time,#1
�MOV R0,R0,LSR#24
�MOV PC,R14
�
�.readT3low_latch
�LDRB R0,[mem,#T3R+2]
�MOV PC,R14
�
�.readT3high_latch
�LDRB R0,[mem,#T3R+3]
�MOV PC,R14
�
.ACRtemp

EQUD 0

".writeACR2
,;MOV R0,#0
6;STRB R0,[mem,#T3mode]
@SUB R0,mem,#512
JLDRB R1,[R0,#&60]
T�R R1,R1,#&80
^STRB R1,[R0,#&60]
h;MOV R0,#1
r;STRB R0,ACRtemp
|MOV PC,R14
�
�.writeT3low_latch
�STRB R0,[mem,#T3R+2]
�MOV PC,R14
�
�.writeT3high_count
�STRB R0,[mem,#T3R+3]
�LDR R0,[mem,#T3R]
�ADD R0,R0,#2 << 16
�
�+CMP R0,time,LSL#15 ; fix Exile's speech
�
�BHI skip_T3adjust
LDRB R2,[mem,#ier2]

TST R2,#%01000000
&MOVNE time,R0,LSR#15
0
:.skip_T3adjust
DLDR R1,[mem,#min]
NADD R0,R0,R1,LSL#15
XSUB R0,R0,time,LSL#15
bSTR R0,[mem,#T3]
lLDRB R1,[mem,#ifr2]
vBIC R1,R1, #%1 << 6
�1STRB R1,[mem,#ifr2] ; clear T3 interrupt flag
�;SUB R0,R0,#&D
�SUB R0,mem,#512 ; sheila
�
�
�LDRB R1,[R0,#&6B]
�� R1,R1,#1<<7
��S R1,R1,#&C0
�LDREQB R1,[R0,#&60]
�BICEQ R1,R1,#&80
�STREQB R1,[R0,#&60]
�
�LDRB R12,[mem,#crt_regs+9]
CMP R12,#3
�Q PC,R14 ; fortress fudge

 %MOV R0,#1 : STRB R0,[mem,#T3mode]
*MOV PC,R14
4
>.writeT3high_latch
HSTRB R0,[mem,#T3R+3]
RMOV PC,R14
\
f.writeT4low_latch
pSTRB R0,[mem,#T4R+2]
zMOV PC,R14
�
�.writeT4high_count
�LDRB R1,[mem,#T4R+2]
�ADD R1,R1,R0,LSL#8
�MOV R1,R1,LSL#16
�LDR R0,[mem,#min]
�ADD R1,R1,R0,LSL#15
�SUB R1,R1,time,LSL#15
�;ADD R1,R1,#2 << 16
�ADD R1,R1,#1 << 16
�STR R1,[mem,#T4]
�LDRB R1,[mem,#ifr2]
�BICS R1,R1, #%001 << 5
STRB R1,[mem,#ifr2]
%MOV R0,#1 : STRB R0,[mem,#T4mode]
MOV PC,R14
$
..readT2low_count
8LDRB R1,[mem,#ifr]
BBIC R1,R1, #%101 << 5
L0STRB R1,[mem,#ifr] ; clear T2 interrupt flag
VLDR R0,[mem,#T2]
`LDR R1,[mem,#min]
jSUB R0,R0,R1,LSL#15
tADD R0,R0,time,LSL#15
~TST R0,#1 << 15 ; ???
�SUBNE time,time,#1
�MOV R0,R0,LSR#16
�� R0,R0,#&FF
�MOV PC,R14
�
�.readT2high_count
�LDR R0,[mem,#T2]
�LDR R1,[mem,#min]
�SUB R0,R0,R1,LSL#15
�ADD R0,R0,time,LSL#15
�TST R0,#1 << 15 ; ???
�SUBNE time,time,#1
MOV R0,R0,LSR#24

MOV PC,R14

.readT1low_count
(LDRB R1,[mem,#ifr]
2BIC R1,R1, #%1 << 6
<0STRB R1,[mem,#ifr] ; clear T1 interrupt flag
FLDR R0,[mem,#T1]
PLDR R1,[mem,#min]
ZSUB R0,R0,R1,LSL#15
dADD R0,R0,time,LSL#15
nTST R0,#1 << 15 ; ???
xSUBNE time,time,#1
�MOV R0,R0,LSR#16
�� R0,R0,#&FF
�MOV PC,R14
�
�.readT1high_count
�LDR R0,[mem,#T1]
�LDR R1,[mem,#min]
�SUB R0,R0,R1,LSL#15
�ADD R0,R0,time,LSL#15
�TST R0,#1 << 15 ; ???
�SUBNE time,time,#1
�MOV R0,R0,LSR#24
�MOV PC,R14

.readT1low_latch
LDRB R0,[mem,#T1R+2]
"MOV PC,R14
,
6.readT1high_latch
@LDRB R0,[mem,#T1R+3]
JMOV PC,R14
T
^.writeT1low_latch
hSTRB R0,[mem,#T1R+2]
rMOV PC,R14
|
�.writeT1high_count
�STRB R0,[mem,#T1R+3]
�LDR R0,[mem,#T1R]
�LDR R1,[mem,#min]
�ADD R0,R0,R1,LSL#15
�SUB R0,R0,time,LSL#15
�ADD R0,R0,#2 << 16
�STR R0,[mem,#T1]
�LDR R1,[mem,#ifr]
�BIC R1,R1, #%1 << 6
�0STRB R1,[mem,#ifr] ; clear T1 interrupt flag
�SUB R0,mem,#512 ; sheila
�LDRB R1,[R0,#&40]
BIC R1,R1,#&80
STRB R1,[R0,#&40]
%MOV R0,#1 : STRB R0,[mem,#T1mode]
&MOV PC,R14
0
:.writeT1high_latch
DSTRB R0,[mem,#T1R+3]
NMOV PC,R14
X
b.writeT2low_latch
lSTRB R0,[mem,#T2R+2]
vMOV PC,R14
�
�.writeT2high_count
�LDRB R1,[mem,#T2R+2]
�ADD R1,R1,R0,LSL#8
�MOV R1,R1,LSL#16
�LDR R0,[mem,#min]
�ADD R1,R1,R0,LSL#15
�SUB R1,R1,time,LSL#15
�ADD R1,R1,#2 << 16
�STR R1,[mem,#T2]
�LDR R1,[mem,#ifr]
�BICS R1,R1, #%101 << 5
�0STRB R1,[mem,#ifr] ; clear T2 interrupt flag
%MOV R0,#1 : STRB R0,[mem,#T2mode]
MOV PC,R14

 ;.T1mode
*;EQUD 1
4;.T2mode
>;EQUD 0
H;.T3mode
R;EQUD 1
\;.T4mode
f;EQUD 0
p;.T1
z;EQUD &1234 << 16
�	;.T1R
�;EQUD 20000 << 16
�;.T2
�;EQUD 98765 << 16
�	;.T2R
�;EQUD 255   << 16
�;.T3
�;EQUD 6777  << 16
�	;.T3R
�;EQUD 6777  << 16
�;.T4
�;EQUD 7380  << 16
�	;.T4R
;EQUD 255   << 16
;.screen

;EQUD 432
$
;.screenR
.;EQUD 40000
8	;.min
B
;EQUD 200
L;.sound_timer
V;EQUD 0
`
j
t.keychk
~
EQUD 0
�
�.CLI
�BIC F,F,#%100
�ADD zpc,zpc,#1 << 16
�LDRB R0,keychk
�
CMP R0,#0
�BLEQ keyboard
�;BL keyboard
��fetch3(0,2)
�
�
�
.fetch2


LDR R0,[mem,#min]
SUB R0,R0,time
(LDR R1,[mem,#sound_timer]
2SUB R1,R1,R0
<STR R1,[mem,#sound_timer]
F
P
ZMOV R0,#0 : STR R0,keychk
dLDR R0,[mem,#min]
nSUB R0,R0,time ; ***
xLDR R1,[mem,#screen]
�SUBS R1,R1,R0
�STRGT R1,[mem,#screen]
�BLLE vsync
�
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
�LDR R1,speed
�SUBS R1,R1,R0
�STRGT R1,speed
�BLLE speed_control
�
�; LDR R0,[mem,#T1mode]
�; TST R0,#%1
; BEQ skip_timer1

LDR R0,[mem,#min]
"SUB R0,R0,time ; ***
,LDR R1,[mem,#T1]
6SUBS R1,R1,R0,LSL#15
@STRGT R1,[mem,#T1]
JBLLE timer1
T.skip_timer1
^
h; LDR R0,[mem,#T2mode]
r; TST R0,#%1
|; BEQ skip_timer2
�
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
�LDR R1,[mem,#T2]
�SUBS R1,R1,R0,LSL#15
�STR R1,[mem,#T2]
�BLLE timer2
�.skip_timer2
�
�; LDR R0,[mem,#T3mode]
�; TST R0,#%1
�; BEQ skip_timer3
�
LDR R0,[mem,#min]
SUB R0,R0,time ; ***
LDR R1,[mem,#T3]
&SUBS R1,R1,R0,LSL#15
0STRGT R1,[mem,#T3]
:BLLE timer3
D.skip_timer3
N
X; LDR R0,[mem,#T4mode]
b; TST R0,#%1
l; MVNEQ R1,#0 ; -1
v; STREQ R1,T4
�; BEQ skip_timer4
�
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
�LDR R1,[mem,#T4]
�SUBS R1,R1,R0,LSL#15
�STR R1,[mem,#T4]
�BLLE timer4
�.skip_timer4
�
�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
 
*LDRB R1,[mem,#ifr]
4LDRB R2,[mem,#ifr2]
>%LDRB R12,[mem,#ier] : � R1,R1,R12
H%LDRB R12,[mem,#ier2]: � R2,R2,R12
R%;BIC R1,R1,#&80 : ;BIC R2,R2,#&80
\
f
p;LDRB R0,[mem,#ier]
z.;BIC R0,R0,#%1 ; ignore keyboard interrupt
�;�S R0,R0,R1
�;�RNE R1,R1,#&80
�;LDRB R0,[mem,#ier2]
�;�S R0,R0,R2
�;�RNE R2,R2,#&80
�
�TST F,#%100
�BNE skip_do_interrupt
�;TST R1,#&80
�;TSTEQ R2,#&80
��S R1,R1,#%01111111
��EQS R2,R2,#%01111111
�BEQ skip_do_interrupt
;CMP R13,#1
;BNE skip_do_interrupt

$.do_interrupt
.�do_interrupt
8
B.skip_do_interrupt
L
V;BL keyboard �D � CLI!!!
`BL keys2
j.skip_keys
tLDR time,[mem,#T1]
~MOV time,time,LSR#15
�LDR R1,[mem,#screen]
�CMP R1,#0 : �Q R1,time
�CMP R1,time
�MOVLT time,R1
�LDRB R1,[mem,#T2mode]
�
CMP R1,#0
�BEQ skipT2
�LDR R1,[mem,#T2]
�
�;RJW
�MOVS R1,R1,LSR#15
��Q R1,time
CMP R1,time

MOVLT time,R1
.skipT2
LDR R1,[mem,#T3]
(MOVS R1,R1,LSR#15
2
<	; RJW
F�Q R1,time
PCMP R1,time
ZMOVLT time,R1
dLDRB R1,[mem,#T4mode]
n
CMP R1,#0
xBEQ skipT4
�LDR R1,[mem,#T4]
�
�	; RJW
�MOVS R1,R1,LSR#15
��Q R1,time
�CMP R1,time
�MOVLT time,R1
�.skipT4
�;CMP time,#0 : ;�Q time,#1
�SUB time,time,#4
�STR time,[mem,#min]
��fetch2
�
.interrupt

TST F,#%100
"MOVNE PC,R14
,
6LDRB R1,[mem,#ifr]
@LDRB R2,[mem,#ifr2]
J%LDRB R12,[mem,#ier] : � R1,R1,R12
T%LDRB R12,[mem,#ier2]: � R2,R2,R12
^
h�S R1,R1,#%01111111
r�EQS R2,R2,#%01111111
|
�Q PC,R14
�
��do_interrupt
�
�MOV PC,R14
�
�.F10temp
�
EQUD 0
�
�.F10
�SWI "6502_Getkdata"
�STR R14,F10temp
�MOV R0,#255
�STRB R0,[mem,#lastmode]
 BL updatescreen
 BL force_update_pal
 
BL cursor
 LDR PC,F10temp
 &
 0;.fetch3
 :
.keys2
 D;SWI "6502_Checkkdata"
 NLDR R0,[mem,#key_addr]
 XLDRB R0,[R0,#-4]
 b
 l
 vCMP 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
 �MOV PC,R14
 �
 �
.keyboard
 �MOV R0,#1 : STR R0,keychk
 �
!
!;SWI "6502_Checkkdata"
!LDR R0,[mem,#key_addr]
! LDRB R0,[R0,#-4]
!*CMP R0,#&FF : �Q PC,R14
!4
!>
!HSWI "6502_Getkdata"
!R;CMP R0,#&FF : ;�Q PC,R14
!\CMP R0,#&1F ; Insert
!f�Q R1,#1
!pSTREQ R1,trace2
!zCMP 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
"
";B not_keyboard
"$CMP R0,#10 ; shift, ctrl
".MOVLT PC,R14
"8LDRB R1,[mem,#ifr]
"B-�R R1,R1,#%1 ; interrupt is from keyboard
"LSTRB R1,[mem,#ifr]
"VLDRB R0,[mem,#ier]
"`TST R0,#%1
"j
�Q PC,R14
"t�do_interrupt
"~MOV PC,R14
"�
"�
"�;.no_interrupt
"�;LDRB R0,trace2
"�;CMP R0,#0
"�;BEQ notrace2
"�;�showregs
"�;.notrace2
"�;�fetch2
"�
"�.define_cursor
"�$MOV R1,#0 : STRB R1,cursor_state
#.define_cursor2
#
LDRB R1,cursor_state
#CMP R1,#0:MOVNE PC,R14
#
#(-LDRB R1,[mem,#crt_regs+10] ; cursor start
#2
#<� R12,R1,#%100000
#FTST R12,#%1100000
#PBEQ blank_cursor
#Z
#d+LDRB R2,[mem,#crt_regs+11] ; cursor end
#n� R1,R1,#31
#x� R2,R2,#31
#�
#�SUBS R12,R2,R1
#�BLT blank_cursor
#�
#�
#�LDRB R12,[mem,#fe20]
#�� R12,R12,#%100000
#�
#�TST R12,#%1000
#��Q R13,#2 ; mode 5
#�MOVNE R13,#1
#�
#�
MOV R0,#1
$MOV R0,R0,LSL R13
$TSTEQ R12,#%100000
$�Q R0,#8 ; mode 2
$"
�Q R13,#3
$,STRB R0,cursor_width
$6
$@TST R12,#%10 ; teletext
$JMVNNE R12,#7
$T
�Q R12,#1
$^
$hADD R2,R2,R12
$rSTRB R2,cursor_height
$|
$�;MOV R0,#1
$�;MOV R0,R0,LSL R13
$�;STRB R0,cursor_width
$�
$�
$�ADR R0,cursor_data
$�SUB R0,R0,R1,LSL R13
$�SUB R0,R0,R12,LSL R13
$�STR R0,cursor_block+6
$�
$�MOV R0,#21
$�ADR R1,cursor_block
$�SWI "OS_Word"
%MOVS PC,R14
%
%.blank_cursor
%&$MOV R1,#1 : STRB R1,cursor_state
%0.blank_cursor2
%:
%DADR R1,cursor_block
%NADR R0,blank_data
%XSTR R0,cursor_block+6
%bMOV R0,#21
%lSWI "OS_Word"
%vMOV PC,R14
%�
%�.cursor_state
%�
EQUD 0
%�
%�.cursor_flash
%�
EQUD 0
%�.flash_state
%�
EQUD 0
%�
%�;.not_keyboard
%�
EQUW 0
%�.cursor_block
%�
EQUB 0
&EQUB 2 ; shape number
&.cursor_width
&EQUB 2 ; width in bytes
& .cursor_height
&*EQUB 9 ; height in pixels
&4
EQUB 0
&>
EQUB 0
&HEQUD 0 ; address of data
&R
&\
&f	ALIGN
&p.blank_data
&z
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
&�
EQUD 0
'
EQUD 0
'
EQUD 0
'
EQUD 0
'$
EQUD 0
'.
EQUD 0
'8
EQUD 0
'B
EQUD 0
'L
EQUD 0
'V
EQUD 0
'`
EQUD 0
'j
EQUD 0
't
EQUD 0
'~
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�.cursor_data
'�EQUD &FFFFFFFF
'�EQUD &FFFFFFFF
'�EQUD &FFFFFFFF
'�EQUD &FFFFFFFF
'�EQUD &FFFFFFFF
'�EQUD &FFFFFFFF
(EQUD &FFFFFFFF
(
EQUD &FFFFFFFF
(EQUD &FFFFFFFF
(EQUD &FFFFFFFF
((EQUD &FFFFFFFF
(2EQUD &FFFFFFFF
(<EQUD &FFFFFFFF
(FEQUD &FFFFFFFF
(PEQUD &FFFFFFFF
(ZEQUD &FFFFFFFF
(dEQUD &FFFFFFFF
(nEQUD &FFFFFFFF
(xEQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
(�EQUD &FFFFFFFF
)
).cursor7
)
)"LDRB R0,[mem,#crt_regs+14]
),LDRB R1,[mem,#crt_regs+15]
)6ADD R0,R1,R0,LSL#8
)@
)J0LDRB R1,[mem,#crt_regs+12] : ;� R1,R1,#%1111
)TLDRB R2,[mem,#crt_regs+13]
)^ADD R2,R2,R1,LSL#8
)hSUBS R0,R0,R2
)rMOVMI R0,#0
)|
)�.;LDRB R12,[mem,#crt_regs+1] ; horiz. chars
)�;MOV R12,#40
)�
)�);�divmod(0,12,1,2,13) ; R0 = R0 � R12
)�)                      ; R2 = R0 � R12
)�;RSB R2,R2,#25
)�;MOV R2,R2,LSL#5
)�;ADD R2,R2,R2,LSR#2
)�;MOV R0,R0,LSL#5
)�;ADD R0,R0,R2,LSL#16
)�; We know that R0<1000
)�; R0 = R0 � 40
)�; R2 = R0 � 40
*;�divmod(0,12,1,2,13)
*!MOV R2,#((25<<5)+(25<<3))<<16
*CMP R0,#640
*&SUBGE R0,R0,#640
*0$SUBGE R2,R2,#((1<<9)+(1<<7))<<16
*:CMP R0,#320
*DSUBGE R0,R0,#320
*N$SUBGE R2,R2,#((1<<8)+(1<<6))<<16
*XCMP R0,#160
*bSUBGE R0,R0,#160
*l$SUBGE R2,R2,#((1<<7)+(1<<5))<<16
*vCMP R0,#80
*�SUBGE R0,R0,#80
*�$SUBGE R2,R2,#((1<<6)+(1<<4))<<16
*�CMP R0,#40
*�SUBGE R0,R0,#40
*�$SUBGE R2,R2,#((1<<5)+(1<<3))<<16
*�
*�
*�ADD R0,R2,R0,LSL#5
*�STR R0,osword21_5_block1
*�ADR R1,osword21_5_block
*�MOV R0,#21
*�(SWI "OS_Word" ; set pointer position
*�;MOV PC,R14
*�B define_cursor2
+
+;B cursor_cont
+
+ .padding_to_align_osword
+*EQUB 0 : EQUB 0 : EQUB 0
+4.osword21_5_block
+>
EQUB 5
+H.osword21_5_block1
+R
EQUD 0
+\
+f0� R0,R0,#&20 : ADD R0,R0,#&74 : � R0,R0,#&FF
+p
+z
+�.cursor
+�+MOV R0,#0 : STR R0,[mem,#cursor_tamper]
+�
+�\LDRB R1,[mem,#cursor_on]
+�\CMP R1,#0:\MOVNE PC,R14
+�TST F,#1 << 10 ; cursor on?
+�
�Q PC,R14
+�
+�LDRB R0,[mem,#fe20]
+�
+�TST R0,#%11100000
+�BEQ blank_cursor
+�
,TST R0,#%10 ; teletext
,BNE cursor7
,
,$LDRB R0,[mem,#crt_regs+14]
,.LDRB R1,[mem,#crt_regs+15]
,8ADD R0,R1,R0,LSL#8
,B
,L/LDRB R1,[mem,#crt_regs+12] : � R1,R1,#%1111
,VLDRB R2,[mem,#crt_regs+13]
,`ADD R2,R2,R1,LSL#8
,jSUBS R0,R0,R2
,tMOVMI R0,#0
,~
,�.cursor_cont
,�
,�-LDRB R12,[mem,#crt_regs+1] ; horiz. chars
,�
,�CMP R12,#0 : �Q PC,R14
,�
,�);�divmod(0,12,1,2,13) ; R0 = R0 � R12
,�)                      ; R2 = R0 � R12
,�;RSB R2,R2,#32
,�;MOV R2,R2,LSL#5
,�
,�; We know R0<32*R12
-; R0 = R0 � R12
-
; R2 = R0 � R12
-MOV R2,#32<<21
-CMP R0,R12,LSL#4
-(SUBGE R0,R0,R12,LSL#4
-2SUBGE R2,R2,#16<<21
-<CMP R0,R12,LSL#3
-FSUBGE R0,R0,R12,LSL#3
-PSUBGE R2,R2,#8<<21
-ZCMP R0,R12,LSL#2
-dSUBGE R0,R0,R12,LSL#2
-nSUBGE R2,R2,#4<<21
-xCMP R0,R12,LSL#1
-�SUBGE R0,R0,R12,LSL#1
-�SUBGE R2,R2,#2<<21
-�CMP R0,R12
-�SUBGE R0,R0,R12
-�SUBGE R2,R2,#1<<21
-�
-�
-�9LDRB R1,[mem,#fe20] : TST R1,#%10000 : �Q R0,R0,LSL#1
-�2;MOV R0,R0,LSL#4         ;   these two surplus
-�;ADD R0,R0,R2,LSL#16     ;
-�:ADD R0,R2,R0,LSL#4       ;   this line missing in 1.30
-�STR R0,osword21_5_block1
-�ADR R1,osword21_5_block
.MOV R0,#21
.(SWI "OS_Word" ; set pointer position
.;MOV PC,R14
.B define_cursor2
."
.,.mono_time
.6
EQUD 0
.@
.speed
.J
EQUD 0
.T
.^.speed_control
.hLDR R0,[mem,#speedR]
.rADD R1,R1,R0
.|STR R1,speed
.�
.�LDR R1,mono_time
.�.mono_loop
.�SWI "OS_ReadMonotonicTime"
.�MOV R0,R0,LSR#1
.�
CMP R0,R1
.�BEQ mono_loop
.�STR R0,mono_time
.�
.�MOV PC,R14
.�
.�
.�
/
.vsync
/STR R14,vsyncR14
/
/&
/0LDR R0,[mem,#screenR]
/:ADD R1,R1,R0
/DSTR R1,[mem,#screen]
/N
/XLDRB R0,ldrb40_tamper
/b"CMP R0,#1 : BLEQ ldrb40_update
/l
/v;BL trace_on
/�
/�;LDRB R1,screen_count
/�;SUBS R1,R1,#1
/�;LDRMIB R1,screen_count+4
/�;STRB R1,screen_count
/�LDR R0,[mem,#tamper]
/�
CMP R0,#0
/�
/�BEQ no_tamper
/�
MOV R0,#0
/�STR R0,[mem,#tamper]
/�;SWI "6502_UpdateScreen"
/�BL recalc_wrap
0BL updatescreen
0TST F,#1 << 10 ; cursor on?
0;BLNE define_cursor
0 BLNE cursor
0*.no_tamper
04LDRB R0,[mem,#pal_tamper]
0>
CMP R0,#0
0HBLNE update_pal
0R
0\
0fLDR R0,[mem,#cursor_tamper]
0p
CMP R0,#0
0zBLNE cursor
0�
0�
0�
0�SUB R0,mem,#512 ; sheila
0�LDRB R1,[R0,#&20]
0�TST R1,#%10 ; teletext?
0�;SWINE "6502_UpdateScreen"
0�BLNE updatescreen
0�ADD R0,R0,#&4D
0�;LDRB R1,[R0]
0�;LDRB R2,[R0,#1]
0�LDRB R1,[mem,#ifr]
0�LDRB R2,[mem,#ier]
1+�R R1,R1,#%10 ; interrupt is from vsync
1-TST R2,#%10 ; is vsync interrupt enabled?
1�RNE R1,R1,#&80
1$;STRB R1,[R0]
1.STRB R1,[mem,#ifr]
18;BEQ no_interrupt
1B;�fetch2
1L
1V;TST F,#1 << 9
1`;BEQ skip_exact
1j
1t;LDR R1,mono_time
1~;.mono_loop
1�;SWI "OS_ReadMonotonicTime"
1�;MOV R0,R0,LSR#1
1�;CMP R0,R1
1�;BEQ mono_loop
1�;STR R0,mono_time
1�
1�.skip_exact
1�
1�TST F,#1 << 10 ; cursor on?
1�LDREQ PC,vsyncR14
1�
1�LDRB R1,cursor_state
2
CMP R1,#0
2
LDRNE PC,vsyncR14
2
2LDRB R1,[mem,#crt_regs+10]
2(/TST R1,#%1000000 ; cursor blinking enabled?
22LDREQ PC,vsyncR14
2<
2FLDRB R0,cursor_flash
2PSUBS R0,R0,#1
2ZSTRB R0,cursor_flash
2dLDRGE PC,vsyncR14
2n
2xTST R1,#%100000
2�
�Q R0,#15
2�MOVNE R0,#31
2�STRB R0,cursor_flash
2�
2�LDR R14,vsyncR14
2�LDRB R0,flash_state
2�� R0,R0,#1
2�STRB R0,flash_state
2�!CMP R0,#0 : BEQ blank_cursor2
2�B define_cursor2
2�
2�;LDR PC,vsyncR14
2�
.vsyncR14
3
EQUD 0
3
3.ldrb40
3"
3,LDRB R2,ldrb40_value
36BIC R0,R0,#%110000
3@�R R0,R0,R2
3J
MOV R1,#1
3TSTRB R1,ldrb40_tamper
3^MOV PC,R14
3h
3r.ldrb40_update
3|MOV R0,#%110000
3�STRB R0,ldrb40_value
3�
MOV R0,#0
3�STRB R0,ldrb40_tamper
3�TST F,#1<<9 ; joystick
3�
�Q PC,R14
3�!SWI &63F40 ; "XJoystick_Read"
3�BVS ldrb40_mouse
3�� R1,R0,#&10000
3�
MOV R0,#1
3�!SWI &63F40 ; "XJoystick_Read"
3�MOVVS R0,#0
3�� R0,R0,#&10000
3�ADD R1,R1,R0,LSL#1
4� R1,R1,#&30000
4MOV R1,R1,LSR#(16-4)
4
4&� R2,R1,#%110000
40
4:;ADD R13,mem,#&FE00
4D;LDRB R0,[R13,#&40]
4N;BIC R0,R0,#%110000
4XSTRB R2,ldrb40_value
4b;�R R0,R0,R2
4l
4vMOV PC,R14
4�
4�.ldrb40_tamper
4�
EQUD 0
4�.ldrb40_value
4�
EQUD 0
4�
4�.ldrb40_mouse
4�MOV R13,R3
4�SWI "OS_Mouse"
4�MOV R3,R13
4�
4�MOV R2,R2,LSR#1
4�RSB R2,R2,#3
5MOV R2,R2,LSL#4
5;ADD R13,mem,#&FE00
5;LDRB R0,[R13,#&40]
5 ;BIC R0,R0,#%110000
5*STRB R2,ldrb40_value
54;�R R0,R0,R2
5>
5HMOV PC,R14
5R
5\.write_ADC_status
5f
5pTST F,#1<<9 ; joystick
5z
�Q PC,R14
5�
5�
5�BIC R12,R0,#%11110000
5�
5�MOV R0,R0,LSR#1
5�!� R0,R0,#%1 ; joystick number
5�!SWI &63F40 ; "XJoystick_Read"
5�BVS write_ADC_mouse
5�
5�
5�(TST R12,#%1  ; left/right or up/down
5��Q R0,R0,LSR#8
5�ADD R0,R0,#127
6� R0,R0,#&FF
6RSBEQ R0,R0,#255
6
6$MOV R1,R0,LSR#2
6.� R1,R1,#%110000
68�R R12,R12,R1
6B�R R12,R12,#%1000000
6L
6VSUB R1,mem,#512 ; sheila
6`
6jSTRB R12,[R1,#&C0]
6tSTRB R12,[R1,#&18]
6~
6�STRB R0,[R1,#&C1]
6�STRB R0,[R1,#&19]
6�MOV R12,#0
6�STRB R12,[R1,#&C2]
6�STRB R12,[R1,#&1A]
6�
6�MOV PC,R14
6�
6�.write_ADC_mouse
6�
6�MOV R13,R3
6�SWI "OS_Mouse"
7MOV R3,R13
7

7MOV R2,#1024
7SUB R2,R2,#1
7(SUBS R0,R2,R0
72MOVLT R0,#0
7<
7F;CMP R0,#1024
7P;MOVGE R0,#1024
7Z;SUBGE R0,R0,#1
7d
7n(TST R12,#%1  ; left/right or up/down
7xMOVNE R0,R1
7�
7�MOV R1,R0,LSL#4
7�� R1,R1,#%110000
7��R R12,R12,R1
7��R R12,R12,#%1000000
7�
7�SUB R1,mem,#512 ; sheila
7�
7�STRB R12,[R1,#&C0]
7�STRB R12,[R1,#&18]
7�
7�MOV R12,R0,LSR#2
7�STRB R12,[R1,#&C1]
8STRB R12,[R1,#&19]
8MOV R12,R0,LSL#6
8STRB R12,[R1,#&C2]
8"STRB R12,[R1,#&1A]
8,
86MOV PC,R14
8@
8J
8T.timer1
8^LDR R0,[mem,#T1R]
8hADD R1,R1,R0
8rADD R1,R1,#2 << 16
8|STR R1,[mem,#T1]
8�
8�SUB R0,mem,#512 ; sheila
8�
8�LDRB R1,[R0,#&4B] ; FE4B
8�TST R1,#%01000000
8��Q R2,#0
8�STREQB R2,[mem,#T1mode]
8�
8�TST R1,#%10000000
8�LDRNEB R2,[R0,#&40] ; FE40
8��NE R2,R2,#&80
8�STRNEB R2,[R0,#&40] ; FE40
8�
9LDRB R1,[mem,#ifr]
93�R R1,R1,#%01000000 ; interrupt is from timer 1
9STRB R1,[mem,#ifr]
9&
90MOV PC,R14
9:
9D.timer2
9NLDRB R0,[mem,#T2mode]
9X
CMP R0,#0
9b
�Q PC,R14
9l
MOV R0,#0
9vSTRB R0,[mem,#T2mode]
9�
9�LDRB R1,[mem,#ifr]
9��R R1,R1,#%00100000
9�STRB R1,[mem,#ifr]
9�
9�MOV PC,R14
9�
9�.timer3
9�LDR R0,[mem,#T3R]
9�ADD R1,R1,R0
9�STR R1,[mem,#T3]
9�
9�SUB R0,mem,#512 ; sheila
:
:LDRB R1,[R0,#&6B]
:TST R1,#%01000000
: BNE T3mode_skip2
:*
:4LDRB R1,[mem,#T3mode]
:>
CMP R1,#1
:H;SWINE &100+�"1"
:R;SWIEQ &100+�"0"
:\BNE T3mode_skip
:f
:p.T3mode_skip2
:zLDRB R1,[mem,#ifr2]
:��R R1,R1,#%01000000
:�STRB R1,[mem,#ifr2]
:�
:�
:�;LDRB R1,[R0,#&6B] ; FE6B
:�;TST R1,#%01000000
:�
;�Q R2,#0
:�;MOVNE R2,#1
:�;STREQB R2,[mem,#T3mode]
:�;SWIEQ &100+�"z"
:�
:�.T3mode_skip
:�
MOV R2,#0
;STRB R2,[mem,#T3mode]
;
;;LDRB R1,[R0,#&6B] ; FE6B
;$;TST R1,#%10000000
;.;LDRB R2,[R0,#&60] ; FE60
;8;�NE R2,R2,#&80
;B;�REQ R2,R2,#&80
;L;STRB R2,[R0,#&60] ; FE60
;V
;`LDRB R1,[R0,#&6B] ; FE6B
;j� R1,R1,#&C0
;tTST R1,#&C0
;~LDRB R2,[R0,#&60] ; FE60
;��EQ R2,R2,#&80
;��RNE R2,R2,#&80
;�STRB R2,[R0,#&60] ; FE60
;�
;�
;�MOV PC,R14
;�.return_addr
;�
EQUD 0
;�
;�.roms_addr
;�
EQUD 0
;�
<.timer4
<
LDRB R1,[mem,#T4mode]
<
CMP R1,#0
<
�Q PC,R14
<(
MOV R0,#0
<2STRB R0,[mem,#T4mode]
<<
<F
<PLDRB R1,[mem,#ifr2]
<Z3�R R1,R1,#%00100000 ; interrupt is from timer 4
<dSTRB R1,[mem,#ifr2]
<n
<xMOV PC,R14
<�
<�
<�;.trace2
<�;EQUD 0
<�
<�
.reset
<�;MOV R1,#1
<�;STR R1,trace
<�*MOV R0,#15 : MOV R1,#0 : SWI "OS_Byte"
<�MOV R0,#&10000
<�SUB R0,R0,#4
<�LDR R0,[mem,R0]
<�MOV zpc,R0,LSL#16
='BIC F,F,#%1000 ; clear Decimal mode
=)�R F,F,#%100  ; set interrupt disable
=�fetch2
="
=,
=6	.exit
=@
MOV R0,#0
=J.raw_exit2
=TSWI "6502_Getkdata"
=^
.raw_exit
=hSTR time,[mem,#min]
=rSTR 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
=�
=�
=�.fe08_read
=�
EQUB 0
=�.fe08_write
=�
EQUB 0
>	.fe09
>
EQUB 0
>
;.fe10
>&;EQUB 0
>0	ALIGN
>:.tbuffer
>D
EQUD 0
>N
>X.tape_fetch
>b;LDR R0,[mem,#tapeR]
>l0;MOV R0,#&3400 ; 2000000/(1200/8)~=1200 baud
>vMOV R0,#&6000
>�ADDS R1,R1,R0
>�MOVLE R1,#&6000
>�
>�LDRB R0,[mem,#fe10]
>�TST R0,#&80 ; is *Motor on?
>��Q R1,#&100000
>�
>�STR R1,[mem,#tape_count]
>�
>�
�Q PC,R14
>�
>�LDRB R1,[mem,#tape_handle]
>�
CMP R1,#0
?
�Q PC,R14
?
?
.tape_get
? SWI "XOS_BGet"
?*MOVVS R1,#0
?4 STRVSB R1,[mem,#tape_handle]
?>MOVVS PC,R14
?H
?RBCC tape_skip10
?\
?f
MOV R0,#1
?p
MOV R2,#0
?z)SWI "XOS_Args" ; rewind tape to start
?�MOVVS R1,#0
?� STRVSB R1,[mem,#tape_handle]
?�MOVVS PC,R14
?�
?�.tape_skip10
?�
?�CMP R0,#&FF
?�BNE not_FF
?�SWIEQ "XOS_BGet"
?�CMP R0,#&FF
?�BEQ not_FF
?�
?�LDRB R1,fe08_read
@BIC R1,R1,#%100
@� R0,R0,#%100
@�R R1,R1,R0
@$;�R R1,R1,#&80 ; ??
@.STRB R1,fe08_read
@8
@B
CMP R0,#0
@L
@V;MOV R0,#&10000
@`;STR R0,[mem,#tape_count]
@j
@t;B do_interrupt
@~
�Q PC,R14
@�
@��R R1,R1,#&80
@�STRB R1,fe08_read
@�B do_interrupt
@�
@�.not_FF
@�STRB R0,fe09
@�
@�
@�LDRB R0,fe08_write
@�.TST R0,#&80 ; receive interrupt enable bit
@�
�Q PC,R14
A
A
LDRB R0,fe08_read
A�R R0,R0,#&81
ASTRB R0,fe08_read
A(
A2B do_interrupt
A<;MOV PC,R14
AF
AP
.readFE08
AZ;LDRB R1,tbuffer
Ad;LDRB R0,[mem,#&C2]
An;CMP R0,#1
AxLDRB R0,fe08_read
A�;CMPEQ R1,#�"*"
A�;�REQ R0,R0,#%100
A�;BICNE R0,R0,#%100
A�MOV PC,R14
A�
A�
.readFE09
A�LDRB R0,fe08_read
A�BIC R0,R0,#&81
A�STRB R0,fe08_read
A�LDRB R0,fe09
A�MOV PC,R14
A�
A�.writeFE08
BSTRB R0,fe08_write
BMOV PC,R14
B
B".writeFE09
B,MOV PC,R14
B6
B@
.readFE10
BJMOV R0,#&A2
BTMOV PC,R14
B^
Bh.writeFE10
BrSTRB R0,[mem,#fe10]
B|MOV PC,R14
B�
B�
.dummy
B�MOV PC,R14
B�
B�;.ROMSEL
B�;EQUD 0
B�
B�;.rom ; ROM paged in
B�;EQUD 0
B�
B�#;.ROMRAM ; which banks are RAM?
B�);EQUD 0 : ;EQUD 0 : ;EQUD 0 : ;EQUD 0
B�
C;.ACCCON
C;EQUD 0
C
C&
C0.swap_main_shadow
C:
CD STMFD mem,{R0-R2,R4-R11,R14}
CNADD R14,mem,#&3000
CXSUB R13,mem,#&10000
CbMOV R12,#&5000
Cl.swap_loop
CvLDMIA R14,{R0-R2,R4-R5}
C�;LDR R0,[R14,#0]
C�;LDR R1,[R14,#4]
C�;LDR R2,[R14,#8]
C�;LDR R4,[R14,#12]
C�;LDR R5,[R14,#16]
C�
C�LDMIA R13,{R6-R10}
C�;LDR R6,[R13,#0]
C�;LDR R7,[R13,#4]
C�;LDR R8,[R13,#8]
C�;LDR R9,[R13,#12]
C�;LDR R10,[R13,#16]
C�
DSTMIA R13!,{R0-R2,R4-R5}
D;STR R0,[R13,#0]
D;STR R1,[R13,#4]
D ;STR R2,[R13,#8]
D*;STR R4,[R13,#12]
D4;STR R5,[R13,#16]
D>
DHSTMIA R14!,{R6-R10}
DR;STR R6,[R14,#0]
D\;STR R7,[R14,#4]
Df;STR R8,[R14,#8]
Dp;STR R9,[R14,#12]
Dz;STR R10,[R14,#16]
D�
D�;ADD R14,R14,#20
D�;ADD R13,R13,#20
D�SUBS R12,R12,#20
D�BHI swap_loop
D�
D� LDMEA mem,{R0-R2,R4-R11,R14}
D�B swap_exit
D�
D�
D�(.strb_rom_ret2 ; between C000 � E000
D�LDRB R2,[mem,#ACCCON]
D�TST R2,#%1000
E!;SUBNE R13,mem,#(&C000+&A000)
E;STRNEB R0,[R13,R1]
ESTRNEB R0,[mem,R1]
E$MOV PC,R14
E.
E8.acccon
EB]
EL"� �master � [OPTp:MOV PC,R14:]
EV	[OPTp
E`LDRB R1,[mem,#ACCCON]
EjSTRB R0,[mem,#ACCCON]
Et� R2,R0,R1
E~
E�,TST R2,#%1 ; main/shadow to be displayed
E�STRNEB R12,[mem,#tamper]
E�
E�;MOV PC,R14
E�
E�.;TST R2,#%100 ; main/shadow to be paged in
E�;BNE swap_main_shadow
E�.swap_exit
E�
E�'�S R2,R2,#%1000 ; filing system RAM
E�
�Q PC,R14
E�
FSTMFD mem,{R0-R2,R4-R9,R14}
F

FTST R1,#%1000
FBEQ os_out
F(;BNE os_in
F2
F<.os_in ; RJW
FFLDR R12,roms_addr
FP.ADD R12,R12,#16*16*1024 ; 17th ROM = OS3.2
FZMOV R13,#&2000
FdSUB R2,mem,#&B000
FnADD mem,mem,#&C000
Fx.os_in_loop
F�(LDMIA mem, {R0,R1,R4,R5,R6,R7,R8,R9}
F�(STMIA R2!, {R0,R1,R4,R5,R6,R7,R8,R9}
F�(LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R9}
F�*STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R9}
F�SUBS R13,R13,#4*8
F�BGT os_in_loop
F�SUB mem,mem,#&E000
F�LDMEA mem,{R0-R2,R4-R9,PC}
F�
F�.os_out ; RJW
F�MOV R13,#&2000
F�SUB R2,mem,#&B000
F�ADD mem,mem,#&C000
G.os_out_loop
G'LDMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R9}
G*STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R9}
G"SUBS R13,R13,#4*8
G,BGT os_out_loop
G6SUB mem,mem,#&E000
G@LDMEA mem,{R0-R2,R4-R9,PC}
GJ
GT&.strb8000      ; greater than 8000
G^]
Gh� master �
Gr	[OPTp
G|CMP R1,#&E000
G�BGE strb_rom_ret
G�CMP R1,#&C000
G�BGE strb_rom_ret2
G�CMP R1,#&9000
G�BGE strb_rom
G�]
G��
G�	[OPTp
G�CMP R1,#&C000
G�BGE strb_rom_ret
G�]
G��
G�	[OPTp
H
HLDRB R12,[mem,#rom]
HTST R12,#&80
H&BEQ strb_rom
H0
H:0;SUB R13,mem,#(&8000+&B000) ; 4k Private RAM
HD;STRB R0,[R13,R1]
HNSTRB R0,[mem,R1]
HXMOV PC,R14
Hb
Hl
.strb_rom
HvSUB R12,mem,#-ROMRAM
H�LDRB R13,[mem,#rom]
H�LDRB R13,[R12,R13]
H�CMP R13,#0
H�STREQB R0,[mem,R1]
H�MOV PC,R14
H�;B strb_rom_ret
H�
H�.romsel
H�LDRB R12,[mem,#ROMSEL_ON]
H�CMP R12,#0
H�MOVNE PC,R14
H�
H�LDRB R1,[mem,#rom]
I
I]
I� �master �
I 	[OPTp
I*� R0,R0,#%1111
I4DCMP R0,R1 : �Q PC,R14 ; WAR (used to) need this commented out!?!
I>B romsel_next
IH]
IR�
I\	[OPTp
If
Ip� R0,R0,#%10001111
Iz
I�DCMP R0,R1 : �Q PC,R14 ; WAR (used to) need this commented out!?!
I�
I�� R2,R0,R1
I�)�S R2,R2,#%10000000 ; private RAM bit
I�%BEQ romsel_next ; bit not changed
I�
I�TST R1,#%10000000
I�)BNE private_out ; map out private RAM
I�(BEQ private_in  ; map in private RAM
I�
I�
I�
I�.romsel_next
JLDR R12,roms_addr
J� R2,R0,#&F ; socket number
JLDRB R1,[mem,#rom]
J$� R1,R1,#&F
J.STRB R0,[mem,#rom]
J8SUB R13,mem,#-ROMRAM
JBLDRB R13,[R13,R1]
JL1CMP R13,#0 ; is the bank being paged out RAM?
JVBNE romsel2
J`
Jj.TST R0,#%10000000 ; private RAM mapped in?
Jt�Q R13,#&8000
J~MOVNE R13,#&9000
J�� R0,R0,#&F
J�
J�ADD R2,R12,R1,LSL#14
J�ADDNE R2,R2,#&1000
J�&ADD R12,R12,R0,LSL#14 ; R0*16*1024
J�ADDNE R12,R12,#&1000
J�ADR R1,romsel_loop_temp
J�STMIA R1,{R0,R4-R8,R14}
J�ADD mem,mem,R13
J�RSB R13,R13,#&C000
J�.romsel_loop
J�(LDMIA mem,{R0,R1,R4,R5,R6,R7,R8,R14}
K(STMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R14}
K
)LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R14}
K+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
KSUBS R13,R13,#4*8
K(BNE romsel_loop
K2SUB mem,mem,#&C000
K<ADR R1,romsel_loop_temp
KFLDMIA R1,{R0,R4-R8,PC}
KP.romsel_loop_temp
KZEQUD 0:EQUD 0:EQUD 0:EQUD 0
KdEQUD 0:EQUD 0:EQUD 0:EQUD 0
Kn
Kx.romsel_empty
K�ADD R13,R2,R2,LSL#8
K�ADD R13,R13,R13,LSL#16
K�ADD R0,mem,#&8000
K�STR R13,[R0,#0]
K�STR R13,[R0,#4]
K�STR R13,[R0,#8]
K�STR R13,[R0,#12]
K�MOV PC,R14
K�
K�.romsel2
K�
K�SUB R13,mem,#-ROMRAM
K�LDRB R13,[R13,R2]
L3CMP R13,#2 ; is the bank being paged out empty?
LBEQ romsel_empty
L
L".TST R0,#%10000000 ; private RAM mapped in?
L,�Q R13,#&8000
L6MOVNE R13,#&9000
L@� R0,R0,#&F
LJ
LT
L^&ADD R12,R12,R0,LSL#14 ; R0*16*1024
LhADDNE R12,R12,#&1000
LrADD mem,mem,R13
L|RSB R13,R13,#&C000
L�ADR R1,romsel_loop_temp
L�STMIA R1,{R0,R4-R8,R14}
L�.romsel2_loop
L�+LDMIA  R12 !,{R0,R1,R4,R5,R6,R7,R8,R14}
L�+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
L�;LDR R1,[R12],#4
L�=;STR R1,[mem],#4 ; store byte from ROM in main memory map
L�SUBS R13,R13,#4*8
L�BNE romsel2_loop
L�SUB mem,mem,#&C000
L�ADR R1,romsel_loop_temp
L�LDMIA R1,{R0,R4-R8,PC}
L�
M.private_in ; RJW
MSTMFD mem,{R0-R2,R4-R10}
MLDR R2,roms_addr
M&� R1,R1,#&F
M0$ADD R2,R2,R1,LSL#14 ; R1*16*1024
M:SUB R12,mem,#&B000-&8000
MDMOV R13,#&1000
MNADD mem,mem,#&8000
MX.priv_in_loop
Mb+LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
Ml+STMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
Mv+LDMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
M�+STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
M�SUBS R13,13,#4*8
M�BNE priv_in_loop
M�SUB mem,mem,#&9000
M�LDMEA mem,{R0-R2,R4-R10}
M�B romsel_next
M�
M�.private_out ; RJW
M�STMFD mem,{R0-R2,R4-R10}
M�LDR R2,roms_addr
M�LDRB R1,[mem,#rom]
M�� R1,R0,#&F
M�$ADD R2,R2,R1,LSL#14 ; R1*16*1024
NSUB R12,mem,#&B000-&8000
NMOV R13,#&1000
NADD mem,mem,#&8000
N .priv_out_loop
N*+LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
N4+STMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
N>+LDMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
NH+STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
NRSUBS R13,R13,#4*8
N\BNE priv_out_loop
NfSUB mem,mem,#&9000
NpLDMEA mem,{R0-R2,R4-R10}
NzB romsel_next
N�
N�.crt
N�SUB R1,mem,#512 ; sheila
N�LDRB R12,[R1,#0]
N�� R12,R12,#%11111
N�CMP R12,#17
N�MOVHI PC,R14
N�;ADR R13,crt_regs
N�SUB R13,mem,#-crt_regs
N�LDRB R1,[R13,R12]
N�%CMP R1,R0 : �Q PC,R14 ; no change
N�STRB R0,[R13,R12]
N�ADD PC,PC,R12,LSL#2
O$MOV R0,R0 ; padding for pipeline
O)MOV PC,R14                    ; reg 0
O)B new_horizvert               ; reg 1
O$)MOV PC,R14                    ; reg 2
O.)MOV PC,R14                    ; reg 3
O8)MOV PC,R14                    ; reg 4
OB)MOV PC,R14                    ; reg 5
OL)B new_horizvert               ; reg 6
OV)MOV PC,R14                    ; reg 7
O`)MOV PC,R14                    ; reg 8
Oj)MOV PC,R14                    ; reg 9
Ot*B cursor_start                ; reg 10
O~*B cursor_end                  ; reg 11
O�*B crt12                       ; reg 12
O�*B crt13                       ; reg 13
O�*B cursor_changed              ; reg 14
O�*B cursor_changed              ; reg 15
O�*MOV PC,R14                    ; reg 16
O�*MOV PC,R14                    ; reg 17
O�
O�
O�
O�JCMP R12,#14 : CMPNE R12,#15 : �Q R0,#1 : STREQ R0,[mem,#cursor_tamper]
O�"CMP R12,#10 : BEQ cursor_start
O� CMP R12,#11 : BEQ cursor_end
P(CMP R12,#12 : BEQ crt12 : .crt12cont
P
CMP R12,#12
PCMPNE R12,#13
PCMPNE R12,#1
P(CMPNE R12,#6
P2MOVNE PC,R14
P<MOV R13,#1
PFSTR R13,[mem,#tamper]
PPCMP R12,#1
PZCMPNE R12,#6
PdBEQ new_horizvert
Pn;CMP R12,#13
Px;SWIEQ "6502_UpdateScreen"
P�CMP R12,#12
P�CMPNE R12,#13
P�MOVNE PC,R14
P�B recalc_wrap
P�
P�.cursor_changed
P�
MOV R0,#1
P� STRB R0,[mem,#cursor_tamper]
P�MOV PC,R14
P�
P�.new_horizvert
P�MOV R13,#1
P�STR R13,[mem,#tamper]
QSUB R12,R1,R0
QCMP R12,#2
QMOVLE PC,R14
Q"+MOV R12,#255 : STRB R12,[mem,#lastmode]
Q,MOV PC,R14
Q6
Q@
.crt12
QJCMP R0,#%0110
QTMOVLT R0,#%110
Q^STRB R0,[R13,R12]
Qh;B crt12cont
Qr
.crt13
Q|
Q�TST F,#1<<11
Q�;]
Q�;� � HWScroll �
Q�
;[OPTp
Q�
�Q R13,#1
Q�=STREQ R13,[mem,#tamper]   ; don't want this for HW Scroll
Q�BEQ recalc_wrap
Q�;]
Q�;�
Q�
Q�
;[OPTp
Q�; HW scroll
Q�LDR R12,updatepixelV
RADR R13,dohardware_scroll
RCMP R12,R13
RSTRNE R13,updatepixelV
R&
R0B recalc_wrap
R:
RD.dohardware_scroll
RN'; Here we do the hardware scrolling
RXSTR R14,yuk
RbBL dohardwarescroll
RlBL poke_updatepixelV
RvLDR R14,yuk
R�); Then we go do the update as normal.
R�4;LDR PC,dohardware_scrollV ; old contents of upV
R�LDR PC,updatepixelV
R�
R�.yuk
R�
EQUD 0
R�
R�;.dohardware_scrollV
R�;EQUD 0
R�
R�.dohardwarescroll
R��dohardwarescroll
R�
S;.screenwidthchanged
S;MOV PC,R14
S
S  .hardware_scroll_stack_space
S*]:P%+=256:O%+=256:[OPT p
S4$.hardware_scroll_stack_space_top
S>]
SH
SR�
S\
Sf	[OPTp
Sp"; end of hardware scroll stuff
Sz
S�.cursor_start
S�\LDRB R1,[mem,#cursor_on]
S�\CMP R1,#0:\MOVNE PC,R14
S�TST F,#1 << 10 ; cursor on?
S�
�Q PC,R14
S�LDRB R1,[mem,#crt_regs+11]
S�� R1,R1,#%11111
S�� R2,R0,#%11111
S�
CMP R2,R1
S�BGT blank_cursor
S�
S�� R0,R0,#%100000
S�TST R0,#%1100000
TBEQ blank_cursor
TB define_cursor
T
T$.cursor_end
T.\LDRB R1,[mem,#cursor_on]
T8\CMP R1,#0:\MOVNE PC,R14
TBTST F,#1 << 10 ; cursor on?
TL
�Q PC,R14
TV� R1,R0,#%11111
T`LDRB R2,[mem,#crt_regs+10]
Tj� R2,R2,#%11111
Tt
CMP R2,R1
T~BGT blank_cursor
T�B define_cursor
T�;MOV PC,R14
T�
T�	.link
T�
EQUD 0
T�
T�.caps_lock
T�� R0,R0,#%1000
T�MOV R1,R0,LSL#1
T�MOV R0,#202
T�MOV R2,#%11101111
T�SWI "OS_Byte"
UMOV R0,#118
U
SWI "OS_Byte"
UMOV PC,R14
U
U(
.latch
U2;�R R0,R0,#%110000
U<';STRB R0,[mem,R1] ; no fire buttons
UF�S R2,R0,#%111
UP
UZ;RJW
Ud;CMP R2,#0
UnTSTEQ F,#1<<12 ; sound on?
UxBEQ sound_latch
U�
CMP R2,#3
U�BEQ latch_keyb
U�
CMP R2,#6
U�BEQ caps_lock
U�LDRB R12,[mem,#crt_regs+19]
U�
CMP R2,#4
U��EQ R13,R0,#%1000
U�BICEQ R12,R12,#%1
U��REQ R12,R12,R13,LSR#3
U�
CMP R2,#5
U��EQ R13,R0,#%1000
U�BICEQ R12,R12,#%10
U��REQ R12,R12,R13,LSR#2
VSTRB R12,[mem,#crt_regs+19]
V
V.recalc_wrap
V"LDRB R12,[mem,#crt_regs+19]
V,�S R12,R12,#%11
V6MOVNE R13,#&5800
V@�Q R13,#&4000
VJCMP R12,#%10
VT�Q R13,#&3000
V^CMP R12,#%01
Vh�Q R13,#&6000
Vr
V|LDRB R12,[mem,#crt_regs+13]
V�LDRB R2,[mem,#crt_regs+12]
V�� R2,R2,#%1111
V�ADD R12,R12,R2,LSL#8
V�
V�CMP R13,R12,LSL#3
V�MOVGT R13,R12,LSL#3
V�
V�SUB R12,mem,#512 ; sheila
V�LDRB R12,[R12,#&20]
V�
V�TST R12,#%10 ; teletext?
V�MOVNE R13,#&7C00
V�
W;� F,F,#&FF
WBIC F,F,#&FF000000
WBIC F,F,#&FF0000
W&�R F,F,R13,LSL#16
W0;STR R13,wrap_addr
W:MOV PC,R14
WD
WN
WX.latch_keyb
Wb
Wl� R2,R0,#%1000
WvSTRB R2,key_write_ena
W�CMP R2,#%1000
W�MOVNE PC,R14
W�
MOV R2,#0
W�STRB R2,column_counter
W�MOV PC,R14
W�
W�.printer_write
W�SWI &102
W�SWI &101
W�SWI "OS_WriteC"
W�MOV R0,#152 : MOV R1,#3
W�(SWI "OS_Byte" ; check printer buffer
W�BCS printer_on
XMOV R0,#21 : MOV R1,#3
X SWI "OS_Byte" ; flush buffer
X.printer_on
X SWI &103
X*LDRB R0,[mem,#ifr2]
X4�R R0,R0,#%10
X>STRB R0,[mem,#ifr2]
XHMOV PC,R14
XR
X\.regB_41
Xf
XpSUB R12,mem,#512 ; sheila
XzLDRB R1,[R12,#&C] ; PCR
X�LDRB R2,[mem,#ifr]
X�� R13,R1,#%1110
X�TEQ R13,   #%0010
X�TEQNE R13, #%0110
X�BICEQ R2,R2,#%11
X�BICNE R2,R2,#%10
X�STRB R2,[mem,#ifr]
X�.regB_4F
X�SUB R12,mem,#512 ; sheila
X�
X�=STRB R0,sound_data            ; keep a copy in sound_data
X�
X�*LDRB R2,[R12,#&43] ; R2=data direction
Y� R1,R0,R2
Y;MOV R1,R0
Y@�S R0,R1,#%01110000 : MOVNE R0,#0 : STRNEB R0,column_counter
Y$;� R1,R1,#&FF
Y.;SWI "6502_Getkeyaddr"
Y8LDR R0,[mem,#key_addr]
YB!LDRB R2,[R0] ; shift pressed?
YL
CMP R2,#0
YVADDNE R0,R0,#256
Y`
Yj� R2,R1,#&F
Yt)CMP R2,#&F ; column counter disabled?
Y~BEQ disable_column_counter
Y�LDRB R2,column_counter
Y�CMP R2,#&F
Y�BEQ check_row
Y�
Y�;BIC R1,R1,#&80
Y�LDRB R0,[R0,R1]
Y�$;� R0,R0,R1,LSR#7 ; ************
Y�;� R0,R0,#1
Y�;CMP R0,#0 : ;�Q R1,#0
Y��R R0,R1,R0,LSL#7
Y�;MOV R0,R1,LSL#7
Y�;MOV R0,R1
Z;ADD R0,R1,R1,LSL#7
Z

Z;MOV R0,#&81
Z;MOV R2,#&FF
Z(;SWI "OS_Byte"
Z2;CMP R0,#98 ; space
Z<;CMP R1,#&FF
ZF;�Q R0,#&80
ZP;MOVNE R0,#0
ZZSTRB R0,[R12,#&4F]
ZdSTRB R0,[R12,#&41]
ZnMOV PC,R14
Zx
Z�.column_counter
Z�
EQUD 0
Z�.key_write_ena
Z�
EQUD 0
Z�
Z�.disable_column_counter
Z�STRB R2,column_counter
Z�.check_row
Z�� R1,R1,#%00001111
Z�MOV R13,#0
Z�;SWI "6502_Getkeyaddr"
Z�LDR R0,[mem,#key_addr]
Z�!LDRB R2,[R0] ; shift pressed?
[
CMP R2,#0
[ADDNE R0,R0,#256
[
["
.row_loop
[,LDRB R2,[R0,R1]
[6�R R13,R13,R2
[@ADD R1,R1,#%10000
[JTST R1,#%1110000
[TBNE row_loop
[^�S R12,R13,#%1
[hLDRNEB R13,[mem,#ifr]
[r�RNE R13,R13,R12
[|STRNEB R13,[mem,#ifr]
[�SUB R0,mem,#512 ; sheila
[�LDRB R1,[R0,#&4F]
[�BIC R1,R1,#&80
[��R R1,R1,R12,LSL#7
[�STRB R1,[R0,#&4F]
[�STRB R1,[R0,#&41]
[�MOV PC,R14
[�
[�.interrupt_flags
[�LDRB R2,[mem,#ifr]
[�BIC R2,R2,R0
[�STRB R2,[mem,#ifr]
[�MOV PC,R14
\
\
\.interrupt_enable
\&LDRB R1,[mem,#ier]
\0TST R0,#&80
\:BICEQ R1,R1,R0
\D�RNE R1,R1,R0
\N�R R1,R1,#&80 ; &81
\XSTRB R1,[mem,#ier]
\b;TST time,#%1
\l;SUBNE time,time,#1
\vMOV PC,R14
\�
\�.interrupt_flags2
\�LDRB R2,[mem,#ifr2]
\�BIC R2,R2,R0
\�STRB R2,[mem,#ifr2]
\�MOV PC,R14
\�
\�
\�.interrupt_enable2
\�LDRB R1,[mem,#ier2]
\�TST R0,#&80
\�BICEQ R1,R1,R0
\��RNE R1,R1,R0
]�R R1,R1,#&80 ; &81
]STRB R1,[mem,#ier2]
]MOV PC,R14
] 
]*
.flash
]4;LDRB R1,elite
]>;CMP R1,#0
]H;BNE skip_fe20
]RTST F,#1 << 8 ; patch on?
]\BNE skip_fe20
]fLDRB R12,[mem,#fe20]
]p� R1,R12,#%11100
]z� R2,R0, #%11100
]�
CMP R1,R2
]�MOVNE R2,#1
]�STRNEB R2,[mem,#tamper]
]�
]�� R1,R12,#%11100000
]�� R2,R0, #%11100000
]�
CMP R1,R2
]�MOVNE R2,#1
]�"STRNEB R2,[mem,#cursor_tamper]
]�
]�.skip_fe20
]�LDRB R12,[mem,#fe20]
]�STRB R0,[mem,#fe20]
^TST R0,#%1
^�Q R0,#9
^MOVNE R0,#10
^$
MOV R1,#0
^.SWI "OS_Byte"
^8-B poke_updatepixelV ; includes MOV PC,R14
^B;MOV PC,R14
^L
^V
;.fe20
^`;EQUD 0
^j
^t;.crt_regs
^~;EQUD 0
^�;EQUD 0
^�;EQUD 0
^�;EQUD 0
^�;EQUD 0
^�
^�@; include the sound code here contained in the Sound library
^��sound_latch
^�
^�
^��screen
^�
^�]
_(� HWScroll � [OPTp:�hardwarescroll:]
_
	[OPTp
_
_
_(.FFpage
_2;SUB time,time,#1
_<MOV PC,R14
_F
_P.update_pal
_ZLDRB R1,[mem,#Palette]
_d
CMP R1,#0
_nMOVNE PC,R14
_x.force_update_pal
_�STR R14,[mem,#Palette+4]
_�SUB R13,mem,#-pal_regs
_�LDRB R0,[R13,#0]
_�
BL do_pal
_�LDRB R0,[R13,#1]
_�
BL do_pal
_�LDRB R0,[R13,#2]
_�
BL do_pal
_�LDRB R0,[R13,#3]
_�
BL do_pal
_�LDRB R0,[R13,#4]
_�
BL do_pal
_�LDRB R0,[R13,#5]
`
BL do_pal
`LDRB R0,[R13,#6]
`
BL do_pal
`"LDRB R0,[R13,#7]
`,
BL do_pal
`6LDRB R0,[R13,#8]
`@
BL do_pal
`JLDRB R0,[R13,#9]
`T
BL do_pal
`^LDRB R0,[R13,#10]
`h
BL do_pal
`rLDRB R0,[R13,#11]
`|
BL do_pal
`�LDRB R0,[R13,#12]
`�
BL do_pal
`�LDRB R0,[R13,#13]
`�
BL do_pal
`�LDRB R0,[R13,#14]
`�
BL do_pal
`�LDRB R0,[R13,#15]
`�
BL do_pal
`�)MOV R14,#0:STRB R14,[mem,#pal_tamper]
`�LDR PC,[mem,#Palette+4]
`�
`�
`�.palette
aSUB R12,mem,#-pal_regs
aSTRB R0,[R12,R0,LSR#4]
a
a&LDRB R1,[mem,#Palette]
a0
CMP R1,#0
a:MOVNE PC,R14
aD
aN)MOV R1,#255:STRB R1,[mem,#pal_tamper]
aXMOV PC,R14
ab
al.do_pal
avLDRB R1,[mem,#fe20]
a�TST R1,#%10
a�MOVNE PC,R14 ; mode 7
a�� R1,R1,#%11100
a�"CMP R1,#%11100 : BEQ twocolpal
a�"CMP R1,#%01000 : BEQ twocolpal
a�#CMP R1,#%11000 : BEQ fourcolpal
a�#CMP R1,#%00100 : BEQ fourcolpal
a�
a�
a�.sixteencolpal
a�� R1,R0,#&F
a�MOV R0,R0,LSR#4
a�� R1,R1,#7
b
b;CMP R0,#0 ; for Exile
b;SWINE ETC ETC
b 
b*SWI &100+19
b4SWI "OS_WriteC"
b>
MOV R0,R1
bHSWI "OS_WriteC"
bRSWI &100
b\SWI &100
bfSWI &100
bpMOV PC,R14
bz
b�.twocolpal
b�� R1,R0,#&F
b�MOV R0,R0,LSR#7
b�� R1,R1,#7
b�
CMP R0,#1
b��Q R0,#3 ; mode 4 fix
b�SWI &100+19
b�SWI "OS_WriteC"
b�
MOV R0,R1
b�SWI "OS_WriteC"
b�SWI &100
b�SWI &100
b�SWI &100
cMOV PC,R14
c
c.fourcolpal
c$� R1,R0,#&F
c.� R0,R0,  #%10100000
c8TST R0,     #%10000000
cB�RNE R0,R0,#%01000000
cLBICNE R0,R0,#%10000000
cVMOV R0,R0,LSR#5
c`� R1,R1,#7
cjSWI &100+19
ctSWI "OS_WriteC"
c~
MOV R0,R1
c�SWI "OS_WriteC"
c�SWI &100
c�SWI &100
c�SWI &100
c�MOV PC,R14
c�
c�.osbput
c�MOV R0,A,LSR#24
c�MOV R1,Y,LSR#24
c�SWI "XOS_BPut"
c�BVS swi_error
c�B opcode(&60) ; rts
d
d
.osbget
dMOV R0,A,LSR#24
dMOV R1,Y,LSR#24
d(SWI "XOS_BGet"
d2BVS swi_error
d<MOV A,R0,LSL#24
dF�setupC
dPB opcode(&60) ; rts
dZ
dd.swi_error
dnADD mem,mem,#&100
dxADD mem,mem,#&002
d�MOV R1,#0 ; BRK
d�STRB R1,[mem,#-2]
d�LDRB R1,[R0] ; error no
d�STRB R1,[mem,#-1]
d�ADD R0,R0,#4
d�MOV R14,#0
d�
d�.swi_err_loop
d�LDRB R13,[R0,R14]
d�CMP R13,#0
d�;MOV R13,#�"A"
d�STRB R13,[mem,R14]
d�ADD R14,R14,#1
e�Q R14,#255
eCMP R14,#253
eBLE swi_err_loop
e"
e,MOV zpc,#&100 << 16
e6SUB mem,mem,#&100
e@SUB mem,mem,#&002
eJ�fetch2
eT
e^.return_ROMSEL
ehLDRB R0,[mem,#rom]
erMOV PC,R14
e|
e�.return_ACCCON
e�LDRB R0,[mem,#ACCCON]
e�MOV PC,R14
e�
e�
e�
e�.strb_rom_ret
e�
e�.sheila
e�SUBS R2,R1,#&FE00
e�MOVLT PC,R14
e�SUBS R2,R2,#&100
e�MOVGE PC,R14
f;BGE FFpage
f
fTST time,#%1
f&SUBNE time,time,#1
f0SUBEQ time,time,#2
f:
fD;STRB R0,[mem,R1]
fN&SUB R2,mem,#&10000:STRB R0,[R2,R1]
fX
fb� R2,R1,#&FF
fl;ADR R1,sheila_writetab
fvLDR PC,[PC,R2,LSL#2]
f�!EQUD 0 ; padding for pipeline
f�.sheila_writetab
f�	; 0-F
f�EQUD dummy
f�EQUD crt
f�EQUD dummy
f�EQUD crt
f�EQUD dummy
f�EQUD crt
f�EQUD dummy
f�EQUD crt
f�EQUD writeFE08
f�EQUD writeFE09
g�equd(6,dummy)
g; 10-17
gEQUD writeFE10
g �equd(7,dummy)
g*; 18-1F
g4EQUD write_ADC_status
g>�equd(7,dummy)
gH; 20-2F
gREQUD flash
g\EQUD palette
gf�equd(14,dummy)
gp; 30-3F
gz�equd(4,romsel)
g�EQUD acccon
g��equd(11,romsel)
g�; 40-4F
g�EQUD latch
g�EQUD regB_41
g�EQUD dummy
g�EQUD dummy
g�EQUD writeT1low_latch
g�EQUD writeT1high_count
g�EQUD writeT1low_latch
g�EQUD writeT1high_latch
g�EQUD writeT2low_latch
g�EQUD writeT2high_count
hEQUD dummy
hEQUD dummy
hEQUD dummy
h$EQUD interrupt_flags
h.EQUD interrupt_enable
h8EQUD regB_4F
hB; 50-5F
hLEQUD latch
hVEQUD regB_41
h`EQUD dummy
hjEQUD dummy
htEQUD writeT1low_latch
h~EQUD writeT1high_count
h�EQUD writeT1low_latch
h�EQUD writeT1high_latch
h�EQUD writeT2low_latch
h�EQUD writeT2high_count
h�EQUD dummy
h�EQUD dummy
h�EQUD dummy
h�EQUD interrupt_flags
h�EQUD interrupt_enable
h�EQUD regB_4F
h�; 60-7F
h�]
i� IO_Podule% �
i
	[OPTp
i�equd(&20,IOpodule_Write)
i]
i(�
i2	[OPTp
i<EQUD dummy
iFEQUD printer_write
iPEQUD dummy
iZEQUD dummy
idEQUD writeT3low_latch
inEQUD writeT3high_count
ixEQUD writeT3low_latch
i�EQUD writeT3high_latch
i�EQUD writeT4low_latch
i�EQUD writeT4high_count
i�EQUD dummy
i�EQUD writeACR2
i�EQUD dummy
i�EQUD interrupt_flags2
i�EQUD interrupt_enable2
i�EQUD printer_write
i�
i�EQUD dummy
i�EQUD printer_write
i�EQUD dummy
jEQUD dummy
jEQUD writeT3low_latch
jEQUD writeT3high_count
j"EQUD writeT3low_latch
j,EQUD writeT3high_latch
j6EQUD writeT4low_latch
j@EQUD writeT4high_count
jJEQUD dummy
jTEQUD dummy
j^EQUD dummy
jhEQUD interrupt_flags2
jrEQUD interrupt_enable2
j|EQUD printer_write
j�]
j��
j�
j�	[OPTp
j�; 80-BF
j��equd(&40,dummy)
j�; C0-CF
j�EQUD write_ADC_status
j��equd(15,dummy)
j�; D0-FF
j��equd(&30,dummy)
j�
j�.ldrb_FFpage
k;SUB time,time,#1
kMOV PC,R14
k
k&!.ldrb8000 ; greater than 8000
k0
k:CMP R1,#&FE00
kDBHS ldrb_sheila
kN
kXLDRB R0,[mem,R1]
kbMOV PC,R14
kl
kv
k�;MOV R1,R1,LSR#16
k�]
k�� master �
k�	[OPTp
k�$.ldrb16_8000 ; greater than 8000
k�
k�CMP R1,#&FE00 << 16
k�BHS ldrb16_sheila
k�
k�LDRB R0,[mem,R1,LSR#16]
k�MOV PC,R14
k�
k�.ldrb16_screen
lCMP R1,#&8000 << 16
lBHS ldrb16_8000
l
l LDRB R12,[mem,#ACCCON]
l*
l4CMP zpc,#&C000 << 16
l>MOVLT R13,R12,LSR#1
lHMOVGE R13,R12
lRCMP zpc,#&E000 << 16
l\5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
lf,                       ; we must look at
lp
lzTST R13,#%10
l�8SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
l�;�Q R13,mem
l�LDRNEB R0,[R13,R1,LSR#16]
l�LDREQB R0,[mem,R1,LSR#16]
l�MOV PC,R14
l�]
l��
l�	[OPTp
l�.ldrb16_screen
l�CMP R1,#&FE00 << 16
l�BHS ldrb16_sheila
l�
l�LDRB R0,[mem,R1,LSR#16]
mMOV PC,R14
m]
m�
m$
m.� master �
m8	[OPTp
mB
mL.ldrb_screen
mV!.ldrb3000 ; greater than 3000
m`
mjCMP R1,#&8000
mtBHS ldrb8000
m~
m�LDRB R12,[mem,#ACCCON]
m�
m�CMP zpc,#&C000 << 16
m�MOVLT R13,R12,LSR#1
m�MOVGE R13,R12
m�CMP zpc,#&E000 << 16
m�5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
m�,                       ; we must look at
m�
m�TST R13,#%10
m�8SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
m�;�Q R13,mem
nLDRNEB R0,[R13,R1]
n
LDREQB R0,[mem,R1]
nMOV PC,R14
n]
n(�
n2	[OPTp
n<.ldrb_screen
nF!.ldrb3000 ; greater than 3000
nPCMP R1,#&FE00
nZBHS ldrb_sheila
ndLDRB R0,[mem,R1]
nnMOV PC,R14
nx]
n��
n�
n�	[OPTp
n�
n�.ldrb16_sheila
n�MOV R12,R1,LSR#16
n�B ldrb_sheila2
n�
n�.ldrb_sheila
n�MOV R12,R1
n�
n�.ldrb_sheila2
n�LDRB R0,[mem,R12]
o
oSUBS R2,R12,#&FE00
oMOVLT PC,R14
o"SUBS R2,R2,#&100
o,BGE ldrb_FFpage
o6
o@'SUB R2,mem,#&10000:LDRB R0,[R2,R12]
oJ
oTSUB time,time,#1
o^
oh� R2,R12,#&FF
or;ADR R1,sheila_readtab
o|LDR PC,[PC,R2,LSL#2]
o�!EQUD 0 ; padding for pipeline
o�.sheila_readtab
o�	; 0-F
o��equd(8,dummy)
o�EQUD readFE08
o�EQUD readFE09
o��equd(6,dummy)
o�; 10-2F
o�EQUD readFE10
o��equd(&1F,dummy)
o�; 30-3F
o��equd(4,return_ROMSEL)
o��equd(4,return_ACCCON)
p�equd(8,dummy)
p; 40-4F
pEQUD ldrb40
p&EQUD ldrb41
p0EQUD dummy
p:EQUD dummy
pDEQUD readT1low_count
pNEQUD readT1high_count
pXEQUD readT1low_latch
pbEQUD readT1high_latch
plEQUD readT2low_count
pvEQUD readT2high_count
p�EQUD dummy
p�EQUD dummy
p�EQUD dummy
p�EQUD read_ifr
p�EQUD read_ier
p�EQUD ldrb4F
p�; 50-5F
p�EQUD ldrb40
p�EQUD ldrb41
p�EQUD dummy
p�EQUD dummy
p�EQUD readT1low_count
p�EQUD readT1high_count
qEQUD readT1low_latch
qEQUD readT1high_latch
qEQUD readT2low_count
q EQUD readT2high_count
q*EQUD dummy
q4EQUD dummy
q>EQUD dummy
qHEQUD read_ifr
qREQUD read_ier
q\EQUD ldrb4F
qf; 60-6F
qp]
qz� IO_Podule% �
q�	[OPTp
q��equd(&20,IOpodule_Read)
q�]
q��
q�	[OPTp
q�EQUD dummy
q�EQUD dummy
q�EQUD dummy
q�EQUD dummy
q�EQUD readT3low_count
q�EQUD readT3high_count
q�EQUD readT3low_latch
q�EQUD readT3high_latch
rEQUD readT4low_count
rEQUD readT4high_count
rEQUD dummy
r$EQUD dummy
r.EQUD dummy
r8EQUD read_ifr2
rBEQUD read_ier2
rLEQUD dummy
rV
r`EQUD dummy
rjEQUD dummy
rtEQUD dummy
r~EQUD dummy
r�EQUD readT3low_count
r�EQUD readT3high_count
r�EQUD readT3low_latch
r�EQUD readT3high_latch
r�EQUD readT4low_count
r�EQUD readT4high_count
r�EQUD dummy
r�EQUD dummy
r�EQUD dummy
r�EQUD read_ifr2
r�EQUD read_ier2
r�EQUD dummy
s]
s
�
s
s	[OPTp
s(; 80-FF
s2�equd(&80,dummy)
s<
sF�sound_misc
sP
sZ.opcode7
sdSWI &100+�"O"
snSWI &100+�"p"
sxSWI &100+�"7"
s�SWI &100+�" "
s��print(zpc)
s�
B opcode7
s�
s�%�align16 ; fit into cache better?
s�
s��opcodes
s�
s�.patch_screen
s�MOV PC,R14
s�.patch_pixel
s�MOV PC,R14
s�
t.end
t]
t�
t"8�"Load <6502Em$Dir>.SRC.revtable "+�~(code+mode0tab)
t,8�"Load <6502Em$Dir>.SRC.mode1tab "+�~(code+mode1tab)
t69�"Load <6502Em$Dir>.SRC.Hmode2tab "+�~(code+mode2tab)
t@9�"Load <6502Em$Dir>.SRC.Hmode4tab "+�~(code+mode4tab)
tJ9�"Load <6502Em$Dir>.SRC.Hmode5tab "+�~(code+mode5tab)
tT
t^�
th
trDE
t|�F
t�
t�
t�ݤldrb2(R,S)
t�� R<>0 � S<>1 � �
t�� master �
t�	[OPTp
t�;LDRB R,[mem,S]
t�;CMP S,#&FE00
t�;BLHS ldrb_sheila
t�CMP S,#&3000
t�LDRLOB R,[mem,S]
t�BLHS ldrb_screen
t�]
u�
u	[OPTp
uLDRB R,[mem,S]
u&CMP S,#&FE00
u0BLHS ldrb_sheila
u:]
uD�
uN=""
uX
ubݤldrb16(R,S)
ul� R<>0 � S<>1 � �
uv� master �
u�	[OPTp
u�;LDRB R,[mem,S,LSR#16]
u�;CMP S,#&FE00 << 16
u�;BLHS ldrb16_sheila
u�CMP S,#&3000 << 16
u�LDRLOB R,[mem,S,LSR#16]
u�BLHS ldrb16_screen
u�]
u��
u�	[OPTp
u�LDRB R,[mem,S,LSR#16]
u�CMP S,#&FE00 << 16
u�BLHS ldrb16_sheila
v]
v�
v=""
v 
v*ݤstrb(R,S)
v4� R<>0 � S<>1 � �
v>	[OPTp
vHCMP S,F,LSR#16 ; wrap_addr
vR;CMP S,#&3000
v\STRLTB R,[mem,S]
vf
BLGE strb
vp]
vz=""
v�
v�ݤstrb16(R,S)
v�� R<>0 � S<>1 � �
v�	[OPTp
v�;CMP S,#&C000 << 16
v�;STRLOB R,[mem,S,LSR#16]
v�MOV S,S,LSR#16
v�CMP S,F,LSR#16 ; wrap_addr
v�;CMP S,#&3000
v�STRLTB R,[mem,S]
v�BLGE strb ; 16
v�]
v�=""
w
wݤshowregs
w	[OPTp
w$�print(zpc)
w.
�print(A)
w8
�print(X)
wB
�print(Y)
wL�print(SP)
wV
�print(F)
w`ADD R12,mem,#&DF00
wjLDRB R12,[R12,#&DA]
wtMOV R12,R12,LSL#24
w~�print2(12)
w�SWI &10A
w�;SWI "OS_NewLine"
w�]
w�=""
w�
w�ݤprint(R)
w�
Ȏ R �
w�� zpc : A$=�print4(R)
w�.� F   : [OPTp:MOV R2,F,LSL#24:�print2(2):]
w�
w�A$=�print2(R)
w��
x=""
x

x� A   : A$=�print2(R)
x� X   : A$=�print2(R)
x(� Y   : A$=�print2(R)
x2-� SP  : [OPTp:SWI &100+�"1":�print2(SP):]
x<� F   : A$=�printflags
xF�
xP=""
xZ
xdݤprintflags
xn	[OPTp
xx4TST F,#%1<<7 : SWIEQ &100+�"n" : SWINE &100+�"N"
x�4TST F,#%1<<6 : SWIEQ &100+�"v" : SWINE &100+�"V"
x�4TST F,#%1<<5 : SWIEQ &100+�"0" : SWINE &100+�"1"
x�4TST F,#%1<<4 : SWIEQ &100+�"b" : SWINE &100+�"B"
x�4TST F,#%1<<3 : SWIEQ &100+�"d" : SWINE &100+�"D"
x�4TST F,#%1<<2 : SWIEQ &100+�"i" : SWINE &100+�"I"
x�4TST F,#%1<<1 : SWIEQ &100+�"z" : SWINE &100+�"Z"
x�4TST F,#%1<<0 : SWIEQ &100+�"c" : SWINE &100+�"C"
x�SWI &120
x�]
x�=""
x�
x�ݤprint2(R)
x��I%
y	[OPTp
yMOV R1,R
y]
y"
�I%=0 � 1
y,
[OPT p
y6MOV R1,R1,ROR#28
y@� R0,R1,#&F
yJCMP R0,#10
yTADDGE R0,R0,#7
y^ADD R0,R0,#48
yhSWI "OS_WriteC"
yr]
y|�
y�	[OPTp
y�SWI &120
y�]
y�=""
y�
y�ݤprint4(R)
y��I%
y�	[OPTp
y�MOV R1,R
y�]
y�
�I%=0 � 3
y�
[OPT p
y�MOV R1,R1,ROR#28
z� R0,R1,#&F
zCMP R0,#10
zADDGE R0,R0,#7
z&ADD R0,R0,#48
z0SWI "OS_WriteC"
z:]
zD�
zN	[OPTp
zXSWI &120
zb]
zl=""
zv
z�ݤprint32(R)
z��I%
z�	[OPTp
z�MOV R1,R
z�]
z��I%=0 � 31
z�
[OPT p
z�MOV R1,R1,ROR#28
z�� R0,R1,#&F
z�CMP R0,#10
z�ADDGE R0,R0,#7
z�ADD R0,R0,#48
z�SWI "OS_WriteC"
{]
{�
{	[OPTp
{ SWI &120
{*]
{4=""
{>
{Hݤprints(A$)
{R	[OPTp
{\SWI "OS_WriteS"
{fEQUS A$
{pEQUB 10
{zEQUB 13
{�
EQUB 0
{�	ALIGN
{�]
{�=""
{�
{�ݤundoc(A%)
{�� opcode%<>A% � �
{�	[OPTp
{�;TST F,#%1000
{�;SWIEQ &100+�"d"
{�;SWINE &100+�"D"
{�
{�!;SWI &100+�(��"0"+�~A%,2),1))
|;SWI &100+�(��~A%,1))
|;SWI &100+�" "
|;�print(zpc)
|$!;SWI &100+�" ":;SWI &100+�" "
|.
|8 ;MOV R0,#15 : ;SWI "OS_Byte"
|B
;SWI 4
|L]
|V=""
|`
|jݤequd(A%,B%)
|t�I%
|~�I%=1 � A%
|�	[OPTp
|�EQUD B%
|�]
|��
|�=""
|�
|�ݤdo_interrupt
|�	[OPTp
|�MOV R0,zpc,LSR#24
|��push(0)
|�MOV R0,zpc,LSR#16
|��push(0)
}$BIC F,F,#%10000 ; clear BRK flag
}
�push(F)
}�R F,F,#%100 ; !!!!!!
}"MOV R0,#&FF00 : ADD R0,R0,#&FE
}(LDR zpc,[mem,R0]
}2MOV zpc,zpc,LSL#16
}<]
}F=""
}P
}Zݤdivmod(A,B,C,D,E)
}ddiv%+=1
}n	[OPTp
}xMOV C,#1
}�MOV D,#0
}�MOV E,B
}�.divloop1(div%)
}�MOV B,B,LSL#1
}�MOV C,C,LSL#1
}�CMP B,A
}�BLO divloop1(div%)
}�
}�.divloop2(div%)
}�CMP B,A : BLS divjump(div%)
}�CMP B,E : BLS divjump(div%)
}�MOV B,B,LSR#1
}�MOV C,C,LSR#1
~B divloop2(div%)
~.divjump(div%)
~CMP B,A
~"SUBLS A,A,B
~,ADDLS D,D,C
~6CMP B,E
~@BHI divloop2(div%)
~J]
~T=""
~^
~hݤshadow
~r� master �
~|	[OPTp
~�LDRB R2,[mem,#ACCCON]
~�;� R2,R2,R2,LSR#2
~�TST R2,#%1
~�SUBNE R13,mem,#&13000
~��Q R13,mem
~�]
~��
~�	[OPTp
~�MOV R13,mem
~�]
~��
~�=""
~���clearmem(S%,E%)

P%=buffer
	[OPT2
EQUD S% ; memory
&EQUD E% ; memory+&8000
0
.clear
:
MOV R0,#0
DLDR R1,buffer
NLDR R2,buffer+4
X	.loop
bSTR R0,[R1],#4
l
CMP R1,R2
vBNE loop
�MOV PC,R14
�]
�� clear
��
�
�ݤfetch2
�	[OPTp
�LDRB R2,[mem,zpc,LSR#16]
�ADD PC,table,R2,LSL#8
�]
�=""
�
�ݤfetch3(N%,T%)
�+� N%<>0 � [OPTp:ADD zpc,zpc,#N% << 16:]
�	[OPTp
��showregs2
� SUBS time,time,#T%
�*LDRPLB R2,[mem,zpc,LSR#16]
�4ADDPL PC,table,R2,LSL#8
�>B fetch2
�H]
�R=""
�\
�fݤfetch(N%,T%)
�p+� N%<>0 � [OPTp:ADD zpc,zpc,#N% << 16:]
�z	[OPTp
���showregs2
��SUBS time,time,#T%
��LDRPLB R2,[mem,zpc,LSR#16]
��ADDPL PC,table,R2,LSL#8
��B fetch2
��]
��opcode%+=1
��� bcd_loop%=0 �
��� opcode(opcode%-1)=0 � �
��"� opcode(opcode%)<>0 � p=0 � �
��+� P%-opcode(0)>opcode%*4*64 � �~opcode%
��P%=opcode(0)+opcode%*4*64
��O%=code+P%
��
�P%=bcd(0)+opcode%*4*64
�O%=code+P%
�$�
�.=""
�8ݤbcd(A%) :
�B$� P%>opcode(0)+(A%+256)*4*64 � �
�L1P%=opcode(0)+(A%+256)*4*64 : O%=code+P% : =""
�V
�`
ݤalign16
�jȕ (P% � 15)<>0
�tP%+=1 : O%+=1
�~�
��=""
��� �error
���:� " at line ";�
���
��
��ݤshowregs2
��	[OPTp
��;BL show_regs
��]
��=""
�
00000000  0d 00 0a 0e f4 20 3e 20  36 35 30 32 45 6d 0d 00  |..... > 6502Em..|
00000010  14 25 f4 49 4e 50 55 54  22 48 61 72 64 77 61 72  |.%.INPUT"Hardwar|
00000020  65 20 73 63 72 6f 6c 6c  20 22 3b 48 57 53 63 72  |e scroll ";HWScr|
00000030  6f 6c 6c 0d 00 1e 26 f4  49 46 20 48 57 53 63 72  |oll...&.IF HWScr|
00000040  6f 6c 6c 3c 3e 30 20 54  48 45 4e 20 48 57 53 63  |oll<>0 THEN HWSc|
00000050  72 6f 6c 6c 3d 54 52 55  45 0d 00 28 0e 48 57 53  |roll=TRUE..(.HWS|
00000060  63 72 6f 6c 6c 3d b9 0d  00 32 0c 6d 61 73 74 65  |croll=...2.maste|
00000070  72 3d a3 0d 00 3c 3b 2a  52 4d 45 4e 53 55 52 45  |r=...<;*RMENSURE|
00000080  20 36 35 30 32 53 75 70  70 6f 72 74 20 30 2e 30  | 6502Support 0.0|
00000090  30 20 52 4d 52 75 6e 20  3c 36 35 30 32 45 6d 24  |0 RMRun <6502Em$|
000000a0  52 65 73 3e 2e 36 35 53  75 70 70 6f 72 74 0d 00  |Res>.65Support..|
000000b0  46 0e ee 20 85 20 f2 65  72 72 6f 72 0d 00 50 04  |F.. . .error..P.|
000000c0  0d 00 5a 0f f4 20 56 32  2e 20 28 62 62 63 29 0d  |..Z.. V2. (bbc).|
000000d0  00 64 04 0d 00 6e 10 49  4f 5f 50 6f 64 75 6c 65  |.d...n.IO_Podule|
000000e0  25 3d a3 0d 00 78 04 0d  00 82 39 de 20 6f 70 63  |%=...x....9. opc|
000000f0  6f 64 65 28 26 31 30 30  29 2c 20 62 63 64 28 26  |ode(&100), bcd(&|
00000100  31 30 30 29 2c 20 63 6f  64 65 20 35 30 30 2a 31  |100), code 500*1|
00000110  30 32 34 2c 20 62 75 66  66 65 72 20 31 30 30 30  |024, buffer 1000|
00000120  0d 00 8c 0d de 20 6c 25  28 31 30 30 29 0d 00 96  |..... l%(100)...|
00000130  2b de 20 64 69 76 6c 6f  6f 70 31 28 31 30 29 2c  |+. divloop1(10),|
00000140  64 69 76 6c 6f 6f 70 32  28 31 30 29 2c 64 69 76  |divloop2(10),div|
00000150  6a 75 6d 70 28 31 30 29  0d 00 a0 0a 64 69 76 25  |jump(10)....div%|
00000160  3d 30 0d 00 aa 20 c8 9b  20 22 3c 36 35 30 32 45  |=0... .. "<6502E|
00000170  6d 24 44 69 72 3e 2e 53  72 63 2e 53 6f 75 6e 64  |m$Dir>.Src.Sound|
00000180  36 22 0d 00 b4 21 c8 9b  20 22 3c 36 35 30 32 45  |6"...!.. "<6502E|
00000190  6d 24 44 69 72 3e 2e 53  72 63 2e 4f 70 63 6f 64  |m$Dir>.Src.Opcod|
000001a0  65 73 22 0d 00 be 20 c8  9b 20 22 3c 36 35 30 32  |es"... .. "<6502|
000001b0  45 6d 24 44 69 72 3e 2e  53 72 63 2e 53 63 72 65  |Em$Dir>.Src.Scre|
000001c0  65 6e 22 0d 00 c8 22 c8  9b 20 22 3c 36 35 30 32  |en"...".. "<6502|
000001d0  45 6d 24 44 69 72 3e 2e  53 72 63 2e 48 57 53 63  |Em$Dir>.Src.HWSc|
000001e0  72 6f 6c 6c 22 0d 00 d2  04 0d 00 dc 0f 65 6c 65  |roll"........ele|
000001f0  63 74 72 6f 6e 25 3d a3  0d 00 e6 0c 6d 61 73 74  |ctron%=.....mast|
00000200  65 72 3d a3 0d 00 f0 0d  f2 61 73 73 65 6d 62 6c  |er=......assembl|
00000210  65 0d 00 fa 04 0d 01 04  15 f1 28 65 6e 64 2d 73  |e.........(end-s|
00000220  74 61 72 74 29 2f 31 30  32 34 0d 01 0e 37 ff 20  |tart)/1024...7. |
00000230  22 53 61 76 65 20 3c 36  35 30 32 45 6d 24 44 69  |"Save <6502Em$Di|
00000240  72 3e 2e 43 6f 64 65 20  22 2b c3 7e 63 6f 64 65  |r>.Code "+.~code|
00000250  2b 22 20 22 2b c3 7e 28  65 6e 64 2b 63 6f 64 65  |+" "+.~(end+code|
00000260  29 0d 01 18 26 ff 20 22  53 65 74 54 79 70 65 20  |)...&. "SetType |
00000270  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 43 6f 64  |<6502Em$Dir>.Cod|
00000280  65 20 44 61 74 61 22 0d  01 22 04 0d 01 2c 0c 6d  |e Data".."...,.m|
00000290  61 73 74 65 72 3d b9 0d  01 36 0d f2 61 73 73 65  |aster=...6..asse|
000002a0  6d 62 6c 65 0d 01 40 15  f1 28 65 6e 64 2d 73 74  |mble..@..(end-st|
000002b0  61 72 74 29 2f 31 30 32  34 0d 01 4a 38 ff 20 22  |art)/1024..J8. "|
000002c0  53 61 76 65 20 3c 36 35  30 32 45 6d 24 44 69 72  |Save <6502Em$Dir|
000002d0  3e 2e 43 6f 64 65 4d 20  22 2b c3 7e 63 6f 64 65  |>.CodeM "+.~code|
000002e0  2b 22 20 22 2b c3 7e 28  65 6e 64 2b 63 6f 64 65  |+" "+.~(end+code|
000002f0  29 0d 01 54 27 ff 20 22  53 65 74 54 79 70 65 20  |)..T'. "SetType |
00000300  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 43 6f 64  |<6502Em$Dir>.Cod|
00000310  65 4d 20 44 61 74 61 22  0d 01 5e 04 0d 01 68 05  |eM Data"..^...h.|
00000320  e0 0d 01 72 04 0d 01 7c  30 ff 22 4c 4f 41 44 20  |...r...|0."LOAD |
00000330  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 4f 53 31  |<6502Em$Dir>.OS1|
00000340  2c 32 20 22 2b c3 7e 28  6d 65 6d 6f 72 79 2b 26  |,2 "+.~(memory+&|
00000350  43 30 30 30 29 0d 01 86  32 ff 22 4c 4f 41 44 20  |C000)...2."LOAD |
00000360  3c 36 35 30 32 45 6d 24  44 69 72 3e 2e 42 41 53  |<6502Em$Dir>.BAS|
00000370  49 43 49 49 20 22 2b c3  7e 28 6d 65 6d 6f 72 79  |ICII "+.~(memory|
00000380  2b 26 38 30 30 30 29 0d  01 90 04 0d 01 9a 08 eb  |+&8000).........|
00000390  20 31 32 0d 01 a4 0f d6  20 69 6e 69 74 2b 63 6f  | 12..... init+co|
000003a0  64 65 0d 01 ae 0a f1 22  42 4f 4f 22 0d 01 b8 04  |de....."BOO"....|
000003b0  0d 01 c2 19 21 70 63 5f  73 74 6f 72 65 3d 26 44  |....!pc_store=&D|
000003c0  39 43 44 20 3c 3c 20 31  36 0d 01 cc 04 0d 01 d6  |9CD << 16.......|
000003d0  14 44 25 3d 6d 65 6d 6f  72 79 20 3a 20 f4 20 52  |.D%=memory : . R|
000003e0  33 0d 01 e0 10 d6 20 73  74 61 72 74 2b 63 6f 64  |3..... start+cod|
000003f0  65 0d 01 ea 04 0d 01 f4  05 e0 0d 01 fe 0e dd f2  |e...............|
00000400  61 73 73 65 6d 62 6c 65  0d 02 08 21 f2 63 6c 65  |assemble...!.cle|
00000410  61 72 6d 65 6d 28 63 6f  64 65 2c 63 6f 64 65 2b  |armem(code,code+|
00000420  32 30 30 2a 31 30 32 34  29 0d 02 12 1c 52 3d 31  |200*1024)....R=1|
00000430  30 30 30 20 3a 20 53 3d  31 30 30 30 20 3a 20 54  |000 : S=1000 : T|
00000440  3d 31 30 30 30 0d 02 1c  04 0d 02 26 07 41 3d 34  |=1000......&.A=4|
00000450  0d 02 30 07 58 3d 35 0d  02 3a 07 59 3d 36 0d 02  |..0.X=5..:.Y=6..|
00000460  44 07 46 3d 37 0d 02 4e  08 53 50 3d 38 0d 02 58  |D.F=7..N.SP=8..X|
00000470  09 6d 65 6d 3d 33 0d 02  62 0a 74 69 6d 65 3d 39  |.mem=3..b.time=9|
00000480  0d 02 6c 0a 7a 70 63 3d  31 30 0d 02 76 0c 74 61  |..l.zpc=10..v.ta|
00000490  62 6c 65 3d 31 31 0d 02  80 04 0d 02 8a 0d 61 3d  |ble=11........a=|
000004a0  2d 26 31 30 30 2b 30 0d  02 94 0d 78 3d 2d 26 31  |-&100+0....x=-&1|
000004b0  30 30 2b 34 0d 02 9e 0d  79 3d 2d 26 31 30 30 2b  |00+4....y=-&100+|
000004c0  38 0d 02 a8 0e 66 3d 2d  26 31 30 30 2b 31 32 0d  |8....f=-&100+12.|
000004d0  02 b2 0f 73 70 3d 2d 26  31 30 30 2b 31 36 0d 02  |...sp=-&100+16..|
000004e0  bc 15 70 63 5f 73 74 6f  72 65 3d 2d 26 31 30 30  |..pc_store=-&100|
000004f0  2b 32 30 0d 02 c6 13 54  31 6d 6f 64 65 3d 2d 26  |+20....T1mode=-&|
00000500  31 30 30 2b 32 34 0d 02  d0 13 54 32 6d 6f 64 65  |100+24....T2mode|
00000510  3d 2d 26 31 30 30 2b 32  35 0d 02 da 13 54 33 6d  |=-&100+25....T3m|
00000520  6f 64 65 3d 2d 26 31 30  30 2b 32 36 0d 02 e4 13  |ode=-&100+26....|
00000530  54 34 6d 6f 64 65 3d 2d  26 31 30 30 2b 32 37 0d  |T4mode=-&100+27.|
00000540  02 ee 0f 54 31 3d 2d 26  31 30 30 2b 32 38 0d 02  |...T1=-&100+28..|
00000550  f8 10 54 31 52 3d 2d 26  31 30 30 2b 33 32 0d 03  |..T1R=-&100+32..|
00000560  02 0f 54 32 3d 2d 26 31  30 30 2b 33 36 0d 03 0c  |..T2=-&100+36...|
00000570  10 54 32 52 3d 2d 26 31  30 30 2b 34 30 0d 03 16  |.T2R=-&100+40...|
00000580  0f 54 33 3d 2d 26 31 30  30 2b 34 34 0d 03 20 10  |.T3=-&100+44.. .|
00000590  54 33 52 3d 2d 26 31 30  30 2b 34 38 0d 03 2a 0f  |T3R=-&100+48..*.|
000005a0  54 34 3d 2d 26 31 30 30  2b 35 32 0d 03 34 10 54  |T4=-&100+52..4.T|
000005b0  34 52 3d 2d 26 31 30 30  2b 35 36 0d 03 3e 13 73  |4R=-&100+56..>.s|
000005c0  63 72 65 65 6e 3d 2d 26  31 30 30 2b 36 30 0d 03  |creen=-&100+60..|
000005d0  48 14 73 63 72 65 65 6e  52 3d 2d 26 31 30 30 2b  |H.screenR=-&100+|
000005e0  36 34 0d 03 52 10 6d 69  6e 3d 2d 26 31 30 30 2b  |64..R.min=-&100+|
000005f0  36 38 0d 03 5c 18 73 6f  75 6e 64 5f 74 69 6d 65  |68..\.sound_time|
00000600  72 3d 2d 26 31 30 30 2b  37 32 0d 03 66 10 69 66  |r=-&100+72..f.if|
00000610  72 3d 2d 26 31 30 30 2b  37 36 0d 03 70 10 69 65  |r=-&100+76..p.ie|
00000620  72 3d 2d 26 31 30 30 2b  37 37 0d 03 7a 11 69 66  |r=-&100+77..z.if|
00000630  72 32 3d 2d 26 31 30 30  2b 37 38 0d 03 84 11 69  |r2=-&100+78....i|
00000640  65 72 32 3d 2d 26 31 30  30 2b 37 39 0d 03 8e 1c  |er2=-&100+79....|
00000650  61 72 63 5f 73 63 72 65  65 6e 73 74 61 72 74 3d  |arc_screenstart=|
00000660  2d 26 31 30 30 2b 38 30  0d 03 98 13 74 61 6d 70  |-&100+80....tamp|
00000670  65 72 3d 2d 26 31 30 30  2b 38 34 0d 03 a2 1a 63  |er=-&100+84....c|
00000680  75 72 73 6f 72 5f 74 61  6d 70 65 72 3d 2d 26 31  |ursor_tamper=-&1|
00000690  30 30 2b 38 38 0d 03 ac  16 52 4f 4d 53 45 4c 5f  |00+88....ROMSEL_|
000006a0  4f 4e 3d 2d 26 31 30 30  2b 39 32 0d 03 b6 10 72  |ON=-&100+92....r|
000006b0  6f 6d 3d 2d 26 31 30 30  2b 39 36 0d 03 c0 14 52  |om=-&100+96....R|
000006c0  4f 4d 52 41 4d 3d 2d 26  31 30 30 2b 31 30 30 0d  |OMRAM=-&100+100.|
000006d0  03 ca 12 66 65 32 30 3d  2d 26 31 30 30 2b 31 31  |...fe20=-&100+11|
000006e0  36 0d 03 d4 19 74 61 70  65 5f 68 61 6e 64 6c 65  |6....tape_handle|
000006f0  3d 2d 26 31 30 30 2b 31  31 37 0d 03 de 16 63 72  |=-&100+117....cr|
00000700  74 5f 72 65 67 73 3d 2d  26 31 30 30 2b 31 32 30  |t_regs=-&100+120|
00000710  0d 03 e8 15 73 63 72 61  74 63 68 3d 2d 26 31 30  |....scratch=-&10|
00000720  30 2b 31 34 30 0d 03 f2  16 70 61 6c 5f 72 65 67  |0+140....pal_reg|
00000730  73 3d 2d 26 31 30 30 2b  31 34 38 0d 03 fc 15 50  |s=-&100+148....P|
00000740  61 6c 65 74 74 65 3d 2d  26 31 30 30 2b 31 36 34  |alette=-&100+164|
00000750  0d 04 06 14 41 43 43 43  4f 4e 3d 2d 26 31 30 30  |....ACCCON=-&100|
00000760  2b 31 37 32 0d 04 10 16  70 61 74 63 68 5f 6f 6e  |+172....patch_on|
00000770  3d 2d 26 31 30 30 2b 31  37 36 0d 04 1a 18 70 61  |=-&100+176....pa|
00000780  6c 5f 74 61 6d 70 65 72  3d 2d 26 31 30 30 2b 31  |l_tamper=-&100+1|
00000790  37 37 0d 04 24 16 6c 61  73 74 6d 6f 64 65 3d 2d  |77..$.lastmode=-|
000007a0  26 31 30 30 2b 31 37 38  0d 04 2e 12 66 65 31 30  |&100+178....fe10|
000007b0  3d 2d 26 31 30 30 2b 31  37 39 0d 04 38 18 74 61  |=-&100+179..8.ta|
000007c0  70 65 5f 63 6f 75 6e 74  3d 2d 26 31 30 30 2b 31  |pe_count=-&100+1|
000007d0  38 30 0d 04 42 16 6b 65  79 5f 61 64 64 72 3d 2d  |80..B.key_addr=-|
000007e0  26 31 30 30 2b 31 38 34  0d 04 4c 20 73 63 72 65  |&100+184..L scre|
000007f0  65 6e 73 74 61 72 74 5f  74 61 6d 70 65 72 3d 2d  |enstart_tamper=-|
00000800  26 31 30 30 2b 31 38 38  0d 04 56 22 73 63 72 65  |&100+188..V"scre|
00000810  65 6e 73 74 61 72 74 5f  70 72 65 76 69 6f 75 73  |enstart_previous|
00000820  3d 2d 26 31 30 30 2b 31  39 32 0d 04 60 14 73 70  |=-&100+192..`.sp|
00000830  65 65 64 52 3d 2d 26 31  30 30 2b 31 39 36 0d 04  |eedR=-&100+196..|
00000840  6a 04 0d 04 74 28 65 6e  44 3d 2d 26 31 30 30 2b  |j...t(enD=-&100+|
00000850  32 30 30 20 3a 20 f4 20  64 6f 6e 27 74 20 67 6f  |200 : . don't go|
00000860  20 70 61 73 74 20 74 68  69 73 0d 04 7e 04 0d 04  | past this..~...|
00000870  88 10 e3 70 3d 34 20 b8  20 36 20 88 20 32 0d 04  |...p=4 . 6 . 2..|
00000880  92 0a 64 69 76 25 3d 30  0d 04 9c 0b 4f 25 3d 63  |..div%=0....O%=c|
00000890  6f 64 65 0d 04 a6 08 6c  25 3d 30 0d 04 b0 08 50  |ode....l%=0....P|
000008a0  25 3d 30 0d 04 ba 0d 6f  70 63 6f 64 65 25 3d 30  |%=0....opcode%=0|
000008b0  0d 04 c4 09 5b 4f 50 54  70 0d 04 ce 29 2e 4f 61  |....[OPTp...).Oa|
000008c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000008d0  20 20 20 20 20 20 20 20  20 20 20 20 45 51 55 44  |            EQUD|
000008e0  20 30 0d 04 d8 29 2e 4f  78 20 20 20 20 20 20 20  | 0...).Ox       |
000008f0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000900  20 20 20 20 20 45 51 55  44 20 30 0d 04 e2 29 2e  |     EQUD 0...).|
00000910  4f 79 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |Oy              |
00000920  20 20 20 20 20 20 20 20  20 20 20 20 20 20 45 51  |              EQ|
00000930  55 44 20 30 0d 04 ec 29  2e 4f 66 20 20 20 20 20  |UD 0...).Of     |
00000940  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000950  20 20 20 20 20 20 20 45  51 55 44 20 30 0d 04 f6  |       EQUD 0...|
00000960  29 2e 4f 73 70 20 20 20  20 20 20 20 20 20 20 20  |).Osp           |
00000970  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000980  45 51 55 44 20 30 0d 05  00 29 2e 4f 70 63 5f 73  |EQUD 0...).Opc_s|
00000990  74 6f 72 65 20 20 20 20  20 20 20 20 20 20 20 20  |tore            |
000009a0  20 20 20 20 20 20 20 20  20 45 51 55 44 20 30 0d  |         EQUD 0.|
000009b0  05 0a 2c 2e 73 74 61 72  74 5f 6f 66 66 73 65 74  |..,.start_offset|
000009c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000009d0  20 45 51 55 44 20 73 74  61 72 74 0d 05 14 28 2e  | EQUD start...(.|
000009e0  74 72 61 63 65 20 20 20  20 20 20 20 20 20 20 20  |trace           |
000009f0  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00000a00  44 20 30 0d 05 1e 28 2e  74 72 61 63 65 32 20 20  |D 0...(.trace2  |
00000a10  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000a20  20 20 20 20 20 45 51 55  44 20 30 0d 05 28 2b 2e  |     EQUD 0..(+.|
00000a30  69 6e 69 74 5f 61 64 64  72 20 20 20 20 20 20 20  |init_addr       |
00000a40  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00000a50  44 20 69 6e 69 74 0d 05  32 37 2e 63 72 74 5f 61  |D init..27.crt_a|
00000a60  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000a70  20 20 20 20 20 20 20 20  45 51 55 44 20 30 20 3b  |        EQUD 0 ;|
00000a80  20 77 61 73 20 63 72 74  5f 72 65 67 73 0d 05 3c  | was crt_regs..<|
00000a90  31 2e 54 31 5f 61 64 64  72 20 20 20 20 20 20 20  |1.T1_addr       |
00000aa0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000ab0  51 55 44 20 30 20 3b 20  77 61 73 20 54 31 0d 05  |QUD 0 ; was T1..|
00000ac0  46 2e 2e 69 66 72 5f 61  64 64 72 20 20 20 20 20  |F..ifr_addr     |
00000ad0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ae0  45 51 55 44 20 30 20 3b  20 69 66 72 0d 05 50 35  |EQUD 0 ; ifr..P5|
00000af0  2e 63 6f 6c 75 6d 6e 5f  63 6f 75 6e 74 65 72 5f  |.column_counter_|
00000b00  61 64 64 72 20 20 20 20  20 20 20 20 20 20 45 51  |addr          EQ|
00000b10  55 44 20 63 6f 6c 75 6d  6e 5f 63 6f 75 6e 74 65  |UD column_counte|
00000b20  72 0d 05 5a 31 2e 52 4f  4d 53 45 4c 5f 61 64 64  |r..Z1.ROMSEL_add|
00000b30  72 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r               |
00000b40  20 20 20 45 51 55 44 20  30 20 3b 20 52 4f 4d 53  |   EQUD 0 ; ROMS|
00000b50  45 4c 0d 05 64 32 2e 50  61 6c 65 74 74 65 5f 61  |EL..d2.Palette_a|
00000b60  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000b70  20 20 20 20 45 51 55 44  20 30 20 3b 20 50 61 6c  |    EQUD 0 ; Pal|
00000b80  65 74 74 65 0d 05 6e 35  2e 73 70 65 65 64 5f 61  |ette..n5.speed_a|
00000b90  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000ba0  20 20 20 20 20 20 45 51  55 44 20 73 63 72 65 65  |      EQUD scree|
00000bb0  6e 5f 63 6f 75 6e 74 2b  34 0d 05 78 30 2e 65 6c  |n_count+4..x0.el|
00000bc0  69 74 65 5f 61 64 64 72  20 20 20 20 20 20 20 20  |ite_addr        |
00000bd0  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000be0  30 20 3b 20 65 6c 69 74  65 0d 05 82 3e 2e 6f 70  |0 ; elite...>.op|
00000bf0  63 6f 5f 61 64 64 72 20  20 20 20 20 20 20 20 20  |co_addr         |
00000c00  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000c10  6f 70 63 6f 64 65 28 30  29 20 3b 20 6f 70 63 6f  |opcode(0) ; opco|
00000c20  64 65 74 61 62 6c 65 0d  05 8c 2d 2e 62 63 64 5f  |detable...-.bcd_|
00000c30  61 64 64 72 20 20 20 20  20 20 20 20 20 20 20 20  |addr            |
00000c40  20 20 20 20 20 20 20 20  20 45 51 55 44 20 62 63  |         EQUD bc|
00000c50  64 28 30 29 0d 05 96 36  2e 73 68 65 69 6c 61 5f  |d(0)...6.sheila_|
00000c60  77 72 69 74 65 74 61 62  5f 61 64 64 72 20 20 20  |writetab_addr   |
00000c70  20 20 20 20 20 20 45 51  55 44 20 73 68 65 69 6c  |      EQUD sheil|
00000c80  61 5f 77 72 69 74 65 74  61 62 0d 05 a0 35 2e 73  |a_writetab...5.s|
00000c90  68 65 69 6c 61 5f 72 65  61 64 74 61 62 5f 61 64  |heila_readtab_ad|
00000ca0  64 72 20 20 20 20 20 20  20 20 20 20 45 51 55 44  |dr          EQUD|
00000cb0  20 73 68 65 69 6c 61 5f  72 65 61 64 74 61 62 0d  | sheila_readtab.|
00000cc0  05 aa 37 2e 73 6f 75 6e  64 5f 76 65 63 74 6f 72  |..7.sound_vector|
00000cd0  73 5f 61 64 64 72 20 20  20 20 20 20 20 20 20 20  |s_addr          |
00000ce0  20 45 51 55 44 20 73 6f  75 6e 64 5f 62 75 66 66  | EQUD sound_buff|
00000cf0  73 5f 61 64 64 72 0d 05  b4 33 2e 70 61 74 63 68  |s_addr...3.patch|
00000d00  5f 61 64 64 72 20 20 20  20 20 20 20 20 20 20 20  |_addr           |
00000d10  20 20 20 20 20 20 20 20  45 51 55 44 20 70 61 74  |        EQUD pat|
00000d20  63 68 5f 73 63 72 65 65  6e 0d 05 be 04 0d 05 c8  |ch_screen.......|
00000d30  30 2e 69 6e 69 74 20 3b  20 6f 6e 6c 79 20 63 61  |0.init ; only ca|
00000d40  6c 6c 65 64 20 6f 6e 63  65 2c 20 62 65 66 6f 72  |lled once, befor|
00000d50  65 20 63 6f 64 65 20 63  61 6c 6c 65 64 0d 05 d2  |e code called...|
00000d60  0c 41 44 52 20 52 30 2c  30 0d 05 dc 15 3b 4c 44  |.ADR R0,0....;LD|
00000d70  52 20 52 31 2c 6f 70 63  6f 5f 61 64 64 72 0d 05  |R R1,opco_addr..|
00000d80  e6 11 3b 41 44 44 20 52  31 2c 52 31 2c 52 30 0d  |..;ADD R1,R1,R0.|
00000d90  05 f0 14 3b 4c 44 52 20  52 32 2c 62 63 64 5f 61  |...;LDR R2,bcd_a|
00000da0  64 64 72 0d 05 fa 11 3b  41 44 44 20 52 32 2c 52  |ddr....;ADD R2,R|
00000db0  32 2c 52 30 0d 06 04 1f  4c 44 52 20 52 35 2c 73  |2,R0....LDR R5,s|
00000dc0  68 65 69 6c 61 5f 77 72  69 74 65 74 61 62 5f 61  |heila_writetab_a|
00000dd0  64 64 72 0d 06 0e 10 41  44 44 20 52 35 2c 52 35  |ddr....ADD R5,R5|
00000de0  2c 52 30 0d 06 18 1e 4c  44 52 20 52 36 2c 73 68  |,R0....LDR R6,sh|
00000df0  65 69 6c 61 5f 72 65 61  64 74 61 62 5f 61 64 64  |eila_readtab_add|
00000e00  72 0d 06 22 10 41 44 44  20 52 36 2c 52 36 2c 52  |r..".ADD R6,R6,R|
00000e10  30 0d 06 2c 0f 4d 4f 56  20 52 33 2c 23 32 35 35  |0..,.MOV R3,#255|
00000e20  0d 06 36 0e 2e 69 6e 69  74 5f 6c 6f 6f 70 0d 06  |..6..init_loop..|
00000e30  40 19 3b 4c 44 52 20 52  34 2c 5b 52 31 2c 52 33  |@.;LDR R4,[R1,R3|
00000e40  2c 4c 53 4c 23 32 5d 0d  06 4a 11 3b 41 44 44 20  |,LSL#2]..J.;ADD |
00000e50  52 34 2c 52 34 2c 52 30  0d 06 54 19 3b 53 54 52  |R4,R4,R0..T.;STR|
00000e60  20 52 34 2c 5b 52 31 2c  52 33 2c 4c 53 4c 23 32  | R4,[R1,R3,LSL#2|
00000e70  5d 0d 06 5e 19 3b 4c 44  52 20 52 34 2c 5b 52 32  |]..^.;LDR R4,[R2|
00000e80  2c 52 33 2c 4c 53 4c 23  32 5d 0d 06 68 11 3b 41  |,R3,LSL#2]..h.;A|
00000e90  44 44 20 52 34 2c 52 34  2c 52 30 0d 06 72 19 3b  |DD R4,R4,R0..r.;|
00000ea0  53 54 52 20 52 34 2c 5b  52 32 2c 52 33 2c 4c 53  |STR R4,[R2,R3,LS|
00000eb0  4c 23 32 5d 0d 06 7c 18  4c 44 52 20 52 34 2c 5b  |L#2]..|.LDR R4,[|
00000ec0  52 35 2c 52 33 2c 4c 53  4c 23 32 5d 0d 06 86 10  |R5,R3,LSL#2]....|
00000ed0  41 44 44 20 52 34 2c 52  34 2c 52 30 0d 06 90 18  |ADD R4,R4,R0....|
00000ee0  53 54 52 20 52 34 2c 5b  52 35 2c 52 33 2c 4c 53  |STR R4,[R5,R3,LS|
00000ef0  4c 23 32 5d 0d 06 9a 18  4c 44 52 20 52 34 2c 5b  |L#2]....LDR R4,[|
00000f00  52 36 2c 52 33 2c 4c 53  4c 23 32 5d 0d 06 a4 10  |R6,R3,LSL#2]....|
00000f10  41 44 44 20 52 34 2c 52  34 2c 52 30 0d 06 ae 18  |ADD R4,R4,R0....|
00000f20  53 54 52 20 52 34 2c 5b  52 36 2c 52 33 2c 4c 53  |STR R4,[R6,R3,LS|
00000f30  4c 23 32 5d 0d 06 b8 11  53 55 42 53 20 52 33 2c  |L#2]....SUBS R3,|
00000f40  52 33 2c 23 31 0d 06 c2  11 42 50 4c 20 69 6e 69  |R3,#1....BPL ini|
00000f50  74 5f 6c 6f 6f 70 0d 06  cc 0e 4d 4f 56 20 50 43  |t_loop....MOV PC|
00000f60  2c 52 31 34 0d 06 d6 04  0d 06 e0 0a 2e 73 74 61  |,R14.........sta|
00000f70  72 74 0d 06 ea 1b 53 54  4d 46 44 20 52 31 33 21  |rt....STMFD R13!|
00000f80  2c 7b 52 31 2d 52 31 32  2c 52 31 34 7d 0d 06 f4  |,{R1-R12,R14}...|
00000f90  17 53 54 52 20 52 31 33  2c 72 65 74 75 72 6e 5f  |.STR R13,return_|
00000fa0  61 64 64 72 0d 06 fe 14  53 54 52 20 52 30 2c 72  |addr....STR R0,r|
00000fb0  6f 6d 73 5f 61 64 64 72  0d 07 08 14 3b 4c 44 52  |oms_addr....;LDR|
00000fc0  20 52 30 2c 63 72 74 5f  61 64 64 72 0d 07 12 0d  | R0,crt_addr....|
00000fd0  3b 41 44 52 20 52 31 2c  30 0d 07 1c 11 3b 41 44  |;ADR R1,0....;AD|
00000fe0  44 20 52 30 2c 52 30 2c  52 31 0d 07 26 14 3b 53  |D R0,R0,R1..&.;S|
00000ff0  57 49 20 22 36 35 30 32  5f 49 6e 69 74 22 0d 07  |WI "6502_Init"..|
00001000  30 04 0d 07 3a 13 42 4c  20 62 6c 61 6e 6b 5f 63  |0...:.BL blank_c|
00001010  75 72 73 6f 72 0d 07 44  04 0d 07 4e 22 4d 4f 56  |ursor..D...N"MOV|
00001020  20 52 30 2c 23 26 39 43  30 30 20 3a 20 41 44 44  | R0,#&9C00 : ADD|
00001030  20 52 30 2c 52 30 2c 23  26 34 30 0d 07 58 19 53  | R0,R0,#&40..X.S|
00001040  54 52 20 52 30 2c 5b 6d  65 6d 2c 23 73 63 72 65  |TR R0,[mem,#scre|
00001050  65 6e 52 5d 0d 07 62 04  0d 07 6c 19 53 57 49 20  |enR]..b...l.SWI |
00001060  22 36 35 30 32 5f 47 65  74 6b 65 79 61 64 64 72  |"6502_Getkeyaddr|
00001070  22 0d 07 76 1a 53 54 52  20 52 30 2c 5b 6d 65 6d  |"..v.STR R0,[mem|
00001080  2c 23 6b 65 79 5f 61 64  64 72 5d 0d 07 80 04 0d  |,#key_addr].....|
00001090  07 8a 11 41 44 52 20 52  30 2c 62 6c 6f 63 6b 31  |...ADR R0,block1|
000010a0  0d 07 94 10 41 44 44 20  52 31 2c 52 30 2c 23 38  |....ADD R1,R0,#8|
000010b0  0d 07 9e 1d 53 57 49 20  22 4f 53 5f 52 65 61 64  |....SWI "OS_Read|
000010c0  56 64 75 56 61 72 69 61  62 6c 65 73 22 0d 07 a8  |VduVariables"...|
000010d0  21 4c 44 52 20 52 39 2c  5b 52 31 5d 20 20 20 20  |!LDR R9,[R1]    |
000010e0  20 3b 20 73 63 72 65 65  6e 73 74 61 72 74 0d 07  | ; screenstart..|
000010f0  b2 21 53 54 52 20 52 39  2c 5b 6d 65 6d 2c 23 61  |.!STR R9,[mem,#a|
00001100  72 63 5f 73 63 72 65 65  6e 73 74 61 72 74 5d 0d  |rc_screenstart].|
00001110  07 bc 0d 4d 4f 56 20 52  39 2c 23 31 0d 07 c6 19  |...MOV R9,#1....|
00001120  53 54 52 42 20 52 39 2c  5b 6d 65 6d 2c 23 74 61  |STRB R9,[mem,#ta|
00001130  6d 70 65 72 5d 0d 07 d0  1d 53 54 52 42 20 52 39  |mper]....STRB R9|
00001140  2c 5b 6d 65 6d 2c 23 70  61 6c 5f 74 61 6d 70 65  |,[mem,#pal_tampe|
00001150  72 5d 0d 07 da 20 53 54  52 42 20 52 39 2c 5b 6d  |r]... STRB R9,[m|
00001160  65 6d 2c 23 63 75 72 73  6f 72 5f 74 61 6d 70 65  |em,#cursor_tampe|
00001170  72 5d 0d 07 e4 04 0d 07  ee 17 4c 44 52 20 74 69  |r]........LDR ti|
00001180  6d 65 2c 5b 6d 65 6d 2c  23 6d 69 6e 5d 0d 07 f8  |me,[mem,#min]...|
00001190  12 4c 44 52 20 41 2c 5b  6d 65 6d 2c 23 61 5d 0d  |.LDR A,[mem,#a].|
000011a0  08 02 12 4c 44 52 20 58  2c 5b 6d 65 6d 2c 23 78  |...LDR X,[mem,#x|
000011b0  5d 0d 08 0c 12 4c 44 52  20 59 2c 5b 6d 65 6d 2c  |]....LDR Y,[mem,|
000011c0  23 79 5d 0d 08 16 22 4c  44 52 20 53 50 2c 5b 6d  |#y]..."LDR SP,[m|
000011d0  65 6d 2c 23 73 70 5d 20  3a 20 84 52 20 53 50 2c  |em,#sp] : .R SP,|
000011e0  53 50 2c 23 31 0d 08 20  12 4c 44 52 20 46 2c 5b  |SP,#1.. .LDR F,[|
000011f0  6d 65 6d 2c 23 66 5d 0d  08 2a 1b 4c 44 52 20 7a  |mem,#f]..*.LDR z|
00001200  70 63 2c 5b 6d 65 6d 2c  23 70 63 5f 73 74 6f 72  |pc,[mem,#pc_stor|
00001210  65 5d 0d 08 34 04 0d 08  3e 12 42 4c 20 72 65 63  |e]..4...>.BL rec|
00001220  61 6c 63 5f 77 72 61 70  0d 08 48 1b 4c 44 52 42  |alc_wrap..H.LDRB|
00001230  20 52 30 2c 5b 6d 65 6d  2c 23 70 61 74 63 68 5f  | R0,[mem,#patch_|
00001240  6f 6e 5d 0d 08 52 13 80  20 52 30 2c 52 30 2c 23  |on]..R.. R0,R0,#|
00001250  25 31 31 31 31 31 0d 08  5c 12 42 49 43 20 46 2c  |%11111..\.BIC F,|
00001260  46 2c 23 26 46 46 30 30  0d 08 66 13 84 52 20 46  |F,#&FF00..f..R F|
00001270  2c 46 2c 52 30 2c 4c 53  4c 23 38 0d 08 70 04 0d  |,F,R0,LSL#8..p..|
00001280  08 7a 10 3b 4d 4f 56 20  74 69 6d 65 2c 23 30 0d  |.z.;MOV time,#0.|
00001290  08 84 04 0d 08 8e 15 4c  44 52 42 20 52 30 2c 66  |.......LDRB R0,f|
000012a0  65 30 38 5f 72 65 61 64  0d 08 98 12 42 49 43 20  |e08_read....BIC |
000012b0  52 30 2c 52 30 2c 23 26  38 31 0d 08 a2 15 53 54  |R0,R0,#&81....ST|
000012c0  52 42 20 52 30 2c 66 65  30 38 5f 72 65 61 64 0d  |RB R0,fe08_read.|
000012d0  08 ac 04 0d 08 b6 0c 41  44 52 20 52 30 2c 30 0d  |.......ADR R0,0.|
000012e0  08 c0 10 54 53 54 20 46  2c 23 25 31 30 30 30 0d  |...TST F,#%1000.|
000012f0  08 ca 19 4c 44 52 45 51  20 74 61 62 6c 65 2c 6f  |...LDREQ table,o|
00001300  70 63 6f 5f 61 64 64 72  0d 08 d4 18 4c 44 52 4e  |pco_addr....LDRN|
00001310  45 20 74 61 62 6c 65 2c  62 63 64 5f 61 64 64 72  |E table,bcd_addr|
00001320  0d 08 de 16 41 44 44 20  74 61 62 6c 65 2c 74 61  |....ADD table,ta|
00001330  62 6c 65 2c 52 30 0d 08  e8 16 3b 53 57 49 20 22  |ble,R0....;SWI "|
00001340  36 35 30 32 5f 52 65 49  6e 69 74 22 0d 08 f2 1b  |6502_ReInit"....|
00001350  3b 53 57 49 20 22 36 35  30 32 5f 55 70 64 61 74  |;SWI "6502_Updat|
00001360  65 53 63 72 65 65 6e 0d  08 fc 18 42 4c 20 70 6f  |eScreen....BL po|
00001370  6b 65 5f 75 70 64 61 74  65 70 69 78 65 6c 56 0d  |ke_updatepixelV.|
00001380  09 06 13 42 4c 20 75 70  64 61 74 65 73 63 72 65  |...BL updatescre|
00001390  65 6e 0d 09 10 0c 42 20  66 65 74 63 68 32 0d 09  |en....B fetch2..|
000013a0  1a 04 0d 09 24 12 2e 72  65 73 65 74 5f 62 63 64  |....$..reset_bcd|
000013b0  66 6c 61 67 0d 09 2e 0c  41 44 52 20 52 31 2c 30  |flag....ADR R1,0|
000013c0  0d 09 38 10 54 53 54 20  46 2c 23 25 31 30 30 30  |..8.TST F,#%1000|
000013d0  0d 09 42 19 4c 44 52 45  51 20 74 61 62 6c 65 2c  |..B.LDREQ table,|
000013e0  6f 70 63 6f 5f 61 64 64  72 0d 09 4c 18 4c 44 52  |opco_addr..L.LDR|
000013f0  4e 45 20 74 61 62 6c 65  2c 62 63 64 5f 61 64 64  |NE table,bcd_add|
00001400  72 0d 09 56 16 41 44 44  20 74 61 62 6c 65 2c 74  |r..V.ADD table,t|
00001410  61 62 6c 65 2c 52 31 0d  09 60 0e 4d 4f 56 20 50  |able,R1..`.MOV P|
00001420  43 2c 52 31 34 0d 09 6a  04 0d 09 74 0b 2e 62 6c  |C,R14..j...t..bl|
00001430  6f 63 6b 31 0d 09 7e 16  45 51 55 44 20 31 34 39  |ock1..~.EQUD 149|
00001440  20 3a 20 45 51 55 44 20  2d 31 0d 09 88 0b 2e 62  | : EQUD -1.....b|
00001450  6c 6f 63 6b 32 0d 09 92  13 45 51 55 44 20 30 20  |lock2....EQUD 0 |
00001460  3a 20 45 51 55 44 20 30  0d 09 9c 04 0d 09 a6 11  |: EQUD 0........|
00001470  2e 73 63 72 65 65 6e 5f  63 6f 75 6e 74 0d 09 b0  |.screen_count...|
00001480  0a 45 51 55 44 20 30 0d  09 ba 0a 45 51 55 44 20  |.EQUD 0....EQUD |
00001490  30 0d 09 c4 04 0d 09 ce  0d 2e 72 65 67 5f 63 6f  |0.........reg_co|
000014a0  6d 70 0d 09 d8 14 45 51  55 44 20 26 46 46 45 45  |mp....EQUD &FFEE|
000014b0  20 3c 3c 20 31 36 0d 09  e2 04 0d 09 ec 0d 2e 74  | << 16.........t|
000014c0  72 61 63 65 5f 6f 6e 0d  09 f6 0e 4d 4f 56 20 52  |race_on....MOV R|
000014d0  31 32 2c 23 31 0d 0a 00  12 53 54 52 42 20 52 31  |12,#1....STRB R1|
000014e0  32 2c 74 72 61 63 65 0d  0a 0a 0e 4d 4f 56 20 50  |2,trace....MOV P|
000014f0  43 2c 52 31 34 0d 0a 14  04 0d 0a 1e 0e 2e 73 68  |C,R14.........sh|
00001500  6f 77 5f 72 65 67 73 0d  0a 28 04 0d 0a 32 1a 3b  |ow_regs..(...2.;|
00001510  53 57 49 20 22 36 35 30  32 5f 43 68 65 63 6b 6b  |SWI "6502_Checkk|
00001520  64 61 74 61 22 0d 0a 3c  1a 4c 44 52 20 52 30 2c  |data"..<.LDR R0,|
00001530  5b 6d 65 6d 2c 23 6b 65  79 5f 61 64 64 72 5d 0d  |[mem,#key_addr].|
00001540  0a 46 14 4c 44 52 42 20  52 30 2c 5b 52 30 2c 23  |.F.LDRB R0,[R0,#|
00001550  2d 34 5d 0d 0a 50 04 0d  0a 5a 04 0d 0a 64 18 43  |-4]..P...Z...d.C|
00001560  4d 50 20 52 30 2c 23 26  31 46 20 3b 20 49 6e 73  |MP R0,#&1F ; Ins|
00001570  65 72 74 0d 0a 6e 0c ec  51 20 52 31 2c 23 31 0d  |ert..n..Q R1,#1.|
00001580  0a 78 13 53 54 52 45 51  20 52 31 2c 74 72 61 63  |.x.STREQ R1,trac|
00001590  65 32 0d 0a 82 04 0d 0a  8c 12 4c 44 52 42 20 52  |e2........LDRB R|
000015a0  30 2c 74 72 61 63 65 32  0d 0a 96 0d 43 4d 50 20  |0,trace2....CMP |
000015b0  52 30 2c 23 31 0d 0a a0  10 4d 4f 56 4e 45 20 50  |R0,#1....MOVNE P|
000015c0  43 2c 52 31 34 0d 0a aa  04 0d 0a b4 14 3b 4c 44  |C,R14........;LD|
000015d0  52 20 52 30 2c 72 65 67  5f 63 6f 6d 70 0d 0a be  |R R0,reg_comp...|
000015e0  0f 3b 43 4d 50 20 52 30  2c 7a 70 63 0d 0a c8 0d  |.;CMP R0,zpc....|
000015f0  3b ec 51 20 52 30 2c 23  31 0d 0a d2 14 3b 53 54  |;.Q R0,#1....;ST|
00001600  52 45 51 42 20 52 30 2c  74 72 61 63 65 0d 0a dc  |REQB R0,trace...|
00001610  04 0d 0a e6 17 3b 41 44  44 20 52 31 32 2c 6d 65  |.....;ADD R12,me|
00001620  6d 2c 23 26 44 46 30 30  0d 0a f0 18 3b 4c 44 52  |m,#&DF00....;LDR|
00001630  42 20 52 31 32 2c 5b 52  31 32 2c 23 26 44 41 5d  |B R12,[R12,#&DA]|
00001640  0d 0a fa 0f 3b 43 4d 50  20 52 31 32 2c 23 30 0d  |....;CMP R12,#0.|
00001650  0b 04 0e 3b ec 51 20 52  31 32 2c 23 31 0d 0b 0e  |...;.Q R12,#1...|
00001660  15 3b 53 54 52 45 51 42  20 52 31 32 2c 74 72 61  |.;STREQB R12,tra|
00001670  63 65 0d 0b 18 04 0d 0b  22 12 3b 4c 44 52 42 20  |ce......".;LDRB |
00001680  52 30 2c 74 72 61 63 65  0d 0b 2c 0e 3b 43 4d 50  |R0,trace..,.;CMP|
00001690  20 52 30 2c 23 31 0d 0b  36 10 3b 4d 4f 56 4e 45  | R0,#1..6.;MOVNE|
000016a0  20 50 43 2c 31 34 0d 0b  40 04 0d 0b 4a 0d a4 73  | PC,14..@...J..s|
000016b0  68 6f 77 72 65 67 73 0d  0b 54 0e 4d 4f 56 20 50  |howregs..T.MOV P|
000016c0  43 2c 52 31 34 0d 0b 5e  04 0d 0b 68 0d 2e 72 65  |C,R14..^...h..re|
000016d0  61 64 5f 69 66 72 0d 0b  72 16 4c 44 52 42 20 52  |ad_ifr..r.LDRB R|
000016e0  30 2c 5b 6d 65 6d 2c 23  69 66 72 5d 0d 0b 7c 04  |0,[mem,#ifr]..|.|
000016f0  0d 0b 86 15 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |....LDR R1,[mem,|
00001700  23 6d 69 6e 5d 0d 0b 90  12 53 55 42 20 52 31 2c  |#min]....SUB R1,|
00001710  52 31 2c 74 69 6d 65 0d  0b 9a 19 4c 44 52 20 52  |R1,time....LDR R|
00001720  31 32 2c 5b 6d 65 6d 2c  23 73 63 72 65 65 6e 5d  |12,[mem,#screen]|
00001730  0d 0b a4 12 53 55 42 20  52 31 32 2c 52 31 32 2c  |....SUB R12,R12,|
00001740  52 31 0d 0b ae 0f 43 4d  50 20 52 31 32 2c 23 31  |R1....CMP R12,#1|
00001750  30 0d 0b b8 1b 84 52 4c  54 20 52 30 2c 52 30 2c  |0.....RLT R0,R0,|
00001760  23 25 31 30 20 3b 20 76  73 79 6e 63 0d 0b c2 05  |#%10 ; vsync....|
00001770  3b 0d 0b cc 05 3b 0d 0b  d6 1a 3b 20 43 4d 50 20  |;....;....; CMP |
00001780  7a 70 63 2c 23 26 38 30  30 30 20 3c 3c 20 31 36  |zpc,#&8000 << 16|
00001790  0d 0b e0 1d 3b 20 84 52  4c 54 20 52 30 2c 52 30  |....; .RLT R0,R0|
000017a0  2c 23 25 31 30 20 3b 20  76 73 79 6e 63 0d 0b ea  |,#%10 ; vsync...|
000017b0  04 0d 0b f4 04 0d 0b fe  16 4c 44 52 42 20 52 31  |.........LDRB R1|
000017c0  2c 5b 6d 65 6d 2c 23 69  65 72 5d 0d 0c 08 12 42  |,[mem,#ier]....B|
000017d0  49 43 20 52 30 2c 52 30  2c 23 26 38 30 0d 0c 12  |IC R0,R0,#&80...|
000017e0  0f 80 53 20 52 31 2c 52  31 2c 52 30 0d 0c 1c 13  |..S R1,R1,R0....|
000017f0  84 52 4e 45 20 52 30 2c  52 30 2c 23 26 38 30 0d  |.RNE R0,R0,#&80.|
00001800  0c 26 04 0d 0c 30 0e 4d  4f 56 20 50 43 2c 52 31  |.&...0.MOV PC,R1|
00001810  34 0d 0c 3a 04 0d 0c 44  0d 2e 72 65 61 64 5f 69  |4..:...D..read_i|
00001820  65 72 0d 0c 4e 16 4c 44  52 42 20 52 30 2c 5b 6d  |er..N.LDRB R0,[m|
00001830  65 6d 2c 23 69 65 72 5d  0d 0c 58 11 84 52 20 52  |em,#ier]..X..R R|
00001840  30 2c 52 30 2c 23 26 38  30 0d 0c 62 0e 4d 4f 56  |0,R0,#&80..b.MOV|
00001850  20 50 43 2c 52 31 34 0d  0c 6c 04 0d 0c 76 0e 2e  | PC,R14..l...v..|
00001860  72 65 61 64 5f 69 66 72  32 0d 0c 80 17 4c 44 52  |read_ifr2....LDR|
00001870  42 20 52 30 2c 5b 6d 65  6d 2c 23 69 66 72 32 5d  |B R0,[mem,#ifr2]|
00001880  0d 0c 8a 17 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |....LDRB R1,[mem|
00001890  2c 23 69 65 72 32 5d 0d  0c 94 12 42 49 43 20 52  |,#ier2]....BIC R|
000018a0  30 2c 52 30 2c 23 26 38  30 0d 0c 9e 0f 80 53 20  |0,R0,#&80.....S |
000018b0  52 31 2c 52 31 2c 52 30  0d 0c a8 13 84 52 4e 45  |R1,R1,R0.....RNE|
000018c0  20 52 30 2c 52 30 2c 23  26 38 30 0d 0c b2 0e 4d  | R0,R0,#&80....M|
000018d0  4f 56 20 50 43 2c 52 31  34 0d 0c bc 04 0d 0c c6  |OV PC,R14.......|
000018e0  0e 2e 72 65 61 64 5f 69  65 72 32 0d 0c d0 17 4c  |..read_ier2....L|
000018f0  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 69 65 72  |DRB R0,[mem,#ier|
00001900  32 5d 0d 0c da 11 84 52  20 52 30 2c 52 30 2c 23  |2].....R R0,R0,#|
00001910  26 38 30 0d 0c e4 0e 4d  4f 56 20 50 43 2c 52 31  |&80....MOV PC,R1|
00001920  34 0d 0c ee 04 0d 0c f8  0b 2e 6c 64 72 62 34 31  |4.........ldrb41|
00001930  0d 0d 02 04 0d 0d 0c 1d  53 55 42 20 52 31 32 2c  |........SUB R12,|
00001940  6d 65 6d 2c 23 35 31 32  20 3b 20 73 68 65 69 6c  |mem,#512 ; sheil|
00001950  61 0d 0d 16 1b 4c 44 52  42 20 52 31 2c 5b 52 31  |a....LDRB R1,[R1|
00001960  32 2c 23 26 43 5d 20 3b  20 50 43 52 0d 0d 20 16  |2,#&C] ; PCR.. .|
00001970  4c 44 52 42 20 52 32 2c  5b 6d 65 6d 2c 23 69 66  |LDRB R2,[mem,#if|
00001980  72 5d 0d 0d 2a 13 80 20  52 31 33 2c 52 31 2c 23  |r]..*.. R13,R1,#|
00001990  25 31 31 31 30 0d 0d 34  15 54 45 51 20 52 31 33  |%1110..4.TEQ R13|
000019a0  2c 20 20 20 23 25 30 30  31 30 0d 0d 3e 15 54 45  |,   #%0010..>.TE|
000019b0  51 4e 45 20 52 31 33 2c  20 23 25 30 31 31 30 0d  |QNE R13, #%0110.|
000019c0  0d 48 14 42 49 43 45 51  20 52 32 2c 52 32 2c 23  |.H.BICEQ R2,R2,#|
000019d0  25 31 31 0d 0d 52 14 42  49 43 4e 45 20 52 32 2c  |%11..R.BICNE R2,|
000019e0  52 32 2c 23 25 31 30 0d  0d 5c 16 53 54 52 42 20  |R2,#%10..\.STRB |
000019f0  52 32 2c 5b 6d 65 6d 2c  23 69 66 72 5d 0d 0d 66  |R2,[mem,#ifr]..f|
00001a00  04 0d 0d 70 16 4c 44 52  42 20 52 30 2c 5b 52 31  |...p.LDRB R0,[R1|
00001a10  32 2c 23 26 34 46 5d 0d  0d 7a 0e 4d 4f 56 20 50  |2,#&4F]..z.MOV P|
00001a20  43 2c 52 31 34 0d 0d 84  04 0d 0d 8e 0b 2e 6c 64  |C,R14.........ld|
00001a30  72 62 34 46 0d 0d 98 04  0d 0d a2 1d 53 55 42 20  |rb4F........SUB |
00001a40  52 31 32 2c 6d 65 6d 2c  23 35 31 32 20 3b 20 73  |R12,mem,#512 ; s|
00001a50  68 65 69 6c 61 0d 0d ac  16 4c 44 52 42 20 52 30  |heila....LDRB R0|
00001a60  2c 5b 52 31 32 2c 23 26  34 46 5d 0d 0d b6 0e 4d  |,[R12,#&4F]....M|
00001a70  4f 56 20 50 43 2c 52 31  34 0d 0d c0 04 0d 0d ca  |OV PC,R14.......|
00001a80  04 0d 0d d4 14 2e 72 65  61 64 54 34 6c 6f 77 5f  |......readT4low_|
00001a90  63 6f 75 6e 74 0d 0d de  17 4c 44 52 42 20 52 31  |count....LDRB R1|
00001aa0  2c 5b 6d 65 6d 2c 23 69  66 72 32 5d 0d 0d e8 19  |,[mem,#ifr2]....|
00001ab0  42 49 43 20 52 31 2c 52  31 2c 20 23 25 30 30 31  |BIC R1,R1, #%001|
00001ac0  30 30 30 30 30 0d 0d f2  17 53 54 52 42 20 52 31  |00000....STRB R1|
00001ad0  2c 5b 6d 65 6d 2c 23 69  66 72 32 5d 0d 0d fc 14  |,[mem,#ifr2]....|
00001ae0  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 54 34 5d  |LDR R0,[mem,#T4]|
00001af0  0d 0e 06 15 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |....LDR R1,[mem,|
00001b00  23 6d 69 6e 5d 0d 0e 10  17 53 55 42 20 52 30 2c  |#min]....SUB R0,|
00001b10  52 30 2c 52 31 2c 4c 53  4c 23 31 35 0d 0e 1a 19  |R0,R1,LSL#15....|
00001b20  41 44 44 20 52 30 2c 52  30 2c 74 69 6d 65 2c 4c  |ADD R0,R0,time,L|
00001b30  53 4c 23 31 35 0d 0e 24  19 54 53 54 20 52 30 2c  |SL#15..$.TST R0,|
00001b40  23 31 20 3c 3c 20 31 35  20 3b 20 3f 3f 3f 0d 0e  |#1 << 15 ; ???..|
00001b50  2e 16 53 55 42 4e 45 20  74 69 6d 65 2c 74 69 6d  |..SUBNE time,tim|
00001b60  65 2c 23 31 0d 0e 38 14  4d 4f 56 20 52 30 2c 52  |e,#1..8.MOV R0,R|
00001b70  30 2c 4c 53 52 23 31 36  0d 0e 42 10 80 20 52 30  |0,LSR#16..B.. R0|
00001b80  2c 52 30 2c 23 26 46 46  0d 0e 4c 0e 4d 4f 56 20  |,R0,#&FF..L.MOV |
00001b90  50 43 2c 52 31 34 0d 0e  56 04 0d 0e 60 15 2e 72  |PC,R14..V...`..r|
00001ba0  65 61 64 54 34 68 69 67  68 5f 63 6f 75 6e 74 0d  |eadT4high_count.|
00001bb0  0e 6a 14 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |.j.LDR R0,[mem,#|
00001bc0  54 34 5d 0d 0e 74 15 4c  44 52 20 52 31 2c 5b 6d  |T4]..t.LDR R1,[m|
00001bd0  65 6d 2c 23 6d 69 6e 5d  0d 0e 7e 17 53 55 42 20  |em,#min]..~.SUB |
00001be0  52 30 2c 52 30 2c 52 31  2c 4c 53 4c 23 31 35 0d  |R0,R0,R1,LSL#15.|
00001bf0  0e 88 19 41 44 44 20 52  30 2c 52 30 2c 74 69 6d  |...ADD R0,R0,tim|
00001c00  65 2c 4c 53 4c 23 31 35  0d 0e 92 19 54 53 54 20  |e,LSL#15....TST |
00001c10  52 30 2c 23 31 20 3c 3c  20 31 35 20 3b 20 3f 3f  |R0,#1 << 15 ; ??|
00001c20  3f 0d 0e 9c 16 53 55 42  4e 45 20 74 69 6d 65 2c  |?....SUBNE time,|
00001c30  74 69 6d 65 2c 23 31 0d  0e a6 14 4d 4f 56 20 52  |time,#1....MOV R|
00001c40  30 2c 52 30 2c 4c 53 52  23 32 34 0d 0e b0 0e 4d  |0,R0,LSR#24....M|
00001c50  4f 56 20 50 43 2c 52 31  34 0d 0e ba 04 0d 0e c4  |OV PC,R14.......|
00001c60  14 2e 72 65 61 64 54 33  6c 6f 77 5f 63 6f 75 6e  |..readT3low_coun|
00001c70  74 0d 0e ce 16 4c 44 52  20 52 31 2c 5b 6d 65 6d  |t....LDR R1,[mem|
00001c80  2c 23 69 66 72 32 5d 0d  0e d8 17 42 49 43 20 52  |,#ifr2]....BIC R|
00001c90  31 2c 52 31 2c 20 23 25  31 20 3c 3c 20 36 0d 0e  |1,R1, #%1 << 6..|
00001ca0  e2 31 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |.1STRB R1,[mem,#|
00001cb0  69 66 72 32 5d 20 3b 20  63 6c 65 61 72 20 54 33  |ifr2] ; clear T3|
00001cc0  20 69 6e 74 65 72 72 75  70 74 20 66 6c 61 67 0d  | interrupt flag.|
00001cd0  0e ec 14 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00001ce0  54 33 5d 0d 0e f6 15 4c  44 52 20 52 31 2c 5b 6d  |T3]....LDR R1,[m|
00001cf0  65 6d 2c 23 6d 69 6e 5d  0d 0f 00 17 53 55 42 20  |em,#min]....SUB |
00001d00  52 30 2c 52 30 2c 52 31  2c 4c 53 4c 23 31 35 0d  |R0,R0,R1,LSL#15.|
00001d10  0f 0a 19 41 44 44 20 52  30 2c 52 30 2c 74 69 6d  |...ADD R0,R0,tim|
00001d20  65 2c 4c 53 4c 23 31 35  0d 0f 14 19 54 53 54 20  |e,LSL#15....TST |
00001d30  52 30 2c 23 31 20 3c 3c  20 31 35 20 3b 20 3f 3f  |R0,#1 << 15 ; ??|
00001d40  3f 0d 0f 1e 16 53 55 42  4e 45 20 74 69 6d 65 2c  |?....SUBNE time,|
00001d50  74 69 6d 65 2c 23 31 0d  0f 28 14 4d 4f 56 20 52  |time,#1..(.MOV R|
00001d60  30 2c 52 30 2c 4c 53 52  23 31 36 0d 0f 32 10 80  |0,R0,LSR#16..2..|
00001d70  20 52 30 2c 52 30 2c 23  26 46 46 0d 0f 3c 0e 4d  | R0,R0,#&FF..<.M|
00001d80  4f 56 20 50 43 2c 52 31  34 0d 0f 46 04 0d 0f 50  |OV PC,R14..F...P|
00001d90  15 2e 72 65 61 64 54 33  68 69 67 68 5f 63 6f 75  |..readT3high_cou|
00001da0  6e 74 0d 0f 5a 14 4c 44  52 20 52 30 2c 5b 6d 65  |nt..Z.LDR R0,[me|
00001db0  6d 2c 23 54 33 5d 0d 0f  64 15 4c 44 52 20 52 31  |m,#T3]..d.LDR R1|
00001dc0  2c 5b 6d 65 6d 2c 23 6d  69 6e 5d 0d 0f 6e 17 53  |,[mem,#min]..n.S|
00001dd0  55 42 20 52 30 2c 52 30  2c 52 31 2c 4c 53 4c 23  |UB R0,R0,R1,LSL#|
00001de0  31 35 0d 0f 78 19 41 44  44 20 52 30 2c 52 30 2c  |15..x.ADD R0,R0,|
00001df0  74 69 6d 65 2c 4c 53 4c  23 31 35 0d 0f 82 19 54  |time,LSL#15....T|
00001e00  53 54 20 52 30 2c 23 31  20 3c 3c 20 31 35 20 3b  |ST R0,#1 << 15 ;|
00001e10  20 3f 3f 3f 0d 0f 8c 16  53 55 42 4e 45 20 74 69  | ???....SUBNE ti|
00001e20  6d 65 2c 74 69 6d 65 2c  23 31 0d 0f 96 14 4d 4f  |me,time,#1....MO|
00001e30  56 20 52 30 2c 52 30 2c  4c 53 52 23 32 34 0d 0f  |V R0,R0,LSR#24..|
00001e40  a0 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 0f aa 04  |..MOV PC,R14....|
00001e50  0d 0f b4 14 2e 72 65 61  64 54 33 6c 6f 77 5f 6c  |.....readT3low_l|
00001e60  61 74 63 68 0d 0f be 18  4c 44 52 42 20 52 30 2c  |atch....LDRB R0,|
00001e70  5b 6d 65 6d 2c 23 54 33  52 2b 32 5d 0d 0f c8 0e  |[mem,#T3R+2]....|
00001e80  4d 4f 56 20 50 43 2c 52  31 34 0d 0f d2 04 0d 0f  |MOV PC,R14......|
00001e90  dc 15 2e 72 65 61 64 54  33 68 69 67 68 5f 6c 61  |...readT3high_la|
00001ea0  74 63 68 0d 0f e6 18 4c  44 52 42 20 52 30 2c 5b  |tch....LDRB R0,[|
00001eb0  6d 65 6d 2c 23 54 33 52  2b 33 5d 0d 0f f0 0e 4d  |mem,#T3R+3]....M|
00001ec0  4f 56 20 50 43 2c 52 31  34 0d 0f fa 04 0d 10 04  |OV PC,R14.......|
00001ed0  0c 2e 41 43 52 74 65 6d  70 0d 10 0e 0a 45 51 55  |..ACRtemp....EQU|
00001ee0  44 20 30 0d 10 18 04 0d  10 22 0e 2e 77 72 69 74  |D 0......"..writ|
00001ef0  65 41 43 52 32 0d 10 2c  0e 3b 4d 4f 56 20 52 30  |eACR2..,.;MOV R0|
00001f00  2c 23 30 0d 10 36 1a 3b  53 54 52 42 20 52 30 2c  |,#0..6.;STRB R0,|
00001f10  5b 6d 65 6d 2c 23 54 33  6d 6f 64 65 5d 0d 10 40  |[mem,#T3mode]..@|
00001f20  13 53 55 42 20 52 30 2c  6d 65 6d 2c 23 35 31 32  |.SUB R0,mem,#512|
00001f30  0d 10 4a 15 4c 44 52 42  20 52 31 2c 5b 52 30 2c  |..J.LDRB R1,[R0,|
00001f40  23 26 36 30 5d 0d 10 54  11 84 52 20 52 31 2c 52  |#&60]..T..R R1,R|
00001f50  31 2c 23 26 38 30 0d 10  5e 15 53 54 52 42 20 52  |1,#&80..^.STRB R|
00001f60  31 2c 5b 52 30 2c 23 26  36 30 5d 0d 10 68 0e 3b  |1,[R0,#&60]..h.;|
00001f70  4d 4f 56 20 52 30 2c 23  31 0d 10 72 14 3b 53 54  |MOV R0,#1..r.;ST|
00001f80  52 42 20 52 30 2c 41 43  52 74 65 6d 70 0d 10 7c  |RB R0,ACRtemp..||
00001f90  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 10 86 04 0d  |.MOV PC,R14.....|
00001fa0  10 90 15 2e 77 72 69 74  65 54 33 6c 6f 77 5f 6c  |....writeT3low_l|
00001fb0  61 74 63 68 0d 10 9a 18  53 54 52 42 20 52 30 2c  |atch....STRB R0,|
00001fc0  5b 6d 65 6d 2c 23 54 33  52 2b 32 5d 0d 10 a4 0e  |[mem,#T3R+2]....|
00001fd0  4d 4f 56 20 50 43 2c 52  31 34 0d 10 ae 04 0d 10  |MOV PC,R14......|
00001fe0  b8 16 2e 77 72 69 74 65  54 33 68 69 67 68 5f 63  |...writeT3high_c|
00001ff0  6f 75 6e 74 0d 10 c2 18  53 54 52 42 20 52 30 2c  |ount....STRB R0,|
00002000  5b 6d 65 6d 2c 23 54 33  52 2b 33 5d 0d 10 cc 15  |[mem,#T3R+3]....|
00002010  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 54 33 52  |LDR R0,[mem,#T3R|
00002020  5d 0d 10 d6 16 41 44 44  20 52 30 2c 52 30 2c 23  |]....ADD R0,R0,#|
00002030  32 20 3c 3c 20 31 36 0d  10 e0 04 0d 10 ea 2b 43  |2 << 16.......+C|
00002040  4d 50 20 52 30 2c 74 69  6d 65 2c 4c 53 4c 23 31  |MP R0,time,LSL#1|
00002050  35 20 3b 20 66 69 78 20  45 78 69 6c 65 27 73 20  |5 ; fix Exile's |
00002060  73 70 65 65 63 68 0d 10  f4 04 0d 10 fe 15 42 48  |speech........BH|
00002070  49 20 73 6b 69 70 5f 54  33 61 64 6a 75 73 74 0d  |I skip_T3adjust.|
00002080  11 08 17 4c 44 52 42 20  52 32 2c 5b 6d 65 6d 2c  |...LDRB R2,[mem,|
00002090  23 69 65 72 32 5d 0d 11  12 04 0d 11 1c 15 54 53  |#ier2]........TS|
000020a0  54 20 52 32 2c 23 25 30  31 30 30 30 30 30 30 0d  |T R2,#%01000000.|
000020b0  11 26 18 4d 4f 56 4e 45  20 74 69 6d 65 2c 52 30  |.&.MOVNE time,R0|
000020c0  2c 4c 53 52 23 31 35 0d  11 30 04 0d 11 3a 12 2e  |,LSR#15..0...:..|
000020d0  73 6b 69 70 5f 54 33 61  64 6a 75 73 74 0d 11 44  |skip_T3adjust..D|
000020e0  15 4c 44 52 20 52 31 2c  5b 6d 65 6d 2c 23 6d 69  |.LDR R1,[mem,#mi|
000020f0  6e 5d 0d 11 4e 17 41 44  44 20 52 30 2c 52 30 2c  |n]..N.ADD R0,R0,|
00002100  52 31 2c 4c 53 4c 23 31  35 0d 11 58 19 53 55 42  |R1,LSL#15..X.SUB|
00002110  20 52 30 2c 52 30 2c 74  69 6d 65 2c 4c 53 4c 23  | R0,R0,time,LSL#|
00002120  31 35 0d 11 62 14 53 54  52 20 52 30 2c 5b 6d 65  |15..b.STR R0,[me|
00002130  6d 2c 23 54 33 5d 0d 11  6c 17 4c 44 52 42 20 52  |m,#T3]..l.LDRB R|
00002140  31 2c 5b 6d 65 6d 2c 23  69 66 72 32 5d 0d 11 76  |1,[mem,#ifr2]..v|
00002150  17 42 49 43 20 52 31 2c  52 31 2c 20 23 25 31 20  |.BIC R1,R1, #%1 |
00002160  3c 3c 20 36 0d 11 80 31  53 54 52 42 20 52 31 2c  |<< 6...1STRB R1,|
00002170  5b 6d 65 6d 2c 23 69 66  72 32 5d 20 3b 20 63 6c  |[mem,#ifr2] ; cl|
00002180  65 61 72 20 54 33 20 69  6e 74 65 72 72 75 70 74  |ear T3 interrupt|
00002190  20 66 6c 61 67 0d 11 8a  12 3b 53 55 42 20 52 30  | flag....;SUB R0|
000021a0  2c 52 30 2c 23 26 44 0d  11 94 1c 53 55 42 20 52  |,R0,#&D....SUB R|
000021b0  30 2c 6d 65 6d 2c 23 35  31 32 20 3b 20 73 68 65  |0,mem,#512 ; she|
000021c0  69 6c 61 0d 11 9e 04 0d  11 a8 04 0d 11 b2 15 4c  |ila............L|
000021d0  44 52 42 20 52 31 2c 5b  52 30 2c 23 26 36 42 5d  |DRB R1,[R0,#&6B]|
000021e0  0d 11 bc 11 82 20 52 31  2c 52 31 2c 23 31 3c 3c  |..... R1,R1,#1<<|
000021f0  37 0d 11 c6 11 80 53 20  52 31 2c 52 31 2c 23 26  |7.....S R1,R1,#&|
00002200  43 30 0d 11 d0 17 4c 44  52 45 51 42 20 52 31 2c  |C0....LDREQB R1,|
00002210  5b 52 30 2c 23 26 36 30  5d 0d 11 da 14 42 49 43  |[R0,#&60]....BIC|
00002220  45 51 20 52 31 2c 52 31  2c 23 26 38 30 0d 11 e4  |EQ R1,R1,#&80...|
00002230  17 53 54 52 45 51 42 20  52 31 2c 5b 52 30 2c 23  |.STREQB R1,[R0,#|
00002240  26 36 30 5d 0d 11 ee 04  0d 11 f8 1e 4c 44 52 42  |&60]........LDRB|
00002250  20 52 31 32 2c 5b 6d 65  6d 2c 23 63 72 74 5f 72  | R12,[mem,#crt_r|
00002260  65 67 73 2b 39 5d 0d 12  02 0e 43 4d 50 20 52 31  |egs+9]....CMP R1|
00002270  32 2c 23 33 0d 12 0c 1e  ec 51 20 50 43 2c 52 31  |2,#3.....Q PC,R1|
00002280  34 20 3b 20 66 6f 72 74  72 65 73 73 20 66 75 64  |4 ; fortress fud|
00002290  67 65 0d 12 16 04 0d 12  20 25 4d 4f 56 20 52 30  |ge...... %MOV R0|
000022a0  2c 23 31 20 3a 20 53 54  52 42 20 52 30 2c 5b 6d  |,#1 : STRB R0,[m|
000022b0  65 6d 2c 23 54 33 6d 6f  64 65 5d 0d 12 2a 0e 4d  |em,#T3mode]..*.M|
000022c0  4f 56 20 50 43 2c 52 31  34 0d 12 34 04 0d 12 3e  |OV PC,R14..4...>|
000022d0  16 2e 77 72 69 74 65 54  33 68 69 67 68 5f 6c 61  |..writeT3high_la|
000022e0  74 63 68 0d 12 48 18 53  54 52 42 20 52 30 2c 5b  |tch..H.STRB R0,[|
000022f0  6d 65 6d 2c 23 54 33 52  2b 33 5d 0d 12 52 0e 4d  |mem,#T3R+3]..R.M|
00002300  4f 56 20 50 43 2c 52 31  34 0d 12 5c 04 0d 12 66  |OV PC,R14..\...f|
00002310  15 2e 77 72 69 74 65 54  34 6c 6f 77 5f 6c 61 74  |..writeT4low_lat|
00002320  63 68 0d 12 70 18 53 54  52 42 20 52 30 2c 5b 6d  |ch..p.STRB R0,[m|
00002330  65 6d 2c 23 54 34 52 2b  32 5d 0d 12 7a 0e 4d 4f  |em,#T4R+2]..z.MO|
00002340  56 20 50 43 2c 52 31 34  0d 12 84 04 0d 12 8e 16  |V PC,R14........|
00002350  2e 77 72 69 74 65 54 34  68 69 67 68 5f 63 6f 75  |.writeT4high_cou|
00002360  6e 74 0d 12 98 18 4c 44  52 42 20 52 31 2c 5b 6d  |nt....LDRB R1,[m|
00002370  65 6d 2c 23 54 34 52 2b  32 5d 0d 12 a2 16 41 44  |em,#T4R+2]....AD|
00002380  44 20 52 31 2c 52 31 2c  52 30 2c 4c 53 4c 23 38  |D R1,R1,R0,LSL#8|
00002390  0d 12 ac 14 4d 4f 56 20  52 31 2c 52 31 2c 4c 53  |....MOV R1,R1,LS|
000023a0  4c 23 31 36 0d 12 b6 15  4c 44 52 20 52 30 2c 5b  |L#16....LDR R0,[|
000023b0  6d 65 6d 2c 23 6d 69 6e  5d 0d 12 c0 17 41 44 44  |mem,#min]....ADD|
000023c0  20 52 31 2c 52 31 2c 52  30 2c 4c 53 4c 23 31 35  | R1,R1,R0,LSL#15|
000023d0  0d 12 ca 19 53 55 42 20  52 31 2c 52 31 2c 74 69  |....SUB R1,R1,ti|
000023e0  6d 65 2c 4c 53 4c 23 31  35 0d 12 d4 17 3b 41 44  |me,LSL#15....;AD|
000023f0  44 20 52 31 2c 52 31 2c  23 32 20 3c 3c 20 31 36  |D R1,R1,#2 << 16|
00002400  0d 12 de 16 41 44 44 20  52 31 2c 52 31 2c 23 31  |....ADD R1,R1,#1|
00002410  20 3c 3c 20 31 36 0d 12  e8 14 53 54 52 20 52 31  | << 16....STR R1|
00002420  2c 5b 6d 65 6d 2c 23 54  34 5d 0d 12 f2 17 4c 44  |,[mem,#T4]....LD|
00002430  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 69 66 72 32  |RB R1,[mem,#ifr2|
00002440  5d 0d 12 fc 1a 42 49 43  53 20 52 31 2c 52 31 2c  |]....BICS R1,R1,|
00002450  20 23 25 30 30 31 20 3c  3c 20 35 0d 13 06 17 53  | #%001 << 5....S|
00002460  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R1,[mem,#ifr|
00002470  32 5d 0d 13 10 25 4d 4f  56 20 52 30 2c 23 31 20  |2]...%MOV R0,#1 |
00002480  3a 20 53 54 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |: STRB R0,[mem,#|
00002490  54 34 6d 6f 64 65 5d 0d  13 1a 0e 4d 4f 56 20 50  |T4mode]....MOV P|
000024a0  43 2c 52 31 34 0d 13 24  04 0d 13 2e 14 2e 72 65  |C,R14..$......re|
000024b0  61 64 54 32 6c 6f 77 5f  63 6f 75 6e 74 0d 13 38  |adT2low_count..8|
000024c0  16 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 69  |.LDRB R1,[mem,#i|
000024d0  66 72 5d 0d 13 42 19 42  49 43 20 52 31 2c 52 31  |fr]..B.BIC R1,R1|
000024e0  2c 20 23 25 31 30 31 20  3c 3c 20 35 0d 13 4c 30  |, #%101 << 5..L0|
000024f0  53 54 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 69 66  |STRB R1,[mem,#if|
00002500  72 5d 20 3b 20 63 6c 65  61 72 20 54 32 20 69 6e  |r] ; clear T2 in|
00002510  74 65 72 72 75 70 74 20  66 6c 61 67 0d 13 56 14  |terrupt flag..V.|
00002520  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 54 32 5d  |LDR R0,[mem,#T2]|
00002530  0d 13 60 15 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |..`.LDR R1,[mem,|
00002540  23 6d 69 6e 5d 0d 13 6a  17 53 55 42 20 52 30 2c  |#min]..j.SUB R0,|
00002550  52 30 2c 52 31 2c 4c 53  4c 23 31 35 0d 13 74 19  |R0,R1,LSL#15..t.|
00002560  41 44 44 20 52 30 2c 52  30 2c 74 69 6d 65 2c 4c  |ADD R0,R0,time,L|
00002570  53 4c 23 31 35 0d 13 7e  19 54 53 54 20 52 30 2c  |SL#15..~.TST R0,|
00002580  23 31 20 3c 3c 20 31 35  20 3b 20 3f 3f 3f 0d 13  |#1 << 15 ; ???..|
00002590  88 16 53 55 42 4e 45 20  74 69 6d 65 2c 74 69 6d  |..SUBNE time,tim|
000025a0  65 2c 23 31 0d 13 92 14  4d 4f 56 20 52 30 2c 52  |e,#1....MOV R0,R|
000025b0  30 2c 4c 53 52 23 31 36  0d 13 9c 10 80 20 52 30  |0,LSR#16..... R0|
000025c0  2c 52 30 2c 23 26 46 46  0d 13 a6 0e 4d 4f 56 20  |,R0,#&FF....MOV |
000025d0  50 43 2c 52 31 34 0d 13  b0 04 0d 13 ba 15 2e 72  |PC,R14.........r|
000025e0  65 61 64 54 32 68 69 67  68 5f 63 6f 75 6e 74 0d  |eadT2high_count.|
000025f0  13 c4 14 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00002600  54 32 5d 0d 13 ce 15 4c  44 52 20 52 31 2c 5b 6d  |T2]....LDR R1,[m|
00002610  65 6d 2c 23 6d 69 6e 5d  0d 13 d8 17 53 55 42 20  |em,#min]....SUB |
00002620  52 30 2c 52 30 2c 52 31  2c 4c 53 4c 23 31 35 0d  |R0,R0,R1,LSL#15.|
00002630  13 e2 19 41 44 44 20 52  30 2c 52 30 2c 74 69 6d  |...ADD R0,R0,tim|
00002640  65 2c 4c 53 4c 23 31 35  0d 13 ec 19 54 53 54 20  |e,LSL#15....TST |
00002650  52 30 2c 23 31 20 3c 3c  20 31 35 20 3b 20 3f 3f  |R0,#1 << 15 ; ??|
00002660  3f 0d 13 f6 16 53 55 42  4e 45 20 74 69 6d 65 2c  |?....SUBNE time,|
00002670  74 69 6d 65 2c 23 31 0d  14 00 14 4d 4f 56 20 52  |time,#1....MOV R|
00002680  30 2c 52 30 2c 4c 53 52  23 32 34 0d 14 0a 0e 4d  |0,R0,LSR#24....M|
00002690  4f 56 20 50 43 2c 52 31  34 0d 14 14 04 0d 14 1e  |OV PC,R14.......|
000026a0  14 2e 72 65 61 64 54 31  6c 6f 77 5f 63 6f 75 6e  |..readT1low_coun|
000026b0  74 0d 14 28 16 4c 44 52  42 20 52 31 2c 5b 6d 65  |t..(.LDRB R1,[me|
000026c0  6d 2c 23 69 66 72 5d 0d  14 32 17 42 49 43 20 52  |m,#ifr]..2.BIC R|
000026d0  31 2c 52 31 2c 20 23 25  31 20 3c 3c 20 36 0d 14  |1,R1, #%1 << 6..|
000026e0  3c 30 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |<0STRB R1,[mem,#|
000026f0  69 66 72 5d 20 3b 20 63  6c 65 61 72 20 54 31 20  |ifr] ; clear T1 |
00002700  69 6e 74 65 72 72 75 70  74 20 66 6c 61 67 0d 14  |interrupt flag..|
00002710  46 14 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 54  |F.LDR R0,[mem,#T|
00002720  31 5d 0d 14 50 15 4c 44  52 20 52 31 2c 5b 6d 65  |1]..P.LDR R1,[me|
00002730  6d 2c 23 6d 69 6e 5d 0d  14 5a 17 53 55 42 20 52  |m,#min]..Z.SUB R|
00002740  30 2c 52 30 2c 52 31 2c  4c 53 4c 23 31 35 0d 14  |0,R0,R1,LSL#15..|
00002750  64 19 41 44 44 20 52 30  2c 52 30 2c 74 69 6d 65  |d.ADD R0,R0,time|
00002760  2c 4c 53 4c 23 31 35 0d  14 6e 19 54 53 54 20 52  |,LSL#15..n.TST R|
00002770  30 2c 23 31 20 3c 3c 20  31 35 20 3b 20 3f 3f 3f  |0,#1 << 15 ; ???|
00002780  0d 14 78 16 53 55 42 4e  45 20 74 69 6d 65 2c 74  |..x.SUBNE time,t|
00002790  69 6d 65 2c 23 31 0d 14  82 14 4d 4f 56 20 52 30  |ime,#1....MOV R0|
000027a0  2c 52 30 2c 4c 53 52 23  31 36 0d 14 8c 10 80 20  |,R0,LSR#16..... |
000027b0  52 30 2c 52 30 2c 23 26  46 46 0d 14 96 0e 4d 4f  |R0,R0,#&FF....MO|
000027c0  56 20 50 43 2c 52 31 34  0d 14 a0 04 0d 14 aa 15  |V PC,R14........|
000027d0  2e 72 65 61 64 54 31 68  69 67 68 5f 63 6f 75 6e  |.readT1high_coun|
000027e0  74 0d 14 b4 14 4c 44 52  20 52 30 2c 5b 6d 65 6d  |t....LDR R0,[mem|
000027f0  2c 23 54 31 5d 0d 14 be  15 4c 44 52 20 52 31 2c  |,#T1]....LDR R1,|
00002800  5b 6d 65 6d 2c 23 6d 69  6e 5d 0d 14 c8 17 53 55  |[mem,#min]....SU|
00002810  42 20 52 30 2c 52 30 2c  52 31 2c 4c 53 4c 23 31  |B R0,R0,R1,LSL#1|
00002820  35 0d 14 d2 19 41 44 44  20 52 30 2c 52 30 2c 74  |5....ADD R0,R0,t|
00002830  69 6d 65 2c 4c 53 4c 23  31 35 0d 14 dc 19 54 53  |ime,LSL#15....TS|
00002840  54 20 52 30 2c 23 31 20  3c 3c 20 31 35 20 3b 20  |T R0,#1 << 15 ; |
00002850  3f 3f 3f 0d 14 e6 16 53  55 42 4e 45 20 74 69 6d  |???....SUBNE tim|
00002860  65 2c 74 69 6d 65 2c 23  31 0d 14 f0 14 4d 4f 56  |e,time,#1....MOV|
00002870  20 52 30 2c 52 30 2c 4c  53 52 23 32 34 0d 14 fa  | R0,R0,LSR#24...|
00002880  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 15 04 04 0d  |.MOV PC,R14.....|
00002890  15 0e 14 2e 72 65 61 64  54 31 6c 6f 77 5f 6c 61  |....readT1low_la|
000028a0  74 63 68 0d 15 18 18 4c  44 52 42 20 52 30 2c 5b  |tch....LDRB R0,[|
000028b0  6d 65 6d 2c 23 54 31 52  2b 32 5d 0d 15 22 0e 4d  |mem,#T1R+2]..".M|
000028c0  4f 56 20 50 43 2c 52 31  34 0d 15 2c 04 0d 15 36  |OV PC,R14..,...6|
000028d0  15 2e 72 65 61 64 54 31  68 69 67 68 5f 6c 61 74  |..readT1high_lat|
000028e0  63 68 0d 15 40 18 4c 44  52 42 20 52 30 2c 5b 6d  |ch..@.LDRB R0,[m|
000028f0  65 6d 2c 23 54 31 52 2b  33 5d 0d 15 4a 0e 4d 4f  |em,#T1R+3]..J.MO|
00002900  56 20 50 43 2c 52 31 34  0d 15 54 04 0d 15 5e 15  |V PC,R14..T...^.|
00002910  2e 77 72 69 74 65 54 31  6c 6f 77 5f 6c 61 74 63  |.writeT1low_latc|
00002920  68 0d 15 68 18 53 54 52  42 20 52 30 2c 5b 6d 65  |h..h.STRB R0,[me|
00002930  6d 2c 23 54 31 52 2b 32  5d 0d 15 72 0e 4d 4f 56  |m,#T1R+2]..r.MOV|
00002940  20 50 43 2c 52 31 34 0d  15 7c 04 0d 15 86 16 2e  | PC,R14..|......|
00002950  77 72 69 74 65 54 31 68  69 67 68 5f 63 6f 75 6e  |writeT1high_coun|
00002960  74 0d 15 90 18 53 54 52  42 20 52 30 2c 5b 6d 65  |t....STRB R0,[me|
00002970  6d 2c 23 54 31 52 2b 33  5d 0d 15 9a 15 4c 44 52  |m,#T1R+3]....LDR|
00002980  20 52 30 2c 5b 6d 65 6d  2c 23 54 31 52 5d 0d 15  | R0,[mem,#T1R]..|
00002990  a4 15 4c 44 52 20 52 31  2c 5b 6d 65 6d 2c 23 6d  |..LDR R1,[mem,#m|
000029a0  69 6e 5d 0d 15 ae 17 41  44 44 20 52 30 2c 52 30  |in]....ADD R0,R0|
000029b0  2c 52 31 2c 4c 53 4c 23  31 35 0d 15 b8 19 53 55  |,R1,LSL#15....SU|
000029c0  42 20 52 30 2c 52 30 2c  74 69 6d 65 2c 4c 53 4c  |B R0,R0,time,LSL|
000029d0  23 31 35 0d 15 c2 16 41  44 44 20 52 30 2c 52 30  |#15....ADD R0,R0|
000029e0  2c 23 32 20 3c 3c 20 31  36 0d 15 cc 14 53 54 52  |,#2 << 16....STR|
000029f0  20 52 30 2c 5b 6d 65 6d  2c 23 54 31 5d 0d 15 d6  | R0,[mem,#T1]...|
00002a00  15 4c 44 52 20 52 31 2c  5b 6d 65 6d 2c 23 69 66  |.LDR R1,[mem,#if|
00002a10  72 5d 0d 15 e0 17 42 49  43 20 52 31 2c 52 31 2c  |r]....BIC R1,R1,|
00002a20  20 23 25 31 20 3c 3c 20  36 0d 15 ea 30 53 54 52  | #%1 << 6...0STR|
00002a30  42 20 52 31 2c 5b 6d 65  6d 2c 23 69 66 72 5d 20  |B R1,[mem,#ifr] |
00002a40  3b 20 63 6c 65 61 72 20  54 31 20 69 6e 74 65 72  |; clear T1 inter|
00002a50  72 75 70 74 20 66 6c 61  67 0d 15 f4 1c 53 55 42  |rupt flag....SUB|
00002a60  20 52 30 2c 6d 65 6d 2c  23 35 31 32 20 3b 20 73  | R0,mem,#512 ; s|
00002a70  68 65 69 6c 61 0d 15 fe  15 4c 44 52 42 20 52 31  |heila....LDRB R1|
00002a80  2c 5b 52 30 2c 23 26 34  30 5d 0d 16 08 12 42 49  |,[R0,#&40]....BI|
00002a90  43 20 52 31 2c 52 31 2c  23 26 38 30 0d 16 12 15  |C R1,R1,#&80....|
00002aa0  53 54 52 42 20 52 31 2c  5b 52 30 2c 23 26 34 30  |STRB R1,[R0,#&40|
00002ab0  5d 0d 16 1c 25 4d 4f 56  20 52 30 2c 23 31 20 3a  |]...%MOV R0,#1 :|
00002ac0  20 53 54 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 54  | STRB R0,[mem,#T|
00002ad0  31 6d 6f 64 65 5d 0d 16  26 0e 4d 4f 56 20 50 43  |1mode]..&.MOV PC|
00002ae0  2c 52 31 34 0d 16 30 04  0d 16 3a 16 2e 77 72 69  |,R14..0...:..wri|
00002af0  74 65 54 31 68 69 67 68  5f 6c 61 74 63 68 0d 16  |teT1high_latch..|
00002b00  44 18 53 54 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |D.STRB R0,[mem,#|
00002b10  54 31 52 2b 33 5d 0d 16  4e 0e 4d 4f 56 20 50 43  |T1R+3]..N.MOV PC|
00002b20  2c 52 31 34 0d 16 58 04  0d 16 62 15 2e 77 72 69  |,R14..X...b..wri|
00002b30  74 65 54 32 6c 6f 77 5f  6c 61 74 63 68 0d 16 6c  |teT2low_latch..l|
00002b40  18 53 54 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 54  |.STRB R0,[mem,#T|
00002b50  32 52 2b 32 5d 0d 16 76  0e 4d 4f 56 20 50 43 2c  |2R+2]..v.MOV PC,|
00002b60  52 31 34 0d 16 80 04 0d  16 8a 16 2e 77 72 69 74  |R14.........writ|
00002b70  65 54 32 68 69 67 68 5f  63 6f 75 6e 74 0d 16 94  |eT2high_count...|
00002b80  18 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 54  |.LDRB R1,[mem,#T|
00002b90  32 52 2b 32 5d 0d 16 9e  16 41 44 44 20 52 31 2c  |2R+2]....ADD R1,|
00002ba0  52 31 2c 52 30 2c 4c 53  4c 23 38 0d 16 a8 14 4d  |R1,R0,LSL#8....M|
00002bb0  4f 56 20 52 31 2c 52 31  2c 4c 53 4c 23 31 36 0d  |OV R1,R1,LSL#16.|
00002bc0  16 b2 15 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00002bd0  6d 69 6e 5d 0d 16 bc 17  41 44 44 20 52 31 2c 52  |min]....ADD R1,R|
00002be0  31 2c 52 30 2c 4c 53 4c  23 31 35 0d 16 c6 19 53  |1,R0,LSL#15....S|
00002bf0  55 42 20 52 31 2c 52 31  2c 74 69 6d 65 2c 4c 53  |UB R1,R1,time,LS|
00002c00  4c 23 31 35 0d 16 d0 16  41 44 44 20 52 31 2c 52  |L#15....ADD R1,R|
00002c10  31 2c 23 32 20 3c 3c 20  31 36 0d 16 da 14 53 54  |1,#2 << 16....ST|
00002c20  52 20 52 31 2c 5b 6d 65  6d 2c 23 54 32 5d 0d 16  |R R1,[mem,#T2]..|
00002c30  e4 15 4c 44 52 20 52 31  2c 5b 6d 65 6d 2c 23 69  |..LDR R1,[mem,#i|
00002c40  66 72 5d 0d 16 ee 1a 42  49 43 53 20 52 31 2c 52  |fr]....BICS R1,R|
00002c50  31 2c 20 23 25 31 30 31  20 3c 3c 20 35 0d 16 f8  |1, #%101 << 5...|
00002c60  30 53 54 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 69  |0STRB R1,[mem,#i|
00002c70  66 72 5d 20 3b 20 63 6c  65 61 72 20 54 32 20 69  |fr] ; clear T2 i|
00002c80  6e 74 65 72 72 75 70 74  20 66 6c 61 67 0d 17 02  |nterrupt flag...|
00002c90  25 4d 4f 56 20 52 30 2c  23 31 20 3a 20 53 54 52  |%MOV R0,#1 : STR|
00002ca0  42 20 52 30 2c 5b 6d 65  6d 2c 23 54 32 6d 6f 64  |B R0,[mem,#T2mod|
00002cb0  65 5d 0d 17 0c 0e 4d 4f  56 20 50 43 2c 52 31 34  |e]....MOV PC,R14|
00002cc0  0d 17 16 04 0d 17 20 0c  3b 2e 54 31 6d 6f 64 65  |...... .;.T1mode|
00002cd0  0d 17 2a 0b 3b 45 51 55  44 20 31 0d 17 34 0c 3b  |..*.;EQUD 1..4.;|
00002ce0  2e 54 32 6d 6f 64 65 0d  17 3e 0b 3b 45 51 55 44  |.T2mode..>.;EQUD|
00002cf0  20 30 0d 17 48 0c 3b 2e  54 33 6d 6f 64 65 0d 17  | 0..H.;.T3mode..|
00002d00  52 0b 3b 45 51 55 44 20  31 0d 17 5c 0c 3b 2e 54  |R.;EQUD 1..\.;.T|
00002d10  34 6d 6f 64 65 0d 17 66  0b 3b 45 51 55 44 20 30  |4mode..f.;EQUD 0|
00002d20  0d 17 70 08 3b 2e 54 31  0d 17 7a 15 3b 45 51 55  |..p.;.T1..z.;EQU|
00002d30  44 20 26 31 32 33 34 20  3c 3c 20 31 36 0d 17 84  |D &1234 << 16...|
00002d40  09 3b 2e 54 31 52 0d 17  8e 15 3b 45 51 55 44 20  |.;.T1R....;EQUD |
00002d50  32 30 30 30 30 20 3c 3c  20 31 36 0d 17 98 08 3b  |20000 << 16....;|
00002d60  2e 54 32 0d 17 a2 15 3b  45 51 55 44 20 39 38 37  |.T2....;EQUD 987|
00002d70  36 35 20 3c 3c 20 31 36  0d 17 ac 09 3b 2e 54 32  |65 << 16....;.T2|
00002d80  52 0d 17 b6 15 3b 45 51  55 44 20 32 35 35 20 20  |R....;EQUD 255  |
00002d90  20 3c 3c 20 31 36 0d 17  c0 08 3b 2e 54 33 0d 17  | << 16....;.T3..|
00002da0  ca 15 3b 45 51 55 44 20  36 37 37 37 20 20 3c 3c  |..;EQUD 6777  <<|
00002db0  20 31 36 0d 17 d4 09 3b  2e 54 33 52 0d 17 de 15  | 16....;.T3R....|
00002dc0  3b 45 51 55 44 20 36 37  37 37 20 20 3c 3c 20 31  |;EQUD 6777  << 1|
00002dd0  36 0d 17 e8 08 3b 2e 54  34 0d 17 f2 15 3b 45 51  |6....;.T4....;EQ|
00002de0  55 44 20 37 33 38 30 20  20 3c 3c 20 31 36 0d 17  |UD 7380  << 16..|
00002df0  fc 09 3b 2e 54 34 52 0d  18 06 15 3b 45 51 55 44  |..;.T4R....;EQUD|
00002e00  20 32 35 35 20 20 20 3c  3c 20 31 36 0d 18 10 0c  | 255   << 16....|
00002e10  3b 2e 73 63 72 65 65 6e  0d 18 1a 0d 3b 45 51 55  |;.screen....;EQU|
00002e20  44 20 34 33 32 0d 18 24  0d 3b 2e 73 63 72 65 65  |D 432..$.;.scree|
00002e30  6e 52 0d 18 2e 0f 3b 45  51 55 44 20 34 30 30 30  |nR....;EQUD 4000|
00002e40  30 0d 18 38 09 3b 2e 6d  69 6e 0d 18 42 0d 3b 45  |0..8.;.min..B.;E|
00002e50  51 55 44 20 32 30 30 0d  18 4c 11 3b 2e 73 6f 75  |QUD 200..L.;.sou|
00002e60  6e 64 5f 74 69 6d 65 72  0d 18 56 0b 3b 45 51 55  |nd_timer..V.;EQU|
00002e70  44 20 30 0d 18 60 04 0d  18 6a 04 0d 18 74 0b 2e  |D 0..`...j...t..|
00002e80  6b 65 79 63 68 6b 0d 18  7e 0a 45 51 55 44 20 30  |keychk..~.EQUD 0|
00002e90  0d 18 88 04 0d 18 92 08  2e 43 4c 49 0d 18 9c 11  |.........CLI....|
00002ea0  42 49 43 20 46 2c 46 2c  23 25 31 30 30 0d 18 a6  |BIC F,F,#%100...|
00002eb0  18 41 44 44 20 7a 70 63  2c 7a 70 63 2c 23 31 20  |.ADD zpc,zpc,#1 |
00002ec0  3c 3c 20 31 36 0d 18 b0  12 4c 44 52 42 20 52 30  |<< 16....LDRB R0|
00002ed0  2c 6b 65 79 63 68 6b 0d  18 ba 0d 43 4d 50 20 52  |,keychk....CMP R|
00002ee0  30 2c 23 30 0d 18 c4 11  42 4c 45 51 20 6b 65 79  |0,#0....BLEQ key|
00002ef0  62 6f 61 72 64 0d 18 ce  10 3b 42 4c 20 6b 65 79  |board....;BL key|
00002f00  62 6f 61 72 64 0d 18 d8  10 a4 66 65 74 63 68 33  |board.....fetch3|
00002f10  28 30 2c 32 29 0d 18 e2  04 0d 18 ec 04 0d 18 f6  |(0,2)...........|
00002f20  04 0d 19 00 0b 2e 66 65  74 63 68 32 0d 19 0a 04  |......fetch2....|
00002f30  0d 19 14 15 4c 44 52 20  52 30 2c 5b 6d 65 6d 2c  |....LDR R0,[mem,|
00002f40  23 6d 69 6e 5d 0d 19 1e  12 53 55 42 20 52 30 2c  |#min]....SUB R0,|
00002f50  52 30 2c 74 69 6d 65 0d  19 28 1d 4c 44 52 20 52  |R0,time..(.LDR R|
00002f60  31 2c 5b 6d 65 6d 2c 23  73 6f 75 6e 64 5f 74 69  |1,[mem,#sound_ti|
00002f70  6d 65 72 5d 0d 19 32 10  53 55 42 20 52 31 2c 52  |mer]..2.SUB R1,R|
00002f80  31 2c 52 30 0d 19 3c 1d  53 54 52 20 52 31 2c 5b  |1,R0..<.STR R1,[|
00002f90  6d 65 6d 2c 23 73 6f 75  6e 64 5f 74 69 6d 65 72  |mem,#sound_timer|
00002fa0  5d 0d 19 46 04 0d 19 50  04 0d 19 5a 1d 4d 4f 56  |]..F...P...Z.MOV|
00002fb0  20 52 30 2c 23 30 20 3a  20 53 54 52 20 52 30 2c  | R0,#0 : STR R0,|
00002fc0  6b 65 79 63 68 6b 0d 19  64 15 4c 44 52 20 52 30  |keychk..d.LDR R0|
00002fd0  2c 5b 6d 65 6d 2c 23 6d  69 6e 5d 0d 19 6e 18 53  |,[mem,#min]..n.S|
00002fe0  55 42 20 52 30 2c 52 30  2c 74 69 6d 65 20 3b 20  |UB R0,R0,time ; |
00002ff0  2a 2a 2a 0d 19 78 18 4c  44 52 20 52 31 2c 5b 6d  |***..x.LDR R1,[m|
00003000  65 6d 2c 23 73 63 72 65  65 6e 5d 0d 19 82 11 53  |em,#screen]....S|
00003010  55 42 53 20 52 31 2c 52  31 2c 52 30 0d 19 8c 1a  |UBS R1,R1,R0....|
00003020  53 54 52 47 54 20 52 31  2c 5b 6d 65 6d 2c 23 73  |STRGT R1,[mem,#s|
00003030  63 72 65 65 6e 5d 0d 19  96 0e 42 4c 4c 45 20 76  |creen]....BLLE v|
00003040  73 79 6e 63 0d 19 a0 04  0d 19 aa 15 4c 44 52 20  |sync........LDR |
00003050  52 30 2c 5b 6d 65 6d 2c  23 6d 69 6e 5d 0d 19 b4  |R0,[mem,#min]...|
00003060  18 53 55 42 20 52 30 2c  52 30 2c 74 69 6d 65 20  |.SUB R0,R0,time |
00003070  3b 20 2a 2a 2a 0d 19 be  10 4c 44 52 20 52 31 2c  |; ***....LDR R1,|
00003080  73 70 65 65 64 0d 19 c8  11 53 55 42 53 20 52 31  |speed....SUBS R1|
00003090  2c 52 31 2c 52 30 0d 19  d2 12 53 54 52 47 54 20  |,R1,R0....STRGT |
000030a0  52 31 2c 73 70 65 65 64  0d 19 dc 16 42 4c 4c 45  |R1,speed....BLLE|
000030b0  20 73 70 65 65 64 5f 63  6f 6e 74 72 6f 6c 0d 19  | speed_control..|
000030c0  e6 04 0d 19 f0 1a 3b 20  4c 44 52 20 52 30 2c 5b  |......; LDR R0,[|
000030d0  6d 65 6d 2c 23 54 31 6d  6f 64 65 5d 0d 19 fa 10  |mem,#T1mode]....|
000030e0  3b 20 54 53 54 20 52 30  2c 23 25 31 0d 1a 04 15  |; TST R0,#%1....|
000030f0  3b 20 42 45 51 20 73 6b  69 70 5f 74 69 6d 65 72  |; BEQ skip_timer|
00003100  31 0d 1a 0e 04 0d 1a 18  15 4c 44 52 20 52 30 2c  |1........LDR R0,|
00003110  5b 6d 65 6d 2c 23 6d 69  6e 5d 0d 1a 22 18 53 55  |[mem,#min]..".SU|
00003120  42 20 52 30 2c 52 30 2c  74 69 6d 65 20 3b 20 2a  |B R0,R0,time ; *|
00003130  2a 2a 0d 1a 2c 14 4c 44  52 20 52 31 2c 5b 6d 65  |**..,.LDR R1,[me|
00003140  6d 2c 23 54 31 5d 0d 1a  36 18 53 55 42 53 20 52  |m,#T1]..6.SUBS R|
00003150  31 2c 52 31 2c 52 30 2c  4c 53 4c 23 31 35 0d 1a  |1,R1,R0,LSL#15..|
00003160  40 16 53 54 52 47 54 20  52 31 2c 5b 6d 65 6d 2c  |@.STRGT R1,[mem,|
00003170  23 54 31 5d 0d 1a 4a 0f  42 4c 4c 45 20 74 69 6d  |#T1]..J.BLLE tim|
00003180  65 72 31 0d 1a 54 10 2e  73 6b 69 70 5f 74 69 6d  |er1..T..skip_tim|
00003190  65 72 31 0d 1a 5e 04 0d  1a 68 1a 3b 20 4c 44 52  |er1..^...h.; LDR|
000031a0  20 52 30 2c 5b 6d 65 6d  2c 23 54 32 6d 6f 64 65  | R0,[mem,#T2mode|
000031b0  5d 0d 1a 72 10 3b 20 54  53 54 20 52 30 2c 23 25  |]..r.; TST R0,#%|
000031c0  31 0d 1a 7c 15 3b 20 42  45 51 20 73 6b 69 70 5f  |1..|.; BEQ skip_|
000031d0  74 69 6d 65 72 32 0d 1a  86 04 0d 1a 90 15 4c 44  |timer2........LD|
000031e0  52 20 52 30 2c 5b 6d 65  6d 2c 23 6d 69 6e 5d 0d  |R R0,[mem,#min].|
000031f0  1a 9a 18 53 55 42 20 52  30 2c 52 30 2c 74 69 6d  |...SUB R0,R0,tim|
00003200  65 20 3b 20 2a 2a 2a 0d  1a a4 14 4c 44 52 20 52  |e ; ***....LDR R|
00003210  31 2c 5b 6d 65 6d 2c 23  54 32 5d 0d 1a ae 18 53  |1,[mem,#T2]....S|
00003220  55 42 53 20 52 31 2c 52  31 2c 52 30 2c 4c 53 4c  |UBS R1,R1,R0,LSL|
00003230  23 31 35 0d 1a b8 14 53  54 52 20 52 31 2c 5b 6d  |#15....STR R1,[m|
00003240  65 6d 2c 23 54 32 5d 0d  1a c2 0f 42 4c 4c 45 20  |em,#T2]....BLLE |
00003250  74 69 6d 65 72 32 0d 1a  cc 10 2e 73 6b 69 70 5f  |timer2.....skip_|
00003260  74 69 6d 65 72 32 0d 1a  d6 04 0d 1a e0 1a 3b 20  |timer2........; |
00003270  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 54 33 6d  |LDR R0,[mem,#T3m|
00003280  6f 64 65 5d 0d 1a ea 10  3b 20 54 53 54 20 52 30  |ode]....; TST R0|
00003290  2c 23 25 31 0d 1a f4 15  3b 20 42 45 51 20 73 6b  |,#%1....; BEQ sk|
000032a0  69 70 5f 74 69 6d 65 72  33 0d 1a fe 04 0d 1b 08  |ip_timer3.......|
000032b0  15 4c 44 52 20 52 30 2c  5b 6d 65 6d 2c 23 6d 69  |.LDR R0,[mem,#mi|
000032c0  6e 5d 0d 1b 12 18 53 55  42 20 52 30 2c 52 30 2c  |n]....SUB R0,R0,|
000032d0  74 69 6d 65 20 3b 20 2a  2a 2a 0d 1b 1c 14 4c 44  |time ; ***....LD|
000032e0  52 20 52 31 2c 5b 6d 65  6d 2c 23 54 33 5d 0d 1b  |R R1,[mem,#T3]..|
000032f0  26 18 53 55 42 53 20 52  31 2c 52 31 2c 52 30 2c  |&.SUBS R1,R1,R0,|
00003300  4c 53 4c 23 31 35 0d 1b  30 16 53 54 52 47 54 20  |LSL#15..0.STRGT |
00003310  52 31 2c 5b 6d 65 6d 2c  23 54 33 5d 0d 1b 3a 0f  |R1,[mem,#T3]..:.|
00003320  42 4c 4c 45 20 74 69 6d  65 72 33 0d 1b 44 10 2e  |BLLE timer3..D..|
00003330  73 6b 69 70 5f 74 69 6d  65 72 33 0d 1b 4e 04 0d  |skip_timer3..N..|
00003340  1b 58 1a 3b 20 4c 44 52  20 52 30 2c 5b 6d 65 6d  |.X.; LDR R0,[mem|
00003350  2c 23 54 34 6d 6f 64 65  5d 0d 1b 62 10 3b 20 54  |,#T4mode]..b.; T|
00003360  53 54 20 52 30 2c 23 25  31 0d 1b 6c 16 3b 20 4d  |ST R0,#%1..l.; M|
00003370  56 4e 45 51 20 52 31 2c  23 30 20 3b 20 2d 31 0d  |VNEQ R1,#0 ; -1.|
00003380  1b 76 11 3b 20 53 54 52  45 51 20 52 31 2c 54 34  |.v.; STREQ R1,T4|
00003390  0d 1b 80 15 3b 20 42 45  51 20 73 6b 69 70 5f 74  |....; BEQ skip_t|
000033a0  69 6d 65 72 34 0d 1b 8a  04 0d 1b 94 15 4c 44 52  |imer4........LDR|
000033b0  20 52 30 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 1b  | R0,[mem,#min]..|
000033c0  9e 18 53 55 42 20 52 30  2c 52 30 2c 74 69 6d 65  |..SUB R0,R0,time|
000033d0  20 3b 20 2a 2a 2a 0d 1b  a8 14 4c 44 52 20 52 31  | ; ***....LDR R1|
000033e0  2c 5b 6d 65 6d 2c 23 54  34 5d 0d 1b b2 18 53 55  |,[mem,#T4]....SU|
000033f0  42 53 20 52 31 2c 52 31  2c 52 30 2c 4c 53 4c 23  |BS R1,R1,R0,LSL#|
00003400  31 35 0d 1b bc 14 53 54  52 20 52 31 2c 5b 6d 65  |15....STR R1,[me|
00003410  6d 2c 23 54 34 5d 0d 1b  c6 0f 42 4c 4c 45 20 74  |m,#T4]....BLLE t|
00003420  69 6d 65 72 34 0d 1b d0  10 2e 73 6b 69 70 5f 74  |imer4.....skip_t|
00003430  69 6d 65 72 34 0d 1b da  04 0d 1b e4 15 4c 44 52  |imer4........LDR|
00003440  20 52 30 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 1b  | R0,[mem,#min]..|
00003450  ee 12 53 55 42 20 52 30  2c 52 30 2c 74 69 6d 65  |..SUB R0,R0,time|
00003460  0d 1b f8 1c 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |....LDR R1,[mem,|
00003470  23 74 61 70 65 5f 63 6f  75 6e 74 5d 0d 1c 02 11  |#tape_count]....|
00003480  53 55 42 53 20 52 31 2c  52 31 2c 52 30 0d 1c 0c  |SUBS R1,R1,R0...|
00003490  1e 53 54 52 47 54 20 52  31 2c 5b 6d 65 6d 2c 23  |.STRGT R1,[mem,#|
000034a0  74 61 70 65 5f 63 6f 75  6e 74 5d 0d 1c 16 13 42  |tape_count]....B|
000034b0  4c 4c 45 20 74 61 70 65  5f 66 65 74 63 68 0d 1c  |LLE tape_fetch..|
000034c0  20 04 0d 1c 2a 16 4c 44  52 42 20 52 31 2c 5b 6d  | ...*.LDRB R1,[m|
000034d0  65 6d 2c 23 69 66 72 5d  0d 1c 34 17 4c 44 52 42  |em,#ifr]..4.LDRB|
000034e0  20 52 32 2c 5b 6d 65 6d  2c 23 69 66 72 32 5d 0d  | R2,[mem,#ifr2].|
000034f0  1c 3e 25 4c 44 52 42 20  52 31 32 2c 5b 6d 65 6d  |.>%LDRB R12,[mem|
00003500  2c 23 69 65 72 5d 20 3a  20 80 20 52 31 2c 52 31  |,#ier] : . R1,R1|
00003510  2c 52 31 32 0d 1c 48 25  4c 44 52 42 20 52 31 32  |,R12..H%LDRB R12|
00003520  2c 5b 6d 65 6d 2c 23 69  65 72 32 5d 3a 20 80 20  |,[mem,#ier2]: . |
00003530  52 32 2c 52 32 2c 52 31  32 0d 1c 52 25 3b 42 49  |R2,R2,R12..R%;BI|
00003540  43 20 52 31 2c 52 31 2c  23 26 38 30 20 3a 20 3b  |C R1,R1,#&80 : ;|
00003550  42 49 43 20 52 32 2c 52  32 2c 23 26 38 30 0d 1c  |BIC R2,R2,#&80..|
00003560  5c 04 0d 1c 66 04 0d 1c  70 17 3b 4c 44 52 42 20  |\...f...p.;LDRB |
00003570  52 30 2c 5b 6d 65 6d 2c  23 69 65 72 5d 0d 1c 7a  |R0,[mem,#ier]..z|
00003580  2e 3b 42 49 43 20 52 30  2c 52 30 2c 23 25 31 20  |.;BIC R0,R0,#%1 |
00003590  3b 20 69 67 6e 6f 72 65  20 6b 65 79 62 6f 61 72  |; ignore keyboar|
000035a0  64 20 69 6e 74 65 72 72  75 70 74 0d 1c 84 10 3b  |d interrupt....;|
000035b0  80 53 20 52 30 2c 52 30  2c 52 31 0d 1c 8e 14 3b  |.S R0,R0,R1....;|
000035c0  84 52 4e 45 20 52 31 2c  52 31 2c 23 26 38 30 0d  |.RNE R1,R1,#&80.|
000035d0  1c 98 18 3b 4c 44 52 42  20 52 30 2c 5b 6d 65 6d  |...;LDRB R0,[mem|
000035e0  2c 23 69 65 72 32 5d 0d  1c a2 10 3b 80 53 20 52  |,#ier2]....;.S R|
000035f0  30 2c 52 30 2c 52 32 0d  1c ac 14 3b 84 52 4e 45  |0,R0,R2....;.RNE|
00003600  20 52 32 2c 52 32 2c 23  26 38 30 0d 1c b6 04 0d  | R2,R2,#&80.....|
00003610  1c c0 0f 54 53 54 20 46  2c 23 25 31 30 30 0d 1c  |...TST F,#%100..|
00003620  ca 19 42 4e 45 20 73 6b  69 70 5f 64 6f 5f 69 6e  |..BNE skip_do_in|
00003630  74 65 72 72 75 70 74 0d  1c d4 10 3b 54 53 54 20  |terrupt....;TST |
00003640  52 31 2c 23 26 38 30 0d  1c de 12 3b 54 53 54 45  |R1,#&80....;TSTE|
00003650  51 20 52 32 2c 23 26 38  30 0d 1c e8 17 80 53 20  |Q R2,#&80.....S |
00003660  52 31 2c 52 31 2c 23 25  30 31 31 31 31 31 31 31  |R1,R1,#%01111111|
00003670  0d 1c f2 19 80 45 51 53  20 52 32 2c 52 32 2c 23  |.....EQS R2,R2,#|
00003680  25 30 31 31 31 31 31 31  31 0d 1c fc 19 42 45 51  |%01111111....BEQ|
00003690  20 73 6b 69 70 5f 64 6f  5f 69 6e 74 65 72 72 75  | skip_do_interru|
000036a0  70 74 0d 1d 06 0f 3b 43  4d 50 20 52 31 33 2c 23  |pt....;CMP R13,#|
000036b0  31 0d 1d 10 1a 3b 42 4e  45 20 73 6b 69 70 5f 64  |1....;BNE skip_d|
000036c0  6f 5f 69 6e 74 65 72 72  75 70 74 0d 1d 1a 04 0d  |o_interrupt.....|
000036d0  1d 24 11 2e 64 6f 5f 69  6e 74 65 72 72 75 70 74  |.$..do_interrupt|
000036e0  0d 1d 2e 11 a4 64 6f 5f  69 6e 74 65 72 72 75 70  |.....do_interrup|
000036f0  74 0d 1d 38 04 0d 1d 42  16 2e 73 6b 69 70 5f 64  |t..8...B..skip_d|
00003700  6f 5f 69 6e 74 65 72 72  75 70 74 0d 1d 4c 04 0d  |o_interrupt..L..|
00003710  1d 56 1c 3b 42 4c 20 6b  65 79 62 6f 61 72 64 20  |.V.;BL keyboard |
00003720  ec 44 20 b8 20 43 4c 49  21 21 21 0d 1d 60 0c 42  |.D . CLI!!!..`.B|
00003730  4c 20 6b 65 79 73 32 0d  1d 6a 0e 2e 73 6b 69 70  |L keys2..j..skip|
00003740  5f 6b 65 79 73 0d 1d 74  16 4c 44 52 20 74 69 6d  |_keys..t.LDR tim|
00003750  65 2c 5b 6d 65 6d 2c 23  54 31 5d 0d 1d 7e 18 4d  |e,[mem,#T1]..~.M|
00003760  4f 56 20 74 69 6d 65 2c  74 69 6d 65 2c 4c 53 52  |OV time,time,LSR|
00003770  23 31 35 0d 1d 88 18 4c  44 52 20 52 31 2c 5b 6d  |#15....LDR R1,[m|
00003780  65 6d 2c 23 73 63 72 65  65 6e 5d 0d 1d 92 1a 43  |em,#screen]....C|
00003790  4d 50 20 52 31 2c 23 30  20 3a 20 ec 51 20 52 31  |MP R1,#0 : .Q R1|
000037a0  2c 74 69 6d 65 0d 1d 9c  0f 43 4d 50 20 52 31 2c  |,time....CMP R1,|
000037b0  74 69 6d 65 0d 1d a6 11  4d 4f 56 4c 54 20 74 69  |time....MOVLT ti|
000037c0  6d 65 2c 52 31 0d 1d b0  19 4c 44 52 42 20 52 31  |me,R1....LDRB R1|
000037d0  2c 5b 6d 65 6d 2c 23 54  32 6d 6f 64 65 5d 0d 1d  |,[mem,#T2mode]..|
000037e0  ba 0d 43 4d 50 20 52 31  2c 23 30 0d 1d c4 0e 42  |..CMP R1,#0....B|
000037f0  45 51 20 73 6b 69 70 54  32 0d 1d ce 14 4c 44 52  |EQ skipT2....LDR|
00003800  20 52 31 2c 5b 6d 65 6d  2c 23 54 32 5d 0d 1d d8  | R1,[mem,#T2]...|
00003810  04 0d 1d e2 08 3b 52 4a  57 0d 1d ec 15 4d 4f 56  |.....;RJW....MOV|
00003820  53 20 52 31 2c 52 31 2c  4c 53 52 23 31 35 0d 1d  |S R1,R1,LSR#15..|
00003830  f6 0e ec 51 20 52 31 2c  74 69 6d 65 0d 1e 00 0f  |...Q R1,time....|
00003840  43 4d 50 20 52 31 2c 74  69 6d 65 0d 1e 0a 11 4d  |CMP R1,time....M|
00003850  4f 56 4c 54 20 74 69 6d  65 2c 52 31 0d 1e 14 0b  |OVLT time,R1....|
00003860  2e 73 6b 69 70 54 32 0d  1e 1e 14 4c 44 52 20 52  |.skipT2....LDR R|
00003870  31 2c 5b 6d 65 6d 2c 23  54 33 5d 0d 1e 28 15 4d  |1,[mem,#T3]..(.M|
00003880  4f 56 53 20 52 31 2c 52  31 2c 4c 53 52 23 31 35  |OVS R1,R1,LSR#15|
00003890  0d 1e 32 04 0d 1e 3c 09  3b 20 52 4a 57 0d 1e 46  |..2...<.; RJW..F|
000038a0  0e ec 51 20 52 31 2c 74  69 6d 65 0d 1e 50 0f 43  |..Q R1,time..P.C|
000038b0  4d 50 20 52 31 2c 74 69  6d 65 0d 1e 5a 11 4d 4f  |MP R1,time..Z.MO|
000038c0  56 4c 54 20 74 69 6d 65  2c 52 31 0d 1e 64 19 4c  |VLT time,R1..d.L|
000038d0  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 54 34 6d  |DRB R1,[mem,#T4m|
000038e0  6f 64 65 5d 0d 1e 6e 0d  43 4d 50 20 52 31 2c 23  |ode]..n.CMP R1,#|
000038f0  30 0d 1e 78 0e 42 45 51  20 73 6b 69 70 54 34 0d  |0..x.BEQ skipT4.|
00003900  1e 82 14 4c 44 52 20 52  31 2c 5b 6d 65 6d 2c 23  |...LDR R1,[mem,#|
00003910  54 34 5d 0d 1e 8c 04 0d  1e 96 09 3b 20 52 4a 57  |T4]........; RJW|
00003920  0d 1e a0 15 4d 4f 56 53  20 52 31 2c 52 31 2c 4c  |....MOVS R1,R1,L|
00003930  53 52 23 31 35 0d 1e aa  0e ec 51 20 52 31 2c 74  |SR#15.....Q R1,t|
00003940  69 6d 65 0d 1e b4 0f 43  4d 50 20 52 31 2c 74 69  |ime....CMP R1,ti|
00003950  6d 65 0d 1e be 11 4d 4f  56 4c 54 20 74 69 6d 65  |me....MOVLT time|
00003960  2c 52 31 0d 1e c8 0b 2e  73 6b 69 70 54 34 0d 1e  |,R1.....skipT4..|
00003970  d2 1e 3b 43 4d 50 20 74  69 6d 65 2c 23 30 20 3a  |..;CMP time,#0 :|
00003980  20 3b ec 51 20 74 69 6d  65 2c 23 31 0d 1e dc 14  | ;.Q time,#1....|
00003990  53 55 42 20 74 69 6d 65  2c 74 69 6d 65 2c 23 34  |SUB time,time,#4|
000039a0  0d 1e e6 17 53 54 52 20  74 69 6d 65 2c 5b 6d 65  |....STR time,[me|
000039b0  6d 2c 23 6d 69 6e 5d 0d  1e f0 0b a4 66 65 74 63  |m,#min].....fetc|
000039c0  68 32 0d 1e fa 04 0d 1f  04 0e 2e 69 6e 74 65 72  |h2.........inter|
000039d0  72 75 70 74 0d 1f 0e 04  0d 1f 18 0f 54 53 54 20  |rupt........TST |
000039e0  46 2c 23 25 31 30 30 0d  1f 22 10 4d 4f 56 4e 45  |F,#%100..".MOVNE|
000039f0  20 50 43 2c 52 31 34 0d  1f 2c 04 0d 1f 36 16 4c  | PC,R14..,...6.L|
00003a00  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |DRB R1,[mem,#ifr|
00003a10  5d 0d 1f 40 17 4c 44 52  42 20 52 32 2c 5b 6d 65  |]..@.LDRB R2,[me|
00003a20  6d 2c 23 69 66 72 32 5d  0d 1f 4a 25 4c 44 52 42  |m,#ifr2]..J%LDRB|
00003a30  20 52 31 32 2c 5b 6d 65  6d 2c 23 69 65 72 5d 20  | R12,[mem,#ier] |
00003a40  3a 20 80 20 52 31 2c 52  31 2c 52 31 32 0d 1f 54  |: . R1,R1,R12..T|
00003a50  25 4c 44 52 42 20 52 31  32 2c 5b 6d 65 6d 2c 23  |%LDRB R12,[mem,#|
00003a60  69 65 72 32 5d 3a 20 80  20 52 32 2c 52 32 2c 52  |ier2]: . R2,R2,R|
00003a70  31 32 0d 1f 5e 04 0d 1f  68 17 80 53 20 52 31 2c  |12..^...h..S R1,|
00003a80  52 31 2c 23 25 30 31 31  31 31 31 31 31 0d 1f 72  |R1,#%01111111..r|
00003a90  19 80 45 51 53 20 52 32  2c 52 32 2c 23 25 30 31  |..EQS R2,R2,#%01|
00003aa0  31 31 31 31 31 31 0d 1f  7c 0d ec 51 20 50 43 2c  |111111..|..Q PC,|
00003ab0  52 31 34 0d 1f 86 04 0d  1f 90 11 a4 64 6f 5f 69  |R14.........do_i|
00003ac0  6e 74 65 72 72 75 70 74  0d 1f 9a 04 0d 1f a4 0e  |nterrupt........|
00003ad0  4d 4f 56 20 50 43 2c 52  31 34 0d 1f ae 04 0d 1f  |MOV PC,R14......|
00003ae0  b8 0c 2e 46 31 30 74 65  6d 70 0d 1f c2 0a 45 51  |...F10temp....EQ|
00003af0  55 44 20 30 0d 1f cc 04  0d 1f d6 08 2e 46 31 30  |UD 0.........F10|
00003b00  0d 1f e0 17 53 57 49 20  22 36 35 30 32 5f 47 65  |....SWI "6502_Ge|
00003b10  74 6b 64 61 74 61 22 0d  1f ea 13 53 54 52 20 52  |tkdata"....STR R|
00003b20  31 34 2c 46 31 30 74 65  6d 70 0d 1f f4 0f 4d 4f  |14,F10temp....MO|
00003b30  56 20 52 30 2c 23 32 35  35 0d 1f fe 1b 53 54 52  |V R0,#255....STR|
00003b40  42 20 52 30 2c 5b 6d 65  6d 2c 23 6c 61 73 74 6d  |B R0,[mem,#lastm|
00003b50  6f 64 65 5d 0d 20 08 13  42 4c 20 75 70 64 61 74  |ode]. ..BL updat|
00003b60  65 73 63 72 65 65 6e 0d  20 12 17 42 4c 20 66 6f  |escreen. ..BL fo|
00003b70  72 63 65 5f 75 70 64 61  74 65 5f 70 61 6c 0d 20  |rce_update_pal. |
00003b80  13 0d 42 4c 20 63 75 72  73 6f 72 0d 20 1c 12 4c  |..BL cursor. ..L|
00003b90  44 52 20 50 43 2c 46 31  30 74 65 6d 70 0d 20 26  |DR PC,F10temp. &|
00003ba0  04 0d 20 30 0c 3b 2e 66  65 74 63 68 33 0d 20 3a  |.. 0.;.fetch3. :|
00003bb0  0a 2e 6b 65 79 73 32 0d  20 44 1a 3b 53 57 49 20  |..keys2. D.;SWI |
00003bc0  22 36 35 30 32 5f 43 68  65 63 6b 6b 64 61 74 61  |"6502_Checkkdata|
00003bd0  22 0d 20 4e 1a 4c 44 52  20 52 30 2c 5b 6d 65 6d  |". N.LDR R0,[mem|
00003be0  2c 23 6b 65 79 5f 61 64  64 72 5d 0d 20 58 14 4c  |,#key_addr]. X.L|
00003bf0  44 52 42 20 52 30 2c 5b  52 30 2c 23 2d 34 5d 0d  |DRB R0,[R0,#-4].|
00003c00  20 62 04 0d 20 6c 04 0d  20 76 18 43 4d 50 20 52  | b.. l.. v.CMP R|
00003c10  30 2c 23 26 31 46 20 3b  20 49 6e 73 65 72 74 0d  |0,#&1F ; Insert.|
00003c20  20 80 0c ec 51 20 52 31  2c 23 31 0d 20 8a 13 53  | ...Q R1,#1. ..S|
00003c30  54 52 45 51 20 52 31 2c  74 72 61 63 65 32 0d 20  |TREQ R1,trace2. |
00003c40  94 14 43 4d 50 20 52 30  2c 23 31 30 20 3b 20 46  |..CMP R0,#10 ; F|
00003c50  31 30 0d 20 9e 0b 42 45  51 20 46 31 30 0d 20 a8  |10. ..BEQ F10. .|
00003c60  14 43 4d 50 20 52 30 2c  23 31 31 20 3b 20 46 31  |.CMP R0,#11 ; F1|
00003c70  31 0d 20 b2 16 43 4d 50  4e 45 20 52 30 2c 23 31  |1. ..CMPNE R0,#1|
00003c80  32 20 3b 20 46 31 32 0d  20 bc 18 43 4d 50 4e 45  |2 ; F12. ..CMPNE|
00003c90  20 52 30 2c 23 31 35 20  3b 20 62 72 65 61 6b 0d  | R0,#15 ; break.|
00003ca0  20 c6 11 42 45 51 20 72  61 77 5f 65 78 69 74 32  | ..BEQ raw_exit2|
00003cb0  0d 20 d0 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 20  |. ..MOV PC,R14. |
00003cc0  da 04 0d 20 e4 0d 2e 6b  65 79 62 6f 61 72 64 0d  |... ...keyboard.|
00003cd0  20 ee 1d 4d 4f 56 20 52  30 2c 23 31 20 3a 20 53  | ..MOV R0,#1 : S|
00003ce0  54 52 20 52 30 2c 6b 65  79 63 68 6b 0d 20 f8 04  |TR R0,keychk. ..|
00003cf0  0d 21 02 04 0d 21 0c 1a  3b 53 57 49 20 22 36 35  |.!...!..;SWI "65|
00003d00  30 32 5f 43 68 65 63 6b  6b 64 61 74 61 22 0d 21  |02_Checkkdata".!|
00003d10  16 1a 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 6b  |..LDR R0,[mem,#k|
00003d20  65 79 5f 61 64 64 72 5d  0d 21 20 14 4c 44 52 42  |ey_addr].! .LDRB|
00003d30  20 52 30 2c 5b 52 30 2c  23 2d 34 5d 0d 21 2a 1b  | R0,[R0,#-4].!*.|
00003d40  43 4d 50 20 52 30 2c 23  26 46 46 20 3a 20 ec 51  |CMP R0,#&FF : .Q|
00003d50  20 50 43 2c 52 31 34 0d  21 34 04 0d 21 3e 04 0d  | PC,R14.!4..!>..|
00003d60  21 48 17 53 57 49 20 22  36 35 30 32 5f 47 65 74  |!H.SWI "6502_Get|
00003d70  6b 64 61 74 61 22 0d 21  52 1d 3b 43 4d 50 20 52  |kdata".!R.;CMP R|
00003d80  30 2c 23 26 46 46 20 3a  20 3b ec 51 20 50 43 2c  |0,#&FF : ;.Q PC,|
00003d90  52 31 34 0d 21 5c 18 43  4d 50 20 52 30 2c 23 26  |R14.!\.CMP R0,#&|
00003da0  31 46 20 3b 20 49 6e 73  65 72 74 0d 21 66 0c ec  |1F ; Insert.!f..|
00003db0  51 20 52 31 2c 23 31 0d  21 70 13 53 54 52 45 51  |Q R1,#1.!p.STREQ|
00003dc0  20 52 31 2c 74 72 61 63  65 32 0d 21 7a 14 43 4d  | R1,trace2.!z.CM|
00003dd0  50 20 52 30 2c 23 31 30  20 3b 20 46 31 30 0d 21  |P R0,#10 ; F10.!|
00003de0  84 0b 42 45 51 20 46 31  30 0d 21 8e 0e 43 4d 50  |..BEQ F10.!..CMP|
00003df0  20 52 30 2c 23 31 35 0d  21 98 10 43 4d 50 4e 45  | R0,#15.!..CMPNE|
00003e00  20 52 30 2c 23 31 32 0d  21 a2 16 43 4d 50 4e 45  | R0,#12.!..CMPNE|
00003e10  20 52 30 2c 23 31 31 20  3b 20 46 31 31 0d 21 ac  | R0,#11 ; F11.!.|
00003e20  10 42 45 51 20 72 61 77  5f 65 78 69 74 0d 21 b6  |.BEQ raw_exit.!.|
00003e30  04 0d 21 c0 17 3b 43 4d  50 20 52 30 2c 23 30 20  |..!..;CMP R0,#0 |
00003e40  3b 20 65 73 63 61 70 65  0d 21 ca 19 3b 4c 44 52  |; escape.!..;LDR|
00003e50  45 51 42 20 52 30 2c 5b  6d 65 6d 2c 23 26 46 46  |EQB R0,[mem,#&FF|
00003e60  5d 0d 21 d4 14 3b 84 52  45 51 20 52 30 2c 52 30  |].!..;.REQ R0,R0|
00003e70  2c 23 26 38 30 0d 21 de  19 3b 53 54 52 45 51 42  |,#&80.!..;STREQB|
00003e80  20 52 30 2c 5b 6d 65 6d  2c 23 26 46 46 5d 0d 21  | R0,[mem,#&FF].!|
00003e90  e8 13 4c 44 52 42 20 52  30 2c 5b 52 31 2c 52 30  |..LDRB R0,[R1,R0|
00003ea0  5d 0d 21 f2 0f 43 4d 50  20 52 30 2c 23 26 46 46  |].!..CMP R0,#&FF|
00003eb0  0d 21 fc 15 3b 42 45 51  20 6e 6f 74 5f 6b 65 79  |.!..;BEQ not_key|
00003ec0  62 6f 61 72 64 0d 22 06  0d ec 51 20 50 43 2c 52  |board."...Q PC,R|
00003ed0  31 34 0d 22 10 04 0d 22  1a 13 3b 42 20 6e 6f 74  |14."..."..;B not|
00003ee0  5f 6b 65 79 62 6f 61 72  64 0d 22 24 1c 43 4d 50  |_keyboard."$.CMP|
00003ef0  20 52 30 2c 23 31 30 20  3b 20 73 68 69 66 74 2c  | R0,#10 ; shift,|
00003f00  20 63 74 72 6c 0d 22 2e  10 4d 4f 56 4c 54 20 50  | ctrl."..MOVLT P|
00003f10  43 2c 52 31 34 0d 22 38  16 4c 44 52 42 20 52 31  |C,R14."8.LDRB R1|
00003f20  2c 5b 6d 65 6d 2c 23 69  66 72 5d 0d 22 42 2d 84  |,[mem,#ifr]."B-.|
00003f30  52 20 52 31 2c 52 31 2c  23 25 31 20 3b 20 69 6e  |R R1,R1,#%1 ; in|
00003f40  74 65 72 72 75 70 74 20  69 73 20 66 72 6f 6d 20  |terrupt is from |
00003f50  6b 65 79 62 6f 61 72 64  0d 22 4c 16 53 54 52 42  |keyboard."L.STRB|
00003f60  20 52 31 2c 5b 6d 65 6d  2c 23 69 66 72 5d 0d 22  | R1,[mem,#ifr]."|
00003f70  56 16 4c 44 52 42 20 52  30 2c 5b 6d 65 6d 2c 23  |V.LDRB R0,[mem,#|
00003f80  69 65 72 5d 0d 22 60 0e  54 53 54 20 52 30 2c 23  |ier]."`.TST R0,#|
00003f90  25 31 0d 22 6a 0d ec 51  20 50 43 2c 52 31 34 0d  |%1."j..Q PC,R14.|
00003fa0  22 74 11 a4 64 6f 5f 69  6e 74 65 72 72 75 70 74  |"t..do_interrupt|
00003fb0  0d 22 7e 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 22  |."~.MOV PC,R14."|
00003fc0  88 04 0d 22 92 04 0d 22  9c 12 3b 2e 6e 6f 5f 69  |..."..."..;.no_i|
00003fd0  6e 74 65 72 72 75 70 74  0d 22 a6 13 3b 4c 44 52  |nterrupt."..;LDR|
00003fe0  42 20 52 30 2c 74 72 61  63 65 32 0d 22 b0 0e 3b  |B R0,trace2."..;|
00003ff0  43 4d 50 20 52 30 2c 23  30 0d 22 ba 11 3b 42 45  |CMP R0,#0."..;BE|
00004000  51 20 6e 6f 74 72 61 63  65 32 0d 22 c4 0e 3b a4  |Q notrace2."..;.|
00004010  73 68 6f 77 72 65 67 73  0d 22 ce 0e 3b 2e 6e 6f  |showregs."..;.no|
00004020  74 72 61 63 65 32 0d 22  d8 0c 3b a4 66 65 74 63  |trace2."..;.fetc|
00004030  68 32 0d 22 e2 04 0d 22  ec 12 2e 64 65 66 69 6e  |h2."..."...defin|
00004040  65 5f 63 75 72 73 6f 72  0d 22 f6 24 4d 4f 56 20  |e_cursor.".$MOV |
00004050  52 31 2c 23 30 20 3a 20  53 54 52 42 20 52 31 2c  |R1,#0 : STRB R1,|
00004060  63 75 72 73 6f 72 5f 73  74 61 74 65 0d 23 00 13  |cursor_state.#..|
00004070  2e 64 65 66 69 6e 65 5f  63 75 72 73 6f 72 32 0d  |.define_cursor2.|
00004080  23 0a 18 4c 44 52 42 20  52 31 2c 63 75 72 73 6f  |#..LDRB R1,curso|
00004090  72 5f 73 74 61 74 65 0d  23 14 1a 43 4d 50 20 52  |r_state.#..CMP R|
000040a0  31 2c 23 30 3a 4d 4f 56  4e 45 20 50 43 2c 52 31  |1,#0:MOVNE PC,R1|
000040b0  34 0d 23 1e 04 0d 23 28  2d 4c 44 52 42 20 52 31  |4.#...#(-LDRB R1|
000040c0  2c 5b 6d 65 6d 2c 23 63  72 74 5f 72 65 67 73 2b  |,[mem,#crt_regs+|
000040d0  31 30 5d 20 3b 20 63 75  72 73 6f 72 20 73 74 61  |10] ; cursor sta|
000040e0  72 74 0d 23 32 04 0d 23  3c 15 82 20 52 31 32 2c  |rt.#2..#<.. R12,|
000040f0  52 31 2c 23 25 31 30 30  30 30 30 0d 23 46 15 54  |R1,#%100000.#F.T|
00004100  53 54 20 52 31 32 2c 23  25 31 31 30 30 30 30 30  |ST R12,#%1100000|
00004110  0d 23 50 14 42 45 51 20  62 6c 61 6e 6b 5f 63 75  |.#P.BEQ blank_cu|
00004120  72 73 6f 72 0d 23 5a 04  0d 23 64 2b 4c 44 52 42  |rsor.#Z..#d+LDRB|
00004130  20 52 32 2c 5b 6d 65 6d  2c 23 63 72 74 5f 72 65  | R2,[mem,#crt_re|
00004140  67 73 2b 31 31 5d 20 3b  20 63 75 72 73 6f 72 20  |gs+11] ; cursor |
00004150  65 6e 64 0d 23 6e 0f 80  20 52 31 2c 52 31 2c 23  |end.#n.. R1,R1,#|
00004160  33 31 0d 23 78 0f 80 20  52 32 2c 52 32 2c 23 33  |31.#x.. R2,R2,#3|
00004170  31 0d 23 82 04 0d 23 8c  12 53 55 42 53 20 52 31  |1.#...#..SUBS R1|
00004180  32 2c 52 32 2c 52 31 0d  23 96 14 42 4c 54 20 62  |2,R2,R1.#..BLT b|
00004190  6c 61 6e 6b 5f 63 75 72  73 6f 72 0d 23 a0 04 0d  |lank_cursor.#...|
000041a0  23 aa 04 0d 23 b4 18 4c  44 52 42 20 52 31 32 2c  |#...#..LDRB R12,|
000041b0  5b 6d 65 6d 2c 23 66 65  32 30 5d 0d 23 be 16 82  |[mem,#fe20].#...|
000041c0  20 52 31 32 2c 52 31 32  2c 23 25 31 30 30 30 30  | R12,R12,#%10000|
000041d0  30 0d 23 c8 04 0d 23 d2  12 54 53 54 20 52 31 32  |0.#...#..TST R12|
000041e0  2c 23 25 31 30 30 30 0d  23 dc 16 ec 51 20 52 31  |,#%1000.#...Q R1|
000041f0  33 2c 23 32 20 3b 20 6d  6f 64 65 20 35 0d 23 e6  |3,#2 ; mode 5.#.|
00004200  10 4d 4f 56 4e 45 20 52  31 33 2c 23 31 0d 23 f0  |.MOVNE R13,#1.#.|
00004210  04 0d 23 fa 0d 4d 4f 56  20 52 30 2c 23 31 0d 24  |..#..MOV R0,#1.$|
00004220  04 15 4d 4f 56 20 52 30  2c 52 30 2c 4c 53 4c 20  |..MOV R0,R0,LSL |
00004230  52 31 33 0d 24 0e 16 54  53 54 45 51 20 52 31 32  |R13.$..TSTEQ R12|
00004240  2c 23 25 31 30 30 30 30  30 0d 24 18 15 ec 51 20  |,#%100000.$...Q |
00004250  52 30 2c 23 38 20 3b 20  6d 6f 64 65 20 32 0d 24  |R0,#8 ; mode 2.$|
00004260  22 0d ec 51 20 52 31 33  2c 23 33 0d 24 2c 18 53  |"..Q R13,#3.$,.S|
00004270  54 52 42 20 52 30 2c 63  75 72 73 6f 72 5f 77 69  |TRB R0,cursor_wi|
00004280  64 74 68 0d 24 36 04 0d  24 40 1b 54 53 54 20 52  |dth.$6..$@.TST R|
00004290  31 32 2c 23 25 31 30 20  3b 20 74 65 6c 65 74 65  |12,#%10 ; telete|
000042a0  78 74 0d 24 4a 10 4d 56  4e 4e 45 20 52 31 32 2c  |xt.$J.MVNNE R12,|
000042b0  23 37 0d 24 54 0d ec 51  20 52 31 32 2c 23 31 0d  |#7.$T..Q R12,#1.|
000042c0  24 5e 04 0d 24 68 11 41  44 44 20 52 32 2c 52 32  |$^..$h.ADD R2,R2|
000042d0  2c 52 31 32 0d 24 72 19  53 54 52 42 20 52 32 2c  |,R12.$r.STRB R2,|
000042e0  63 75 72 73 6f 72 5f 68  65 69 67 68 74 0d 24 7c  |cursor_height.$||
000042f0  04 0d 24 86 0e 3b 4d 4f  56 20 52 30 2c 23 31 0d  |..$..;MOV R0,#1.|
00004300  24 90 16 3b 4d 4f 56 20  52 30 2c 52 30 2c 4c 53  |$..;MOV R0,R0,LS|
00004310  4c 20 52 31 33 0d 24 9a  19 3b 53 54 52 42 20 52  |L R13.$..;STRB R|
00004320  30 2c 63 75 72 73 6f 72  5f 77 69 64 74 68 0d 24  |0,cursor_width.$|
00004330  a4 04 0d 24 ae 04 0d 24  b8 16 41 44 52 20 52 30  |...$...$..ADR R0|
00004340  2c 63 75 72 73 6f 72 5f  64 61 74 61 0d 24 c2 18  |,cursor_data.$..|
00004350  53 55 42 20 52 30 2c 52  30 2c 52 31 2c 4c 53 4c  |SUB R0,R0,R1,LSL|
00004360  20 52 31 33 0d 24 cc 19  53 55 42 20 52 30 2c 52  | R13.$..SUB R0,R|
00004370  30 2c 52 31 32 2c 4c 53  4c 20 52 31 33 0d 24 d6  |0,R12,LSL R13.$.|
00004380  19 53 54 52 20 52 30 2c  63 75 72 73 6f 72 5f 62  |.STR R0,cursor_b|
00004390  6c 6f 63 6b 2b 36 0d 24  e0 04 0d 24 ea 0e 4d 4f  |lock+6.$...$..MO|
000043a0  56 20 52 30 2c 23 32 31  0d 24 f4 17 41 44 52 20  |V R0,#21.$..ADR |
000043b0  52 31 2c 63 75 72 73 6f  72 5f 62 6c 6f 63 6b 0d  |R1,cursor_block.|
000043c0  24 fe 11 53 57 49 20 22  4f 53 5f 57 6f 72 64 22  |$..SWI "OS_Word"|
000043d0  0d 25 08 0f 4d 4f 56 53  20 50 43 2c 52 31 34 0d  |.%..MOVS PC,R14.|
000043e0  25 12 04 0d 25 1c 11 2e  62 6c 61 6e 6b 5f 63 75  |%...%...blank_cu|
000043f0  72 73 6f 72 0d 25 26 24  4d 4f 56 20 52 31 2c 23  |rsor.%&$MOV R1,#|
00004400  31 20 3a 20 53 54 52 42  20 52 31 2c 63 75 72 73  |1 : STRB R1,curs|
00004410  6f 72 5f 73 74 61 74 65  0d 25 30 12 2e 62 6c 61  |or_state.%0..bla|
00004420  6e 6b 5f 63 75 72 73 6f  72 32 0d 25 3a 04 0d 25  |nk_cursor2.%:..%|
00004430  44 17 41 44 52 20 52 31  2c 63 75 72 73 6f 72 5f  |D.ADR R1,cursor_|
00004440  62 6c 6f 63 6b 0d 25 4e  15 41 44 52 20 52 30 2c  |block.%N.ADR R0,|
00004450  62 6c 61 6e 6b 5f 64 61  74 61 0d 25 58 19 53 54  |blank_data.%X.ST|
00004460  52 20 52 30 2c 63 75 72  73 6f 72 5f 62 6c 6f 63  |R R0,cursor_bloc|
00004470  6b 2b 36 0d 25 62 0e 4d  4f 56 20 52 30 2c 23 32  |k+6.%b.MOV R0,#2|
00004480  31 0d 25 6c 11 53 57 49  20 22 4f 53 5f 57 6f 72  |1.%l.SWI "OS_Wor|
00004490  64 22 0d 25 76 0e 4d 4f  56 20 50 43 2c 52 31 34  |d".%v.MOV PC,R14|
000044a0  0d 25 80 04 0d 25 8a 11  2e 63 75 72 73 6f 72 5f  |.%...%...cursor_|
000044b0  73 74 61 74 65 0d 25 94  0a 45 51 55 44 20 30 0d  |state.%..EQUD 0.|
000044c0  25 9e 04 0d 25 a8 11 2e  63 75 72 73 6f 72 5f 66  |%...%...cursor_f|
000044d0  6c 61 73 68 0d 25 b2 0a  45 51 55 44 20 30 0d 25  |lash.%..EQUD 0.%|
000044e0  bc 10 2e 66 6c 61 73 68  5f 73 74 61 74 65 0d 25  |...flash_state.%|
000044f0  c6 0a 45 51 55 44 20 30  0d 25 d0 04 0d 25 da 12  |..EQUD 0.%...%..|
00004500  3b 2e 6e 6f 74 5f 6b 65  79 62 6f 61 72 64 0d 25  |;.not_keyboard.%|
00004510  e4 0a 45 51 55 57 20 30  0d 25 ee 11 2e 63 75 72  |..EQUW 0.%...cur|
00004520  73 6f 72 5f 62 6c 6f 63  6b 0d 25 f8 0a 45 51 55  |sor_block.%..EQU|
00004530  42 20 30 0d 26 02 19 45  51 55 42 20 32 20 3b 20  |B 0.&..EQUB 2 ; |
00004540  73 68 61 70 65 20 6e 75  6d 62 65 72 0d 26 0c 11  |shape number.&..|
00004550  2e 63 75 72 73 6f 72 5f  77 69 64 74 68 0d 26 16  |.cursor_width.&.|
00004560  1b 45 51 55 42 20 32 20  3b 20 77 69 64 74 68 20  |.EQUB 2 ; width |
00004570  69 6e 20 62 79 74 65 73  0d 26 20 12 2e 63 75 72  |in bytes.& ..cur|
00004580  73 6f 72 5f 68 65 69 67  68 74 0d 26 2a 1d 45 51  |sor_height.&*.EQ|
00004590  55 42 20 39 20 3b 20 68  65 69 67 68 74 20 69 6e  |UB 9 ; height in|
000045a0  20 70 69 78 65 6c 73 0d  26 34 0a 45 51 55 42 20  | pixels.&4.EQUB |
000045b0  30 0d 26 3e 0a 45 51 55  42 20 30 0d 26 48 1c 45  |0.&>.EQUB 0.&H.E|
000045c0  51 55 44 20 30 20 3b 20  61 64 64 72 65 73 73 20  |QUD 0 ; address |
000045d0  6f 66 20 64 61 74 61 0d  26 52 04 0d 26 5c 04 0d  |of data.&R..&\..|
000045e0  26 66 09 41 4c 49 47 4e  0d 26 70 0f 2e 62 6c 61  |&f.ALIGN.&p..bla|
000045f0  6e 6b 5f 64 61 74 61 0d  26 7a 0a 45 51 55 44 20  |nk_data.&z.EQUD |
00004600  30 0d 26 84 0a 45 51 55  44 20 30 0d 26 8e 0a 45  |0.&..EQUD 0.&..E|
00004610  51 55 44 20 30 0d 26 98  0a 45 51 55 44 20 30 0d  |QUD 0.&..EQUD 0.|
00004620  26 a2 0a 45 51 55 44 20  30 0d 26 ac 0a 45 51 55  |&..EQUD 0.&..EQU|
00004630  44 20 30 0d 26 b6 0a 45  51 55 44 20 30 0d 26 c0  |D 0.&..EQUD 0.&.|
00004640  0a 45 51 55 44 20 30 0d  26 ca 0a 45 51 55 44 20  |.EQUD 0.&..EQUD |
00004650  30 0d 26 d4 0a 45 51 55  44 20 30 0d 26 de 0a 45  |0.&..EQUD 0.&..E|
00004660  51 55 44 20 30 0d 26 e8  0a 45 51 55 44 20 30 0d  |QUD 0.&..EQUD 0.|
00004670  26 f2 0a 45 51 55 44 20  30 0d 26 fc 0a 45 51 55  |&..EQUD 0.&..EQU|
00004680  44 20 30 0d 27 06 0a 45  51 55 44 20 30 0d 27 10  |D 0.'..EQUD 0.'.|
00004690  0a 45 51 55 44 20 30 0d  27 1a 0a 45 51 55 44 20  |.EQUD 0.'..EQUD |
000046a0  30 0d 27 24 0a 45 51 55  44 20 30 0d 27 2e 0a 45  |0.'$.EQUD 0.'..E|
000046b0  51 55 44 20 30 0d 27 38  0a 45 51 55 44 20 30 0d  |QUD 0.'8.EQUD 0.|
000046c0  27 42 0a 45 51 55 44 20  30 0d 27 4c 0a 45 51 55  |'B.EQUD 0.'L.EQU|
000046d0  44 20 30 0d 27 56 0a 45  51 55 44 20 30 0d 27 60  |D 0.'V.EQUD 0.'`|
000046e0  0a 45 51 55 44 20 30 0d  27 6a 0a 45 51 55 44 20  |.EQUD 0.'j.EQUD |
000046f0  30 0d 27 74 0a 45 51 55  44 20 30 0d 27 7e 0a 45  |0.'t.EQUD 0.'~.E|
00004700  51 55 44 20 30 0d 27 88  0a 45 51 55 44 20 30 0d  |QUD 0.'..EQUD 0.|
00004710  27 92 0a 45 51 55 44 20  30 0d 27 9c 0a 45 51 55  |'..EQUD 0.'..EQU|
00004720  44 20 30 0d 27 a6 0a 45  51 55 44 20 30 0d 27 b0  |D 0.'..EQUD 0.'.|
00004730  0a 45 51 55 44 20 30 0d  27 ba 10 2e 63 75 72 73  |.EQUD 0.'...curs|
00004740  6f 72 5f 64 61 74 61 0d  27 c4 12 45 51 55 44 20  |or_data.'..EQUD |
00004750  26 46 46 46 46 46 46 46  46 0d 27 ce 12 45 51 55  |&FFFFFFFF.'..EQU|
00004760  44 20 26 46 46 46 46 46  46 46 46 0d 27 d8 12 45  |D &FFFFFFFF.'..E|
00004770  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 27 e2  |QUD &FFFFFFFF.'.|
00004780  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004790  27 ec 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |'..EQUD &FFFFFFF|
000047a0  46 0d 27 f6 12 45 51 55  44 20 26 46 46 46 46 46  |F.'..EQUD &FFFFF|
000047b0  46 46 46 0d 28 00 12 45  51 55 44 20 26 46 46 46  |FFF.(..EQUD &FFF|
000047c0  46 46 46 46 46 0d 28 0a  12 45 51 55 44 20 26 46  |FFFFF.(..EQUD &F|
000047d0  46 46 46 46 46 46 46 0d  28 14 12 45 51 55 44 20  |FFFFFFF.(..EQUD |
000047e0  26 46 46 46 46 46 46 46  46 0d 28 1e 12 45 51 55  |&FFFFFFFF.(..EQU|
000047f0  44 20 26 46 46 46 46 46  46 46 46 0d 28 28 12 45  |D &FFFFFFFF.((.E|
00004800  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 32  |QUD &FFFFFFFF.(2|
00004810  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004820  28 3c 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(<.EQUD &FFFFFFF|
00004830  46 0d 28 46 12 45 51 55  44 20 26 46 46 46 46 46  |F.(F.EQUD &FFFFF|
00004840  46 46 46 0d 28 50 12 45  51 55 44 20 26 46 46 46  |FFF.(P.EQUD &FFF|
00004850  46 46 46 46 46 0d 28 5a  12 45 51 55 44 20 26 46  |FFFFF.(Z.EQUD &F|
00004860  46 46 46 46 46 46 46 0d  28 64 12 45 51 55 44 20  |FFFFFFF.(d.EQUD |
00004870  26 46 46 46 46 46 46 46  46 0d 28 6e 12 45 51 55  |&FFFFFFFF.(n.EQU|
00004880  44 20 26 46 46 46 46 46  46 46 46 0d 28 78 12 45  |D &FFFFFFFF.(x.E|
00004890  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 82  |QUD &FFFFFFFF.(.|
000048a0  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
000048b0  28 8c 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(..EQUD &FFFFFFF|
000048c0  46 0d 28 96 12 45 51 55  44 20 26 46 46 46 46 46  |F.(..EQUD &FFFFF|
000048d0  46 46 46 0d 28 a0 12 45  51 55 44 20 26 46 46 46  |FFF.(..EQUD &FFF|
000048e0  46 46 46 46 46 0d 28 aa  12 45 51 55 44 20 26 46  |FFFFF.(..EQUD &F|
000048f0  46 46 46 46 46 46 46 0d  28 b4 12 45 51 55 44 20  |FFFFFFF.(..EQUD |
00004900  26 46 46 46 46 46 46 46  46 0d 28 be 12 45 51 55  |&FFFFFFFF.(..EQU|
00004910  44 20 26 46 46 46 46 46  46 46 46 0d 28 c8 12 45  |D &FFFFFFFF.(..E|
00004920  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 d2  |QUD &FFFFFFFF.(.|
00004930  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004940  28 dc 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(..EQUD &FFFFFFF|
00004950  46 0d 28 e6 12 45 51 55  44 20 26 46 46 46 46 46  |F.(..EQUD &FFFFF|
00004960  46 46 46 0d 28 f0 12 45  51 55 44 20 26 46 46 46  |FFF.(..EQUD &FFF|
00004970  46 46 46 46 46 0d 28 fa  12 45 51 55 44 20 26 46  |FFFFF.(..EQUD &F|
00004980  46 46 46 46 46 46 46 0d  29 04 04 0d 29 0e 0c 2e  |FFFFFFF.)...)...|
00004990  63 75 72 73 6f 72 37 0d  29 18 04 0d 29 22 1e 4c  |cursor7.)...)".L|
000049a0  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 63 72 74  |DRB R0,[mem,#crt|
000049b0  5f 72 65 67 73 2b 31 34  5d 0d 29 2c 1e 4c 44 52  |_regs+14].),.LDR|
000049c0  42 20 52 31 2c 5b 6d 65  6d 2c 23 63 72 74 5f 72  |B R1,[mem,#crt_r|
000049d0  65 67 73 2b 31 35 5d 0d  29 36 16 41 44 44 20 52  |egs+15].)6.ADD R|
000049e0  30 2c 52 31 2c 52 30 2c  4c 53 4c 23 38 0d 29 40  |0,R1,R0,LSL#8.)@|
000049f0  04 0d 29 4a 30 4c 44 52  42 20 52 31 2c 5b 6d 65  |..)J0LDRB R1,[me|
00004a00  6d 2c 23 63 72 74 5f 72  65 67 73 2b 31 32 5d 20  |m,#crt_regs+12] |
00004a10  3a 20 3b 80 20 52 31 2c  52 31 2c 23 25 31 31 31  |: ;. R1,R1,#%111|
00004a20  31 0d 29 54 1e 4c 44 52  42 20 52 32 2c 5b 6d 65  |1.)T.LDRB R2,[me|
00004a30  6d 2c 23 63 72 74 5f 72  65 67 73 2b 31 33 5d 0d  |m,#crt_regs+13].|
00004a40  29 5e 16 41 44 44 20 52  32 2c 52 32 2c 52 31 2c  |)^.ADD R2,R2,R1,|
00004a50  4c 53 4c 23 38 0d 29 68  11 53 55 42 53 20 52 30  |LSL#8.)h.SUBS R0|
00004a60  2c 52 30 2c 52 32 0d 29  72 0f 4d 4f 56 4d 49 20  |,R0,R2.)r.MOVMI |
00004a70  52 30 2c 23 30 0d 29 7c  04 0d 29 86 2e 3b 4c 44  |R0,#0.)|..)..;LD|
00004a80  52 42 20 52 31 32 2c 5b  6d 65 6d 2c 23 63 72 74  |RB R12,[mem,#crt|
00004a90  5f 72 65 67 73 2b 31 5d  20 3b 20 68 6f 72 69 7a  |_regs+1] ; horiz|
00004aa0  2e 20 63 68 61 72 73 0d  29 90 10 3b 4d 4f 56 20  |. chars.)..;MOV |
00004ab0  52 31 32 2c 23 34 30 0d  29 9a 04 0d 29 a4 29 3b  |R12,#40.)...).);|
00004ac0  a4 64 69 76 6d 6f 64 28  30 2c 31 32 2c 31 2c 32  |.divmod(0,12,1,2|
00004ad0  2c 31 33 29 20 3b 20 52  30 20 3d 20 52 30 20 83  |,13) ; R0 = R0 .|
00004ae0  20 52 31 32 0d 29 ae 29  20 20 20 20 20 20 20 20  | R12.).)        |
00004af0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00004b00  52 32 20 3d 20 52 30 20  81 20 52 31 32 0d 29 b8  |R2 = R0 . R12.).|
00004b10  12 3b 52 53 42 20 52 32  2c 52 32 2c 23 32 35 0d  |.;RSB R2,R2,#25.|
00004b20  29 c2 14 3b 4d 4f 56 20  52 32 2c 52 32 2c 4c 53  |)..;MOV R2,R2,LS|
00004b30  4c 23 35 0d 29 cc 17 3b  41 44 44 20 52 32 2c 52  |L#5.)..;ADD R2,R|
00004b40  32 2c 52 32 2c 4c 53 52  23 32 0d 29 d6 14 3b 4d  |2,R2,LSR#2.)..;M|
00004b50  4f 56 20 52 30 2c 52 30  2c 4c 53 4c 23 35 0d 29  |OV R0,R0,LSL#5.)|
00004b60  e0 18 3b 41 44 44 20 52  30 2c 52 30 2c 52 32 2c  |..;ADD R0,R0,R2,|
00004b70  4c 53 4c 23 31 36 0d 29  ea 1a 3b 20 57 65 20 6b  |LSL#16.)..; We k|
00004b80  6e 6f 77 20 74 68 61 74  20 52 30 3c 31 30 30 30  |now that R0<1000|
00004b90  0d 29 f4 12 3b 20 52 30  20 3d 20 52 30 20 83 20  |.)..; R0 = R0 . |
00004ba0  34 30 0d 29 fe 12 3b 20  52 32 20 3d 20 52 30 20  |40.)..; R2 = R0 |
00004bb0  81 20 34 30 0d 2a 08 19  3b a4 64 69 76 6d 6f 64  |. 40.*..;.divmod|
00004bc0  28 30 2c 31 32 2c 31 2c  32 2c 31 33 29 0d 2a 12  |(0,12,1,2,13).*.|
00004bd0  21 4d 4f 56 20 52 32 2c  23 28 28 32 35 3c 3c 35  |!MOV R2,#((25<<5|
00004be0  29 2b 28 32 35 3c 3c 33  29 29 3c 3c 31 36 0d 2a  |)+(25<<3))<<16.*|
00004bf0  1c 0f 43 4d 50 20 52 30  2c 23 36 34 30 0d 2a 26  |..CMP R0,#640.*&|
00004c00  14 53 55 42 47 45 20 52  30 2c 52 30 2c 23 36 34  |.SUBGE R0,R0,#64|
00004c10  30 0d 2a 30 24 53 55 42  47 45 20 52 32 2c 52 32  |0.*0$SUBGE R2,R2|
00004c20  2c 23 28 28 31 3c 3c 39  29 2b 28 31 3c 3c 37 29  |,#((1<<9)+(1<<7)|
00004c30  29 3c 3c 31 36 0d 2a 3a  0f 43 4d 50 20 52 30 2c  |)<<16.*:.CMP R0,|
00004c40  23 33 32 30 0d 2a 44 14  53 55 42 47 45 20 52 30  |#320.*D.SUBGE R0|
00004c50  2c 52 30 2c 23 33 32 30  0d 2a 4e 24 53 55 42 47  |,R0,#320.*N$SUBG|
00004c60  45 20 52 32 2c 52 32 2c  23 28 28 31 3c 3c 38 29  |E R2,R2,#((1<<8)|
00004c70  2b 28 31 3c 3c 36 29 29  3c 3c 31 36 0d 2a 58 0f  |+(1<<6))<<16.*X.|
00004c80  43 4d 50 20 52 30 2c 23  31 36 30 0d 2a 62 14 53  |CMP R0,#160.*b.S|
00004c90  55 42 47 45 20 52 30 2c  52 30 2c 23 31 36 30 0d  |UBGE R0,R0,#160.|
00004ca0  2a 6c 24 53 55 42 47 45  20 52 32 2c 52 32 2c 23  |*l$SUBGE R2,R2,#|
00004cb0  28 28 31 3c 3c 37 29 2b  28 31 3c 3c 35 29 29 3c  |((1<<7)+(1<<5))<|
00004cc0  3c 31 36 0d 2a 76 0e 43  4d 50 20 52 30 2c 23 38  |<16.*v.CMP R0,#8|
00004cd0  30 0d 2a 80 13 53 55 42  47 45 20 52 30 2c 52 30  |0.*..SUBGE R0,R0|
00004ce0  2c 23 38 30 0d 2a 8a 24  53 55 42 47 45 20 52 32  |,#80.*.$SUBGE R2|
00004cf0  2c 52 32 2c 23 28 28 31  3c 3c 36 29 2b 28 31 3c  |,R2,#((1<<6)+(1<|
00004d00  3c 34 29 29 3c 3c 31 36  0d 2a 94 0e 43 4d 50 20  |<4))<<16.*..CMP |
00004d10  52 30 2c 23 34 30 0d 2a  9e 13 53 55 42 47 45 20  |R0,#40.*..SUBGE |
00004d20  52 30 2c 52 30 2c 23 34  30 0d 2a a8 24 53 55 42  |R0,R0,#40.*.$SUB|
00004d30  47 45 20 52 32 2c 52 32  2c 23 28 28 31 3c 3c 35  |GE R2,R2,#((1<<5|
00004d40  29 2b 28 31 3c 3c 33 29  29 3c 3c 31 36 0d 2a b2  |)+(1<<3))<<16.*.|
00004d50  04 0d 2a bc 04 0d 2a c6  16 41 44 44 20 52 30 2c  |..*...*..ADD R0,|
00004d60  52 32 2c 52 30 2c 4c 53  4c 23 35 0d 2a d0 1c 53  |R2,R0,LSL#5.*..S|
00004d70  54 52 20 52 30 2c 6f 73  77 6f 72 64 32 31 5f 35  |TR R0,osword21_5|
00004d80  5f 62 6c 6f 63 6b 31 0d  2a da 1b 41 44 52 20 52  |_block1.*..ADR R|
00004d90  31 2c 6f 73 77 6f 72 64  32 31 5f 35 5f 62 6c 6f  |1,osword21_5_blo|
00004da0  63 6b 0d 2a e4 0e 4d 4f  56 20 52 30 2c 23 32 31  |ck.*..MOV R0,#21|
00004db0  0d 2a ee 28 53 57 49 20  22 4f 53 5f 57 6f 72 64  |.*.(SWI "OS_Word|
00004dc0  22 20 3b 20 73 65 74 20  70 6f 69 6e 74 65 72 20  |" ; set pointer |
00004dd0  70 6f 73 69 74 69 6f 6e  0d 2a f8 0f 3b 4d 4f 56  |position.*..;MOV|
00004de0  20 50 43 2c 52 31 34 0d  2a f9 14 42 20 64 65 66  | PC,R14.*..B def|
00004df0  69 6e 65 5f 63 75 72 73  6f 72 32 0d 2b 02 04 0d  |ine_cursor2.+...|
00004e00  2b 0c 12 3b 42 20 63 75  72 73 6f 72 5f 63 6f 6e  |+..;B cursor_con|
00004e10  74 0d 2b 16 04 0d 2b 20  1c 2e 70 61 64 64 69 6e  |t.+...+ ..paddin|
00004e20  67 5f 74 6f 5f 61 6c 69  67 6e 5f 6f 73 77 6f 72  |g_to_align_oswor|
00004e30  64 0d 2b 2a 1c 45 51 55  42 20 30 20 3a 20 45 51  |d.+*.EQUB 0 : EQ|
00004e40  55 42 20 30 20 3a 20 45  51 55 42 20 30 0d 2b 34  |UB 0 : EQUB 0.+4|
00004e50  15 2e 6f 73 77 6f 72 64  32 31 5f 35 5f 62 6c 6f  |..osword21_5_blo|
00004e60  63 6b 0d 2b 3e 0a 45 51  55 42 20 35 0d 2b 48 16  |ck.+>.EQUB 5.+H.|
00004e70  2e 6f 73 77 6f 72 64 32  31 5f 35 5f 62 6c 6f 63  |.osword21_5_bloc|
00004e80  6b 31 0d 2b 52 0a 45 51  55 44 20 30 0d 2b 5c 04  |k1.+R.EQUD 0.+\.|
00004e90  0d 2b 66 30 82 20 52 30  2c 52 30 2c 23 26 32 30  |.+f0. R0,R0,#&20|
00004ea0  20 3a 20 41 44 44 20 52  30 2c 52 30 2c 23 26 37  | : ADD R0,R0,#&7|
00004eb0  34 20 3a 20 80 20 52 30  2c 52 30 2c 23 26 46 46  |4 : . R0,R0,#&FF|
00004ec0  0d 2b 70 04 0d 2b 7a 04  0d 2b 84 0b 2e 63 75 72  |.+p..+z..+...cur|
00004ed0  73 6f 72 0d 2b 8e 2b 4d  4f 56 20 52 30 2c 23 30  |sor.+.+MOV R0,#0|
00004ee0  20 3a 20 53 54 52 20 52  30 2c 5b 6d 65 6d 2c 23  | : STR R0,[mem,#|
00004ef0  63 75 72 73 6f 72 5f 74  61 6d 70 65 72 5d 0d 2b  |cursor_tamper].+|
00004f00  98 04 0d 2b a2 1d 5c 4c  44 52 42 20 52 31 2c 5b  |...+..\LDRB R1,[|
00004f10  6d 65 6d 2c 23 63 75 72  73 6f 72 5f 6f 6e 5d 0d  |mem,#cursor_on].|
00004f20  2b ac 1c 5c 43 4d 50 20  52 31 2c 23 30 3a 5c 4d  |+..\CMP R1,#0:\M|
00004f30  4f 56 4e 45 20 50 43 2c  52 31 34 0d 2b b6 1f 54  |OVNE PC,R14.+..T|
00004f40  53 54 20 46 2c 23 31 20  3c 3c 20 31 30 20 3b 20  |ST F,#1 << 10 ; |
00004f50  63 75 72 73 6f 72 20 6f  6e 3f 0d 2b c0 0d ec 51  |cursor on?.+...Q|
00004f60  20 50 43 2c 52 31 34 0d  2b ca 04 0d 2b d4 17 4c  | PC,R14.+...+..L|
00004f70  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 66 65 32  |DRB R0,[mem,#fe2|
00004f80  30 5d 0d 2b de 04 0d 2b  e8 15 54 53 54 20 52 30  |0].+...+..TST R0|
00004f90  2c 23 25 31 31 31 30 30  30 30 30 0d 2b f2 14 42  |,#%11100000.+..B|
00004fa0  45 51 20 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 0d  |EQ blank_cursor.|
00004fb0  2b fc 04 0d 2c 06 1a 54  53 54 20 52 30 2c 23 25  |+...,..TST R0,#%|
00004fc0  31 30 20 3b 20 74 65 6c  65 74 65 78 74 0d 2c 10  |10 ; teletext.,.|
00004fd0  0f 42 4e 45 20 63 75 72  73 6f 72 37 0d 2c 1a 04  |.BNE cursor7.,..|
00004fe0  0d 2c 24 1e 4c 44 52 42  20 52 30 2c 5b 6d 65 6d  |.,$.LDRB R0,[mem|
00004ff0  2c 23 63 72 74 5f 72 65  67 73 2b 31 34 5d 0d 2c  |,#crt_regs+14].,|
00005000  2e 1e 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..LDRB R1,[mem,#|
00005010  63 72 74 5f 72 65 67 73  2b 31 35 5d 0d 2c 38 16  |crt_regs+15].,8.|
00005020  41 44 44 20 52 30 2c 52  31 2c 52 30 2c 4c 53 4c  |ADD R0,R1,R0,LSL|
00005030  23 38 0d 2c 42 04 0d 2c  4c 2f 4c 44 52 42 20 52  |#8.,B..,L/LDRB R|
00005040  31 2c 5b 6d 65 6d 2c 23  63 72 74 5f 72 65 67 73  |1,[mem,#crt_regs|
00005050  2b 31 32 5d 20 3a 20 80  20 52 31 2c 52 31 2c 23  |+12] : . R1,R1,#|
00005060  25 31 31 31 31 0d 2c 56  1e 4c 44 52 42 20 52 32  |%1111.,V.LDRB R2|
00005070  2c 5b 6d 65 6d 2c 23 63  72 74 5f 72 65 67 73 2b  |,[mem,#crt_regs+|
00005080  31 33 5d 0d 2c 60 16 41  44 44 20 52 32 2c 52 32  |13].,`.ADD R2,R2|
00005090  2c 52 31 2c 4c 53 4c 23  38 0d 2c 6a 11 53 55 42  |,R1,LSL#8.,j.SUB|
000050a0  53 20 52 30 2c 52 30 2c  52 32 0d 2c 74 0f 4d 4f  |S R0,R0,R2.,t.MO|
000050b0  56 4d 49 20 52 30 2c 23  30 0d 2c 7e 04 0d 2c 88  |VMI R0,#0.,~..,.|
000050c0  10 2e 63 75 72 73 6f 72  5f 63 6f 6e 74 0d 2c 92  |..cursor_cont.,.|
000050d0  04 0d 2c 9c 2d 4c 44 52  42 20 52 31 32 2c 5b 6d  |..,.-LDRB R12,[m|
000050e0  65 6d 2c 23 63 72 74 5f  72 65 67 73 2b 31 5d 20  |em,#crt_regs+1] |
000050f0  3b 20 68 6f 72 69 7a 2e  20 63 68 61 72 73 0d 2c  |; horiz. chars.,|
00005100  a6 04 0d 2c b0 1a 43 4d  50 20 52 31 32 2c 23 30  |...,..CMP R12,#0|
00005110  20 3a 20 ec 51 20 50 43  2c 52 31 34 0d 2c ba 04  | : .Q PC,R14.,..|
00005120  0d 2c c4 29 3b a4 64 69  76 6d 6f 64 28 30 2c 31  |.,.);.divmod(0,1|
00005130  32 2c 31 2c 32 2c 31 33  29 20 3b 20 52 30 20 3d  |2,1,2,13) ; R0 =|
00005140  20 52 30 20 83 20 52 31  32 0d 2c ce 29 20 20 20  | R0 . R12.,.)   |
00005150  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00005160  20 20 20 3b 20 52 32 20  3d 20 52 30 20 81 20 52  |   ; R2 = R0 . R|
00005170  31 32 0d 2c d8 12 3b 52  53 42 20 52 32 2c 52 32  |12.,..;RSB R2,R2|
00005180  2c 23 33 32 0d 2c e2 14  3b 4d 4f 56 20 52 32 2c  |,#32.,..;MOV R2,|
00005190  52 32 2c 4c 53 4c 23 35  0d 2c ec 04 0d 2c f6 17  |R2,LSL#5.,...,..|
000051a0  3b 20 57 65 20 6b 6e 6f  77 20 52 30 3c 33 32 2a  |; We know R0<32*|
000051b0  52 31 32 0d 2d 00 13 3b  20 52 30 20 3d 20 52 30  |R12.-..; R0 = R0|
000051c0  20 83 20 52 31 32 0d 2d  0a 13 3b 20 52 32 20 3d  | . R12.-..; R2 =|
000051d0  20 52 30 20 81 20 52 31  32 0d 2d 14 12 4d 4f 56  | R0 . R12.-..MOV|
000051e0  20 52 32 2c 23 33 32 3c  3c 32 31 0d 2d 1e 14 43  | R2,#32<<21.-..C|
000051f0  4d 50 20 52 30 2c 52 31  32 2c 4c 53 4c 23 34 0d  |MP R0,R12,LSL#4.|
00005200  2d 28 19 53 55 42 47 45  20 52 30 2c 52 30 2c 52  |-(.SUBGE R0,R0,R|
00005210  31 32 2c 4c 53 4c 23 34  0d 2d 32 17 53 55 42 47  |12,LSL#4.-2.SUBG|
00005220  45 20 52 32 2c 52 32 2c  23 31 36 3c 3c 32 31 0d  |E R2,R2,#16<<21.|
00005230  2d 3c 14 43 4d 50 20 52  30 2c 52 31 32 2c 4c 53  |-<.CMP R0,R12,LS|
00005240  4c 23 33 0d 2d 46 19 53  55 42 47 45 20 52 30 2c  |L#3.-F.SUBGE R0,|
00005250  52 30 2c 52 31 32 2c 4c  53 4c 23 33 0d 2d 50 16  |R0,R12,LSL#3.-P.|
00005260  53 55 42 47 45 20 52 32  2c 52 32 2c 23 38 3c 3c  |SUBGE R2,R2,#8<<|
00005270  32 31 0d 2d 5a 14 43 4d  50 20 52 30 2c 52 31 32  |21.-Z.CMP R0,R12|
00005280  2c 4c 53 4c 23 32 0d 2d  64 19 53 55 42 47 45 20  |,LSL#2.-d.SUBGE |
00005290  52 30 2c 52 30 2c 52 31  32 2c 4c 53 4c 23 32 0d  |R0,R0,R12,LSL#2.|
000052a0  2d 6e 16 53 55 42 47 45  20 52 32 2c 52 32 2c 23  |-n.SUBGE R2,R2,#|
000052b0  34 3c 3c 32 31 0d 2d 78  14 43 4d 50 20 52 30 2c  |4<<21.-x.CMP R0,|
000052c0  52 31 32 2c 4c 53 4c 23  31 0d 2d 82 19 53 55 42  |R12,LSL#1.-..SUB|
000052d0  47 45 20 52 30 2c 52 30  2c 52 31 32 2c 4c 53 4c  |GE R0,R0,R12,LSL|
000052e0  23 31 0d 2d 8c 16 53 55  42 47 45 20 52 32 2c 52  |#1.-..SUBGE R2,R|
000052f0  32 2c 23 32 3c 3c 32 31  0d 2d 96 0e 43 4d 50 20  |2,#2<<21.-..CMP |
00005300  52 30 2c 52 31 32 0d 2d  a0 13 53 55 42 47 45 20  |R0,R12.-..SUBGE |
00005310  52 30 2c 52 30 2c 52 31  32 0d 2d aa 16 53 55 42  |R0,R0,R12.-..SUB|
00005320  47 45 20 52 32 2c 52 32  2c 23 31 3c 3c 32 31 0d  |GE R2,R2,#1<<21.|
00005330  2d b4 04 0d 2d be 04 0d  2d c8 39 4c 44 52 42 20  |-...-...-.9LDRB |
00005340  52 31 2c 5b 6d 65 6d 2c  23 66 65 32 30 5d 20 3a  |R1,[mem,#fe20] :|
00005350  20 54 53 54 20 52 31 2c  23 25 31 30 30 30 30 20  | TST R1,#%10000 |
00005360  3a 20 ec 51 20 52 30 2c  52 30 2c 4c 53 4c 23 31  |: .Q R0,R0,LSL#1|
00005370  0d 2d d2 32 3b 4d 4f 56  20 52 30 2c 52 30 2c 4c  |.-.2;MOV R0,R0,L|
00005380  53 4c 23 34 20 20 20 20  20 20 20 20 20 3b 20 20  |SL#4         ;  |
00005390  20 74 68 65 73 65 20 74  77 6f 20 73 75 72 70 6c  | these two surpl|
000053a0  75 73 0d 2d dc 1e 3b 41  44 44 20 52 30 2c 52 30  |us.-..;ADD R0,R0|
000053b0  2c 52 32 2c 4c 53 4c 23  31 36 20 20 20 20 20 3b  |,R2,LSL#16     ;|
000053c0  0d 2d e6 3a 41 44 44 20  52 30 2c 52 32 2c 52 30  |.-.:ADD R0,R2,R0|
000053d0  2c 4c 53 4c 23 34 20 20  20 20 20 20 20 3b 20 20  |,LSL#4       ;  |
000053e0  20 74 68 69 73 20 6c 69  6e 65 20 6d 69 73 73 69  | this line missi|
000053f0  6e 67 20 69 6e 20 31 2e  33 30 0d 2d f0 1c 53 54  |ng in 1.30.-..ST|
00005400  52 20 52 30 2c 6f 73 77  6f 72 64 32 31 5f 35 5f  |R R0,osword21_5_|
00005410  62 6c 6f 63 6b 31 0d 2d  fa 1b 41 44 52 20 52 31  |block1.-..ADR R1|
00005420  2c 6f 73 77 6f 72 64 32  31 5f 35 5f 62 6c 6f 63  |,osword21_5_bloc|
00005430  6b 0d 2e 04 0e 4d 4f 56  20 52 30 2c 23 32 31 0d  |k....MOV R0,#21.|
00005440  2e 0e 28 53 57 49 20 22  4f 53 5f 57 6f 72 64 22  |..(SWI "OS_Word"|
00005450  20 3b 20 73 65 74 20 70  6f 69 6e 74 65 72 20 70  | ; set pointer p|
00005460  6f 73 69 74 69 6f 6e 0d  2e 18 0f 3b 4d 4f 56 20  |osition....;MOV |
00005470  50 43 2c 52 31 34 0d 2e  19 14 42 20 64 65 66 69  |PC,R14....B defi|
00005480  6e 65 5f 63 75 72 73 6f  72 32 0d 2e 22 04 0d 2e  |ne_cursor2.."...|
00005490  2c 0e 2e 6d 6f 6e 6f 5f  74 69 6d 65 0d 2e 36 0a  |,..mono_time..6.|
000054a0  45 51 55 44 20 30 0d 2e  40 0a 2e 73 70 65 65 64  |EQUD 0..@..speed|
000054b0  0d 2e 4a 0a 45 51 55 44  20 30 0d 2e 54 04 0d 2e  |..J.EQUD 0..T...|
000054c0  5e 12 2e 73 70 65 65 64  5f 63 6f 6e 74 72 6f 6c  |^..speed_control|
000054d0  0d 2e 68 18 4c 44 52 20  52 30 2c 5b 6d 65 6d 2c  |..h.LDR R0,[mem,|
000054e0  23 73 70 65 65 64 52 5d  0d 2e 72 10 41 44 44 20  |#speedR]..r.ADD |
000054f0  52 31 2c 52 31 2c 52 30  0d 2e 7c 10 53 54 52 20  |R1,R1,R0..|.STR |
00005500  52 31 2c 73 70 65 65 64  0d 2e 86 04 0d 2e 90 14  |R1,speed........|
00005510  4c 44 52 20 52 31 2c 6d  6f 6e 6f 5f 74 69 6d 65  |LDR R1,mono_time|
00005520  0d 2e 9a 0e 2e 6d 6f 6e  6f 5f 6c 6f 6f 70 0d 2e  |.....mono_loop..|
00005530  a4 1e 53 57 49 20 22 4f  53 5f 52 65 61 64 4d 6f  |..SWI "OS_ReadMo|
00005540  6e 6f 74 6f 6e 69 63 54  69 6d 65 22 0d 2e ae 13  |notonicTime"....|
00005550  4d 4f 56 20 52 30 2c 52  30 2c 4c 53 52 23 31 0d  |MOV R0,R0,LSR#1.|
00005560  2e b8 0d 43 4d 50 20 52  30 2c 52 31 0d 2e c2 11  |...CMP R0,R1....|
00005570  42 45 51 20 6d 6f 6e 6f  5f 6c 6f 6f 70 0d 2e cc  |BEQ mono_loop...|
00005580  14 53 54 52 20 52 30 2c  6d 6f 6e 6f 5f 74 69 6d  |.STR R0,mono_tim|
00005590  65 0d 2e d6 04 0d 2e e0  0e 4d 4f 56 20 50 43 2c  |e........MOV PC,|
000055a0  52 31 34 0d 2e ea 04 0d  2e f4 04 0d 2e fe 04 0d  |R14.............|
000055b0  2f 08 0a 2e 76 73 79 6e  63 0d 2f 12 14 53 54 52  |/...vsync./..STR|
000055c0  20 52 31 34 2c 76 73 79  6e 63 52 31 34 0d 2f 1c  | R14,vsyncR14./.|
000055d0  04 0d 2f 26 04 0d 2f 30  19 4c 44 52 20 52 30 2c  |../&../0.LDR R0,|
000055e0  5b 6d 65 6d 2c 23 73 63  72 65 65 6e 52 5d 0d 2f  |[mem,#screenR]./|
000055f0  3a 10 41 44 44 20 52 31  2c 52 31 2c 52 30 0d 2f  |:.ADD R1,R1,R0./|
00005600  44 18 53 54 52 20 52 31  2c 5b 6d 65 6d 2c 23 73  |D.STR R1,[mem,#s|
00005610  63 72 65 65 6e 5d 0d 2f  4e 04 0d 2f 58 19 4c 44  |creen]./N../X.LD|
00005620  52 42 20 52 30 2c 6c 64  72 62 34 30 5f 74 61 6d  |RB R0,ldrb40_tam|
00005630  70 65 72 0d 2f 62 22 43  4d 50 20 52 30 2c 23 31  |per./b"CMP R0,#1|
00005640  20 3a 20 42 4c 45 51 20  6c 64 72 62 34 30 5f 75  | : BLEQ ldrb40_u|
00005650  70 64 61 74 65 0d 2f 6c  04 0d 2f 76 10 3b 42 4c  |pdate./l../v.;BL|
00005660  20 74 72 61 63 65 5f 6f  6e 0d 2f 80 04 0d 2f 8a  | trace_on./.../.|
00005670  19 3b 4c 44 52 42 20 52  31 2c 73 63 72 65 65 6e  |.;LDRB R1,screen|
00005680  5f 63 6f 75 6e 74 0d 2f  94 12 3b 53 55 42 53 20  |_count./..;SUBS |
00005690  52 31 2c 52 31 2c 23 31  0d 2f 9e 1d 3b 4c 44 52  |R1,R1,#1./..;LDR|
000056a0  4d 49 42 20 52 31 2c 73  63 72 65 65 6e 5f 63 6f  |MIB R1,screen_co|
000056b0  75 6e 74 2b 34 0d 2f a8  19 3b 53 54 52 42 20 52  |unt+4./..;STRB R|
000056c0  31 2c 73 63 72 65 65 6e  5f 63 6f 75 6e 74 0d 2f  |1,screen_count./|
000056d0  b2 18 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 74  |..LDR R0,[mem,#t|
000056e0  61 6d 70 65 72 5d 0d 2f  bc 0d 43 4d 50 20 52 30  |amper]./..CMP R0|
000056f0  2c 23 30 0d 2f c6 04 0d  2f d0 11 42 45 51 20 6e  |,#0./.../..BEQ n|
00005700  6f 5f 74 61 6d 70 65 72  0d 2f da 0d 4d 4f 56 20  |o_tamper./..MOV |
00005710  52 30 2c 23 30 0d 2f e4  18 53 54 52 20 52 30 2c  |R0,#0./..STR R0,|
00005720  5b 6d 65 6d 2c 23 74 61  6d 70 65 72 5d 0d 2f ee  |[mem,#tamper]./.|
00005730  1c 3b 53 57 49 20 22 36  35 30 32 5f 55 70 64 61  |.;SWI "6502_Upda|
00005740  74 65 53 63 72 65 65 6e  22 0d 2f f8 12 42 4c 20  |teScreen"./..BL |
00005750  72 65 63 61 6c 63 5f 77  72 61 70 0d 30 02 13 42  |recalc_wrap.0..B|
00005760  4c 20 75 70 64 61 74 65  73 63 72 65 65 6e 0d 30  |L updatescreen.0|
00005770  0c 1f 54 53 54 20 46 2c  23 31 20 3c 3c 20 31 30  |..TST F,#1 << 10|
00005780  20 3b 20 63 75 72 73 6f  72 20 6f 6e 3f 0d 30 16  | ; cursor on?.0.|
00005790  17 3b 42 4c 4e 45 20 64  65 66 69 6e 65 5f 63 75  |.;BLNE define_cu|
000057a0  72 73 6f 72 0d 30 20 0f  42 4c 4e 45 20 63 75 72  |rsor.0 .BLNE cur|
000057b0  73 6f 72 0d 30 2a 0e 2e  6e 6f 5f 74 61 6d 70 65  |sor.0*..no_tampe|
000057c0  72 0d 30 34 1d 4c 44 52  42 20 52 30 2c 5b 6d 65  |r.04.LDRB R0,[me|
000057d0  6d 2c 23 70 61 6c 5f 74  61 6d 70 65 72 5d 0d 30  |m,#pal_tamper].0|
000057e0  3e 0d 43 4d 50 20 52 30  2c 23 30 0d 30 48 13 42  |>.CMP R0,#0.0H.B|
000057f0  4c 4e 45 20 75 70 64 61  74 65 5f 70 61 6c 0d 30  |LNE update_pal.0|
00005800  52 04 0d 30 5c 04 0d 30  66 1f 4c 44 52 20 52 30  |R..0\..0f.LDR R0|
00005810  2c 5b 6d 65 6d 2c 23 63  75 72 73 6f 72 5f 74 61  |,[mem,#cursor_ta|
00005820  6d 70 65 72 5d 0d 30 70  0d 43 4d 50 20 52 30 2c  |mper].0p.CMP R0,|
00005830  23 30 0d 30 7a 0f 42 4c  4e 45 20 63 75 72 73 6f  |#0.0z.BLNE curso|
00005840  72 0d 30 84 04 0d 30 8e  04 0d 30 98 04 0d 30 a2  |r.0...0...0...0.|
00005850  1c 53 55 42 20 52 30 2c  6d 65 6d 2c 23 35 31 32  |.SUB R0,mem,#512|
00005860  20 3b 20 73 68 65 69 6c  61 0d 30 ac 15 4c 44 52  | ; sheila.0..LDR|
00005870  42 20 52 31 2c 5b 52 30  2c 23 26 32 30 5d 0d 30  |B R1,[R0,#&20].0|
00005880  b6 1b 54 53 54 20 52 31  2c 23 25 31 30 20 3b 20  |..TST R1,#%10 ; |
00005890  74 65 6c 65 74 65 78 74  3f 0d 30 c0 1e 3b 53 57  |teletext?.0..;SW|
000058a0  49 4e 45 20 22 36 35 30  32 5f 55 70 64 61 74 65  |INE "6502_Update|
000058b0  53 63 72 65 65 6e 22 0d  30 ca 15 42 4c 4e 45 20  |Screen".0..BLNE |
000058c0  75 70 64 61 74 65 73 63  72 65 65 6e 0d 30 d4 12  |updatescreen.0..|
000058d0  41 44 44 20 52 30 2c 52  30 2c 23 26 34 44 0d 30  |ADD R0,R0,#&4D.0|
000058e0  de 11 3b 4c 44 52 42 20  52 31 2c 5b 52 30 5d 0d  |..;LDRB R1,[R0].|
000058f0  30 e8 14 3b 4c 44 52 42  20 52 32 2c 5b 52 30 2c  |0..;LDRB R2,[R0,|
00005900  23 31 5d 0d 30 f2 16 4c  44 52 42 20 52 31 2c 5b  |#1].0..LDRB R1,[|
00005910  6d 65 6d 2c 23 69 66 72  5d 0d 30 fc 16 4c 44 52  |mem,#ifr].0..LDR|
00005920  42 20 52 32 2c 5b 6d 65  6d 2c 23 69 65 72 5d 0d  |B R2,[mem,#ier].|
00005930  31 06 2b 84 52 20 52 31  2c 52 31 2c 23 25 31 30  |1.+.R R1,R1,#%10|
00005940  20 3b 20 69 6e 74 65 72  72 75 70 74 20 69 73 20  | ; interrupt is |
00005950  66 72 6f 6d 20 76 73 79  6e 63 0d 31 10 2d 54 53  |from vsync.1.-TS|
00005960  54 20 52 32 2c 23 25 31  30 20 3b 20 69 73 20 76  |T R2,#%10 ; is v|
00005970  73 79 6e 63 20 69 6e 74  65 72 72 75 70 74 20 65  |sync interrupt e|
00005980  6e 61 62 6c 65 64 3f 0d  31 1a 13 84 52 4e 45 20  |nabled?.1...RNE |
00005990  52 31 2c 52 31 2c 23 26  38 30 0d 31 24 11 3b 53  |R1,R1,#&80.1$.;S|
000059a0  54 52 42 20 52 31 2c 5b  52 30 5d 0d 31 2e 16 53  |TRB R1,[R0].1..S|
000059b0  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R1,[mem,#ifr|
000059c0  5d 0d 31 38 15 3b 42 45  51 20 6e 6f 5f 69 6e 74  |].18.;BEQ no_int|
000059d0  65 72 72 75 70 74 0d 31  42 0c 3b a4 66 65 74 63  |errupt.1B.;.fetc|
000059e0  68 32 0d 31 4c 04 0d 31  56 12 3b 54 53 54 20 46  |h2.1L..1V.;TST F|
000059f0  2c 23 31 20 3c 3c 20 39  0d 31 60 13 3b 42 45 51  |,#1 << 9.1`.;BEQ|
00005a00  20 73 6b 69 70 5f 65 78  61 63 74 0d 31 6a 04 0d  | skip_exact.1j..|
00005a10  31 74 15 3b 4c 44 52 20  52 31 2c 6d 6f 6e 6f 5f  |1t.;LDR R1,mono_|
00005a20  74 69 6d 65 0d 31 7e 0f  3b 2e 6d 6f 6e 6f 5f 6c  |time.1~.;.mono_l|
00005a30  6f 6f 70 0d 31 88 1f 3b  53 57 49 20 22 4f 53 5f  |oop.1..;SWI "OS_|
00005a40  52 65 61 64 4d 6f 6e 6f  74 6f 6e 69 63 54 69 6d  |ReadMonotonicTim|
00005a50  65 22 0d 31 92 14 3b 4d  4f 56 20 52 30 2c 52 30  |e".1..;MOV R0,R0|
00005a60  2c 4c 53 52 23 31 0d 31  9c 0e 3b 43 4d 50 20 52  |,LSR#1.1..;CMP R|
00005a70  30 2c 52 31 0d 31 a6 12  3b 42 45 51 20 6d 6f 6e  |0,R1.1..;BEQ mon|
00005a80  6f 5f 6c 6f 6f 70 0d 31  b0 15 3b 53 54 52 20 52  |o_loop.1..;STR R|
00005a90  30 2c 6d 6f 6e 6f 5f 74  69 6d 65 0d 31 ba 04 0d  |0,mono_time.1...|
00005aa0  31 c4 0f 2e 73 6b 69 70  5f 65 78 61 63 74 0d 31  |1...skip_exact.1|
00005ab0  ce 04 0d 31 d8 1f 54 53  54 20 46 2c 23 31 20 3c  |...1..TST F,#1 <|
00005ac0  3c 20 31 30 20 3b 20 63  75 72 73 6f 72 20 6f 6e  |< 10 ; cursor on|
00005ad0  3f 0d 31 e2 15 4c 44 52  45 51 20 50 43 2c 76 73  |?.1..LDREQ PC,vs|
00005ae0  79 6e 63 52 31 34 0d 31  ec 04 0d 31 f6 18 4c 44  |yncR14.1...1..LD|
00005af0  52 42 20 52 31 2c 63 75  72 73 6f 72 5f 73 74 61  |RB R1,cursor_sta|
00005b00  74 65 0d 32 00 0d 43 4d  50 20 52 31 2c 23 30 0d  |te.2..CMP R1,#0.|
00005b10  32 0a 15 4c 44 52 4e 45  20 50 43 2c 76 73 79 6e  |2..LDRNE PC,vsyn|
00005b20  63 52 31 34 0d 32 14 04  0d 32 1e 1e 4c 44 52 42  |cR14.2...2..LDRB|
00005b30  20 52 31 2c 5b 6d 65 6d  2c 23 63 72 74 5f 72 65  | R1,[mem,#crt_re|
00005b40  67 73 2b 31 30 5d 0d 32  28 2f 54 53 54 20 52 31  |gs+10].2(/TST R1|
00005b50  2c 23 25 31 30 30 30 30  30 30 20 3b 20 63 75 72  |,#%1000000 ; cur|
00005b60  73 6f 72 20 62 6c 69 6e  6b 69 6e 67 20 65 6e 61  |sor blinking ena|
00005b70  62 6c 65 64 3f 0d 32 32  15 4c 44 52 45 51 20 50  |bled?.22.LDREQ P|
00005b80  43 2c 76 73 79 6e 63 52  31 34 0d 32 3c 04 0d 32  |C,vsyncR14.2<..2|
00005b90  46 18 4c 44 52 42 20 52  30 2c 63 75 72 73 6f 72  |F.LDRB R0,cursor|
00005ba0  5f 66 6c 61 73 68 0d 32  50 11 53 55 42 53 20 52  |_flash.2P.SUBS R|
00005bb0  30 2c 52 30 2c 23 31 0d  32 5a 18 53 54 52 42 20  |0,R0,#1.2Z.STRB |
00005bc0  52 30 2c 63 75 72 73 6f  72 5f 66 6c 61 73 68 0d  |R0,cursor_flash.|
00005bd0  32 64 15 4c 44 52 47 45  20 50 43 2c 76 73 79 6e  |2d.LDRGE PC,vsyn|
00005be0  63 52 31 34 0d 32 6e 04  0d 32 78 13 54 53 54 20  |cR14.2n..2x.TST |
00005bf0  52 31 2c 23 25 31 30 30  30 30 30 0d 32 82 0d ec  |R1,#%100000.2...|
00005c00  51 20 52 30 2c 23 31 35  0d 32 8c 10 4d 4f 56 4e  |Q R0,#15.2..MOVN|
00005c10  45 20 52 30 2c 23 33 31  0d 32 96 18 53 54 52 42  |E R0,#31.2..STRB|
00005c20  20 52 30 2c 63 75 72 73  6f 72 5f 66 6c 61 73 68  | R0,cursor_flash|
00005c30  0d 32 a0 04 0d 32 aa 14  4c 44 52 20 52 31 34 2c  |.2...2..LDR R14,|
00005c40  76 73 79 6e 63 52 31 34  0d 32 b4 17 4c 44 52 42  |vsyncR14.2..LDRB|
00005c50  20 52 30 2c 66 6c 61 73  68 5f 73 74 61 74 65 0d  | R0,flash_state.|
00005c60  32 be 0e 82 20 52 30 2c  52 30 2c 23 31 0d 32 c8  |2... R0,R0,#1.2.|
00005c70  17 53 54 52 42 20 52 30  2c 66 6c 61 73 68 5f 73  |.STRB R0,flash_s|
00005c80  74 61 74 65 0d 32 d2 21  43 4d 50 20 52 30 2c 23  |tate.2.!CMP R0,#|
00005c90  30 20 3a 20 42 45 51 20  62 6c 61 6e 6b 5f 63 75  |0 : BEQ blank_cu|
00005ca0  72 73 6f 72 32 0d 32 dc  14 42 20 64 65 66 69 6e  |rsor2.2..B defin|
00005cb0  65 5f 63 75 72 73 6f 72  32 0d 32 e6 04 0d 32 f0  |e_cursor2.2...2.|
00005cc0  14 3b 4c 44 52 20 50 43  2c 76 73 79 6e 63 52 31  |.;LDR PC,vsyncR1|
00005cd0  34 0d 32 fa 0d 2e 76 73  79 6e 63 52 31 34 0d 33  |4.2...vsyncR14.3|
00005ce0  04 0a 45 51 55 44 20 30  0d 33 0e 04 0d 33 18 0b  |..EQUD 0.3...3..|
00005cf0  2e 6c 64 72 62 34 30 0d  33 22 04 0d 33 2c 18 4c  |.ldrb40.3"..3,.L|
00005d00  44 52 42 20 52 32 2c 6c  64 72 62 34 30 5f 76 61  |DRB R2,ldrb40_va|
00005d10  6c 75 65 0d 33 36 16 42  49 43 20 52 30 2c 52 30  |lue.36.BIC R0,R0|
00005d20  2c 23 25 31 31 30 30 30  30 0d 33 40 0f 84 52 20  |,#%110000.3@..R |
00005d30  52 30 2c 52 30 2c 52 32  0d 33 4a 0d 4d 4f 56 20  |R0,R0,R2.3J.MOV |
00005d40  52 31 2c 23 31 0d 33 54  19 53 54 52 42 20 52 31  |R1,#1.3T.STRB R1|
00005d50  2c 6c 64 72 62 34 30 5f  74 61 6d 70 65 72 0d 33  |,ldrb40_tamper.3|
00005d60  5e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 33 68 04  |^.MOV PC,R14.3h.|
00005d70  0d 33 72 12 2e 6c 64 72  62 34 30 5f 75 70 64 61  |.3r..ldrb40_upda|
00005d80  74 65 0d 33 7c 13 4d 4f  56 20 52 30 2c 23 25 31  |te.3|.MOV R0,#%1|
00005d90  31 30 30 30 30 0d 33 86  18 53 54 52 42 20 52 30  |10000.3..STRB R0|
00005da0  2c 6c 64 72 62 34 30 5f  76 61 6c 75 65 0d 33 90  |,ldrb40_value.3.|
00005db0  0d 4d 4f 56 20 52 30 2c  23 30 0d 33 9a 19 53 54  |.MOV R0,#0.3..ST|
00005dc0  52 42 20 52 30 2c 6c 64  72 62 34 30 5f 74 61 6d  |RB R0,ldrb40_tam|
00005dd0  70 65 72 0d 33 a4 1a 54  53 54 20 46 2c 23 31 3c  |per.3..TST F,#1<|
00005de0  3c 39 20 3b 20 6a 6f 79  73 74 69 63 6b 0d 33 ae  |<9 ; joystick.3.|
00005df0  0d ec 51 20 50 43 2c 52  31 34 0d 33 b8 21 53 57  |..Q PC,R14.3.!SW|
00005e00  49 20 26 36 33 46 34 30  20 3b 20 22 58 4a 6f 79  |I &63F40 ; "XJoy|
00005e10  73 74 69 63 6b 5f 52 65  61 64 22 0d 33 c2 14 42  |stick_Read".3..B|
00005e20  56 53 20 6c 64 72 62 34  30 5f 6d 6f 75 73 65 0d  |VS ldrb40_mouse.|
00005e30  33 cc 13 80 20 52 31 2c  52 30 2c 23 26 31 30 30  |3... R1,R0,#&100|
00005e40  30 30 0d 33 d6 0d 4d 4f  56 20 52 30 2c 23 31 0d  |00.3..MOV R0,#1.|
00005e50  33 e0 21 53 57 49 20 26  36 33 46 34 30 20 3b 20  |3.!SWI &63F40 ; |
00005e60  22 58 4a 6f 79 73 74 69  63 6b 5f 52 65 61 64 22  |"XJoystick_Read"|
00005e70  0d 33 ea 0f 4d 4f 56 56  53 20 52 30 2c 23 30 0d  |.3..MOVVS R0,#0.|
00005e80  33 f4 13 80 20 52 30 2c  52 30 2c 23 26 31 30 30  |3... R0,R0,#&100|
00005e90  30 30 0d 33 fe 16 41 44  44 20 52 31 2c 52 31 2c  |00.3..ADD R1,R1,|
00005ea0  52 30 2c 4c 53 4c 23 31  0d 34 08 13 80 20 52 31  |R0,LSL#1.4... R1|
00005eb0  2c 52 31 2c 23 26 33 30  30 30 30 0d 34 12 18 4d  |,R1,#&30000.4..M|
00005ec0  4f 56 20 52 31 2c 52 31  2c 4c 53 52 23 28 31 36  |OV R1,R1,LSR#(16|
00005ed0  2d 34 29 0d 34 1c 04 0d  34 26 14 82 20 52 32 2c  |-4).4...4&.. R2,|
00005ee0  52 31 2c 23 25 31 31 30  30 30 30 0d 34 30 04 0d  |R1,#%110000.40..|
00005ef0  34 3a 17 3b 41 44 44 20  52 31 33 2c 6d 65 6d 2c  |4:.;ADD R13,mem,|
00005f00  23 26 46 45 30 30 0d 34  44 17 3b 4c 44 52 42 20  |#&FE00.4D.;LDRB |
00005f10  52 30 2c 5b 52 31 33 2c  23 26 34 30 5d 0d 34 4e  |R0,[R13,#&40].4N|
00005f20  17 3b 42 49 43 20 52 30  2c 52 30 2c 23 25 31 31  |.;BIC R0,R0,#%11|
00005f30  30 30 30 30 0d 34 58 18  53 54 52 42 20 52 32 2c  |0000.4X.STRB R2,|
00005f40  6c 64 72 62 34 30 5f 76  61 6c 75 65 0d 34 62 10  |ldrb40_value.4b.|
00005f50  3b 84 52 20 52 30 2c 52  30 2c 52 32 0d 34 6c 04  |;.R R0,R0,R2.4l.|
00005f60  0d 34 76 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 34  |.4v.MOV PC,R14.4|
00005f70  80 04 0d 34 8a 12 2e 6c  64 72 62 34 30 5f 74 61  |...4...ldrb40_ta|
00005f80  6d 70 65 72 0d 34 94 0a  45 51 55 44 20 30 0d 34  |mper.4..EQUD 0.4|
00005f90  9e 11 2e 6c 64 72 62 34  30 5f 76 61 6c 75 65 0d  |...ldrb40_value.|
00005fa0  34 a8 0a 45 51 55 44 20  30 0d 34 b2 04 0d 34 bc  |4..EQUD 0.4...4.|
00005fb0  11 2e 6c 64 72 62 34 30  5f 6d 6f 75 73 65 0d 34  |..ldrb40_mouse.4|
00005fc0  c6 0e 4d 4f 56 20 52 31  33 2c 52 33 0d 34 d0 12  |..MOV R13,R3.4..|
00005fd0  53 57 49 20 22 4f 53 5f  4d 6f 75 73 65 22 0d 34  |SWI "OS_Mouse".4|
00005fe0  da 0e 4d 4f 56 20 52 33  2c 52 31 33 0d 34 e4 04  |..MOV R3,R13.4..|
00005ff0  0d 34 ee 13 4d 4f 56 20  52 32 2c 52 32 2c 4c 53  |.4..MOV R2,R2,LS|
00006000  52 23 31 0d 34 f8 10 52  53 42 20 52 32 2c 52 32  |R#1.4..RSB R2,R2|
00006010  2c 23 33 0d 35 02 13 4d  4f 56 20 52 32 2c 52 32  |,#3.5..MOV R2,R2|
00006020  2c 4c 53 4c 23 34 0d 35  0c 17 3b 41 44 44 20 52  |,LSL#4.5..;ADD R|
00006030  31 33 2c 6d 65 6d 2c 23  26 46 45 30 30 0d 35 16  |13,mem,#&FE00.5.|
00006040  17 3b 4c 44 52 42 20 52  30 2c 5b 52 31 33 2c 23  |.;LDRB R0,[R13,#|
00006050  26 34 30 5d 0d 35 20 17  3b 42 49 43 20 52 30 2c  |&40].5 .;BIC R0,|
00006060  52 30 2c 23 25 31 31 30  30 30 30 0d 35 2a 18 53  |R0,#%110000.5*.S|
00006070  54 52 42 20 52 32 2c 6c  64 72 62 34 30 5f 76 61  |TRB R2,ldrb40_va|
00006080  6c 75 65 0d 35 34 10 3b  84 52 20 52 30 2c 52 30  |lue.54.;.R R0,R0|
00006090  2c 52 32 0d 35 3e 04 0d  35 48 0e 4d 4f 56 20 50  |,R2.5>..5H.MOV P|
000060a0  43 2c 52 31 34 0d 35 52  04 0d 35 5c 15 2e 77 72  |C,R14.5R..5\..wr|
000060b0  69 74 65 5f 41 44 43 5f  73 74 61 74 75 73 0d 35  |ite_ADC_status.5|
000060c0  66 04 0d 35 70 1a 54 53  54 20 46 2c 23 31 3c 3c  |f..5p.TST F,#1<<|
000060d0  39 20 3b 20 6a 6f 79 73  74 69 63 6b 0d 35 7a 0d  |9 ; joystick.5z.|
000060e0  ec 51 20 50 43 2c 52 31  34 0d 35 84 04 0d 35 8e  |.Q PC,R14.5...5.|
000060f0  04 0d 35 98 19 42 49 43  20 52 31 32 2c 52 30 2c  |..5..BIC R12,R0,|
00006100  23 25 31 31 31 31 30 30  30 30 0d 35 a2 04 0d 35  |#%11110000.5...5|
00006110  ac 13 4d 4f 56 20 52 30  2c 52 30 2c 4c 53 52 23  |..MOV R0,R0,LSR#|
00006120  31 0d 35 b6 21 80 20 52  30 2c 52 30 2c 23 25 31  |1.5.!. R0,R0,#%1|
00006130  20 3b 20 6a 6f 79 73 74  69 63 6b 20 6e 75 6d 62  | ; joystick numb|
00006140  65 72 0d 35 c0 21 53 57  49 20 26 36 33 46 34 30  |er.5.!SWI &63F40|
00006150  20 3b 20 22 58 4a 6f 79  73 74 69 63 6b 5f 52 65  | ; "XJoystick_Re|
00006160  61 64 22 0d 35 ca 17 42  56 53 20 77 72 69 74 65  |ad".5..BVS write|
00006170  5f 41 44 43 5f 6d 6f 75  73 65 0d 35 d4 04 0d 35  |_ADC_mouse.5...5|
00006180  de 04 0d 35 e8 28 54 53  54 20 52 31 32 2c 23 25  |...5.(TST R12,#%|
00006190  31 20 20 3b 20 6c 65 66  74 2f 72 69 67 68 74 20  |1  ; left/right |
000061a0  6f 72 20 75 70 2f 64 6f  77 6e 0d 35 f2 12 ec 51  |or up/down.5...Q|
000061b0  20 52 30 2c 52 30 2c 4c  53 52 23 38 0d 35 fc 12  | R0,R0,LSR#8.5..|
000061c0  41 44 44 20 52 30 2c 52  30 2c 23 31 32 37 0d 36  |ADD R0,R0,#127.6|
000061d0  06 10 80 20 52 30 2c 52  30 2c 23 26 46 46 0d 36  |... R0,R0,#&FF.6|
000061e0  10 14 52 53 42 45 51 20  52 30 2c 52 30 2c 23 32  |..RSBEQ R0,R0,#2|
000061f0  35 35 0d 36 1a 04 0d 36  24 13 4d 4f 56 20 52 31  |55.6...6$.MOV R1|
00006200  2c 52 30 2c 4c 53 52 23  32 0d 36 2e 14 80 20 52  |,R0,LSR#2.6... R|
00006210  31 2c 52 31 2c 23 25 31  31 30 30 30 30 0d 36 38  |1,R1,#%110000.68|
00006220  11 84 52 20 52 31 32 2c  52 31 32 2c 52 31 0d 36  |..R R12,R12,R1.6|
00006230  42 18 84 52 20 52 31 32  2c 52 31 32 2c 23 25 31  |B..R R12,R12,#%1|
00006240  30 30 30 30 30 30 0d 36  4c 04 0d 36 56 1c 53 55  |000000.6L..6V.SU|
00006250  42 20 52 31 2c 6d 65 6d  2c 23 35 31 32 20 3b 20  |B R1,mem,#512 ; |
00006260  73 68 65 69 6c 61 0d 36  60 04 0d 36 6a 16 53 54  |sheila.6`..6j.ST|
00006270  52 42 20 52 31 32 2c 5b  52 31 2c 23 26 43 30 5d  |RB R12,[R1,#&C0]|
00006280  0d 36 74 16 53 54 52 42  20 52 31 32 2c 5b 52 31  |.6t.STRB R12,[R1|
00006290  2c 23 26 31 38 5d 0d 36  7e 04 0d 36 88 15 53 54  |,#&18].6~..6..ST|
000062a0  52 42 20 52 30 2c 5b 52  31 2c 23 26 43 31 5d 0d  |RB R0,[R1,#&C1].|
000062b0  36 92 15 53 54 52 42 20  52 30 2c 5b 52 31 2c 23  |6..STRB R0,[R1,#|
000062c0  26 31 39 5d 0d 36 9c 0e  4d 4f 56 20 52 31 32 2c  |&19].6..MOV R12,|
000062d0  23 30 0d 36 a6 16 53 54  52 42 20 52 31 32 2c 5b  |#0.6..STRB R12,[|
000062e0  52 31 2c 23 26 43 32 5d  0d 36 b0 16 53 54 52 42  |R1,#&C2].6..STRB|
000062f0  20 52 31 32 2c 5b 52 31  2c 23 26 31 41 5d 0d 36  | R12,[R1,#&1A].6|
00006300  ba 04 0d 36 c4 0e 4d 4f  56 20 50 43 2c 52 31 34  |...6..MOV PC,R14|
00006310  0d 36 ce 04 0d 36 d8 14  2e 77 72 69 74 65 5f 41  |.6...6...write_A|
00006320  44 43 5f 6d 6f 75 73 65  0d 36 e2 04 0d 36 ec 0e  |DC_mouse.6...6..|
00006330  4d 4f 56 20 52 31 33 2c  52 33 0d 36 f6 12 53 57  |MOV R13,R3.6..SW|
00006340  49 20 22 4f 53 5f 4d 6f  75 73 65 22 0d 37 00 0e  |I "OS_Mouse".7..|
00006350  4d 4f 56 20 52 33 2c 52  31 33 0d 37 0a 04 0d 37  |MOV R3,R13.7...7|
00006360  14 10 4d 4f 56 20 52 32  2c 23 31 30 32 34 0d 37  |..MOV R2,#1024.7|
00006370  1e 10 53 55 42 20 52 32  2c 52 32 2c 23 31 0d 37  |..SUB R2,R2,#1.7|
00006380  28 11 53 55 42 53 20 52  30 2c 52 32 2c 52 30 0d  |(.SUBS R0,R2,R0.|
00006390  37 32 0f 4d 4f 56 4c 54  20 52 30 2c 23 30 0d 37  |72.MOVLT R0,#0.7|
000063a0  3c 04 0d 37 46 11 3b 43  4d 50 20 52 30 2c 23 31  |<..7F.;CMP R0,#1|
000063b0  30 32 34 0d 37 50 13 3b  4d 4f 56 47 45 20 52 30  |024.7P.;MOVGE R0|
000063c0  2c 23 31 30 32 34 0d 37  5a 13 3b 53 55 42 47 45  |,#1024.7Z.;SUBGE|
000063d0  20 52 30 2c 52 30 2c 23  31 0d 37 64 04 0d 37 6e  | R0,R0,#1.7d..7n|
000063e0  28 54 53 54 20 52 31 32  2c 23 25 31 20 20 3b 20  |(TST R12,#%1  ; |
000063f0  6c 65 66 74 2f 72 69 67  68 74 20 6f 72 20 75 70  |left/right or up|
00006400  2f 64 6f 77 6e 0d 37 78  0f 4d 4f 56 4e 45 20 52  |/down.7x.MOVNE R|
00006410  30 2c 52 31 0d 37 82 04  0d 37 8c 13 4d 4f 56 20  |0,R1.7...7..MOV |
00006420  52 31 2c 52 30 2c 4c 53  4c 23 34 0d 37 96 14 80  |R1,R0,LSL#4.7...|
00006430  20 52 31 2c 52 31 2c 23  25 31 31 30 30 30 30 0d  | R1,R1,#%110000.|
00006440  37 a0 11 84 52 20 52 31  32 2c 52 31 32 2c 52 31  |7...R R12,R12,R1|
00006450  0d 37 aa 18 84 52 20 52  31 32 2c 52 31 32 2c 23  |.7...R R12,R12,#|
00006460  25 31 30 30 30 30 30 30  0d 37 b4 04 0d 37 be 1c  |%1000000.7...7..|
00006470  53 55 42 20 52 31 2c 6d  65 6d 2c 23 35 31 32 20  |SUB R1,mem,#512 |
00006480  3b 20 73 68 65 69 6c 61  0d 37 c8 04 0d 37 d2 16  |; sheila.7...7..|
00006490  53 54 52 42 20 52 31 32  2c 5b 52 31 2c 23 26 43  |STRB R12,[R1,#&C|
000064a0  30 5d 0d 37 dc 16 53 54  52 42 20 52 31 32 2c 5b  |0].7..STRB R12,[|
000064b0  52 31 2c 23 26 31 38 5d  0d 37 e6 04 0d 37 f0 14  |R1,#&18].7...7..|
000064c0  4d 4f 56 20 52 31 32 2c  52 30 2c 4c 53 52 23 32  |MOV R12,R0,LSR#2|
000064d0  0d 37 fa 16 53 54 52 42  20 52 31 32 2c 5b 52 31  |.7..STRB R12,[R1|
000064e0  2c 23 26 43 31 5d 0d 38  04 16 53 54 52 42 20 52  |,#&C1].8..STRB R|
000064f0  31 32 2c 5b 52 31 2c 23  26 31 39 5d 0d 38 0e 14  |12,[R1,#&19].8..|
00006500  4d 4f 56 20 52 31 32 2c  52 30 2c 4c 53 4c 23 36  |MOV R12,R0,LSL#6|
00006510  0d 38 18 16 53 54 52 42  20 52 31 32 2c 5b 52 31  |.8..STRB R12,[R1|
00006520  2c 23 26 43 32 5d 0d 38  22 16 53 54 52 42 20 52  |,#&C2].8".STRB R|
00006530  31 32 2c 5b 52 31 2c 23  26 31 41 5d 0d 38 2c 04  |12,[R1,#&1A].8,.|
00006540  0d 38 36 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 38  |.86.MOV PC,R14.8|
00006550  40 04 0d 38 4a 04 0d 38  54 0b 2e 74 69 6d 65 72  |@..8J..8T..timer|
00006560  31 0d 38 5e 15 4c 44 52  20 52 30 2c 5b 6d 65 6d  |1.8^.LDR R0,[mem|
00006570  2c 23 54 31 52 5d 0d 38  68 10 41 44 44 20 52 31  |,#T1R].8h.ADD R1|
00006580  2c 52 31 2c 52 30 0d 38  72 16 41 44 44 20 52 31  |,R1,R0.8r.ADD R1|
00006590  2c 52 31 2c 23 32 20 3c  3c 20 31 36 0d 38 7c 14  |,R1,#2 << 16.8|.|
000065a0  53 54 52 20 52 31 2c 5b  6d 65 6d 2c 23 54 31 5d  |STR R1,[mem,#T1]|
000065b0  0d 38 86 04 0d 38 90 1c  53 55 42 20 52 30 2c 6d  |.8...8..SUB R0,m|
000065c0  65 6d 2c 23 35 31 32 20  3b 20 73 68 65 69 6c 61  |em,#512 ; sheila|
000065d0  0d 38 9a 04 0d 38 a4 1c  4c 44 52 42 20 52 31 2c  |.8...8..LDRB R1,|
000065e0  5b 52 30 2c 23 26 34 42  5d 20 3b 20 46 45 34 42  |[R0,#&4B] ; FE4B|
000065f0  0d 38 ae 15 54 53 54 20  52 31 2c 23 25 30 31 30  |.8..TST R1,#%010|
00006600  30 30 30 30 30 0d 38 b8  0c ec 51 20 52 32 2c 23  |00000.8...Q R2,#|
00006610  30 0d 38 c2 1b 53 54 52  45 51 42 20 52 32 2c 5b  |0.8..STREQB R2,[|
00006620  6d 65 6d 2c 23 54 31 6d  6f 64 65 5d 0d 38 cc 04  |mem,#T1mode].8..|
00006630  0d 38 d6 15 54 53 54 20  52 31 2c 23 25 31 30 30  |.8..TST R1,#%100|
00006640  30 30 30 30 30 0d 38 e0  1e 4c 44 52 4e 45 42 20  |00000.8..LDRNEB |
00006650  52 32 2c 5b 52 30 2c 23  26 34 30 5d 20 3b 20 46  |R2,[R0,#&40] ; F|
00006660  45 34 30 0d 38 ea 12 82  4e 45 20 52 32 2c 52 32  |E40.8...NE R2,R2|
00006670  2c 23 26 38 30 0d 38 f4  1e 53 54 52 4e 45 42 20  |,#&80.8..STRNEB |
00006680  52 32 2c 5b 52 30 2c 23  26 34 30 5d 20 3b 20 46  |R2,[R0,#&40] ; F|
00006690  45 34 30 0d 38 fe 04 0d  39 08 16 4c 44 52 42 20  |E40.8...9..LDRB |
000066a0  52 31 2c 5b 6d 65 6d 2c  23 69 66 72 5d 0d 39 12  |R1,[mem,#ifr].9.|
000066b0  33 84 52 20 52 31 2c 52  31 2c 23 25 30 31 30 30  |3.R R1,R1,#%0100|
000066c0  30 30 30 30 20 3b 20 69  6e 74 65 72 72 75 70 74  |0000 ; interrupt|
000066d0  20 69 73 20 66 72 6f 6d  20 74 69 6d 65 72 20 31  | is from timer 1|
000066e0  0d 39 1c 16 53 54 52 42  20 52 31 2c 5b 6d 65 6d  |.9..STRB R1,[mem|
000066f0  2c 23 69 66 72 5d 0d 39  26 04 0d 39 30 0e 4d 4f  |,#ifr].9&..90.MO|
00006700  56 20 50 43 2c 52 31 34  0d 39 3a 04 0d 39 44 0b  |V PC,R14.9:..9D.|
00006710  2e 74 69 6d 65 72 32 0d  39 4e 19 4c 44 52 42 20  |.timer2.9N.LDRB |
00006720  52 30 2c 5b 6d 65 6d 2c  23 54 32 6d 6f 64 65 5d  |R0,[mem,#T2mode]|
00006730  0d 39 58 0d 43 4d 50 20  52 30 2c 23 30 0d 39 62  |.9X.CMP R0,#0.9b|
00006740  0d ec 51 20 50 43 2c 52  31 34 0d 39 6c 0d 4d 4f  |..Q PC,R14.9l.MO|
00006750  56 20 52 30 2c 23 30 0d  39 76 19 53 54 52 42 20  |V R0,#0.9v.STRB |
00006760  52 30 2c 5b 6d 65 6d 2c  23 54 32 6d 6f 64 65 5d  |R0,[mem,#T2mode]|
00006770  0d 39 80 04 0d 39 8a 16  4c 44 52 42 20 52 31 2c  |.9...9..LDRB R1,|
00006780  5b 6d 65 6d 2c 23 69 66  72 5d 0d 39 94 17 84 52  |[mem,#ifr].9...R|
00006790  20 52 31 2c 52 31 2c 23  25 30 30 31 30 30 30 30  | R1,R1,#%0010000|
000067a0  30 0d 39 9e 16 53 54 52  42 20 52 31 2c 5b 6d 65  |0.9..STRB R1,[me|
000067b0  6d 2c 23 69 66 72 5d 0d  39 a8 04 0d 39 b2 0e 4d  |m,#ifr].9...9..M|
000067c0  4f 56 20 50 43 2c 52 31  34 0d 39 bc 04 0d 39 c6  |OV PC,R14.9...9.|
000067d0  0b 2e 74 69 6d 65 72 33  0d 39 d0 15 4c 44 52 20  |..timer3.9..LDR |
000067e0  52 30 2c 5b 6d 65 6d 2c  23 54 33 52 5d 0d 39 da  |R0,[mem,#T3R].9.|
000067f0  10 41 44 44 20 52 31 2c  52 31 2c 52 30 0d 39 e4  |.ADD R1,R1,R0.9.|
00006800  14 53 54 52 20 52 31 2c  5b 6d 65 6d 2c 23 54 33  |.STR R1,[mem,#T3|
00006810  5d 0d 39 ee 04 0d 39 f8  1c 53 55 42 20 52 30 2c  |].9...9..SUB R0,|
00006820  6d 65 6d 2c 23 35 31 32  20 3b 20 73 68 65 69 6c  |mem,#512 ; sheil|
00006830  61 0d 3a 02 04 0d 3a 0c  15 4c 44 52 42 20 52 31  |a.:...:..LDRB R1|
00006840  2c 5b 52 30 2c 23 26 36  42 5d 0d 3a 16 15 54 53  |,[R0,#&6B].:..TS|
00006850  54 20 52 31 2c 23 25 30  31 30 30 30 30 30 30 0d  |T R1,#%01000000.|
00006860  3a 20 14 42 4e 45 20 54  33 6d 6f 64 65 5f 73 6b  |: .BNE T3mode_sk|
00006870  69 70 32 0d 3a 2a 04 0d  3a 34 19 4c 44 52 42 20  |ip2.:*..:4.LDRB |
00006880  52 31 2c 5b 6d 65 6d 2c  23 54 33 6d 6f 64 65 5d  |R1,[mem,#T3mode]|
00006890  0d 3a 3e 0d 43 4d 50 20  52 31 2c 23 31 0d 3a 48  |.:>.CMP R1,#1.:H|
000068a0  14 3b 53 57 49 4e 45 20  26 31 30 30 2b 97 22 31  |.;SWINE &100+."1|
000068b0  22 0d 3a 52 14 3b 53 57  49 45 51 20 26 31 30 30  |".:R.;SWIEQ &100|
000068c0  2b 97 22 30 22 0d 3a 5c  13 42 4e 45 20 54 33 6d  |+."0".:\.BNE T3m|
000068d0  6f 64 65 5f 73 6b 69 70  0d 3a 66 04 0d 3a 70 11  |ode_skip.:f..:p.|
000068e0  2e 54 33 6d 6f 64 65 5f  73 6b 69 70 32 0d 3a 7a  |.T3mode_skip2.:z|
000068f0  17 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 69  |.LDRB R1,[mem,#i|
00006900  66 72 32 5d 0d 3a 84 17  84 52 20 52 31 2c 52 31  |fr2].:...R R1,R1|
00006910  2c 23 25 30 31 30 30 30  30 30 30 0d 3a 8e 17 53  |,#%01000000.:..S|
00006920  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R1,[mem,#ifr|
00006930  32 5d 0d 3a 98 04 0d 3a  a2 04 0d 3a ac 1d 3b 4c  |2].:...:...:..;L|
00006940  44 52 42 20 52 31 2c 5b  52 30 2c 23 26 36 42 5d  |DRB R1,[R0,#&6B]|
00006950  20 3b 20 46 45 36 42 0d  3a b6 16 3b 54 53 54 20  | ; FE6B.:..;TST |
00006960  52 31 2c 23 25 30 31 30  30 30 30 30 30 0d 3a c0  |R1,#%01000000.:.|
00006970  0d 3b ec 51 20 52 32 2c  23 30 0d 3a ca 10 3b 4d  |.;.Q R2,#0.:..;M|
00006980  4f 56 4e 45 20 52 32 2c  23 31 0d 3a d4 1c 3b 53  |OVNE R2,#1.:..;S|
00006990  54 52 45 51 42 20 52 32  2c 5b 6d 65 6d 2c 23 54  |TREQB R2,[mem,#T|
000069a0  33 6d 6f 64 65 5d 0d 3a  de 14 3b 53 57 49 45 51  |3mode].:..;SWIEQ|
000069b0  20 26 31 30 30 2b 97 22  7a 22 0d 3a e8 04 0d 3a  | &100+."z".:...:|
000069c0  f2 10 2e 54 33 6d 6f 64  65 5f 73 6b 69 70 0d 3a  |...T3mode_skip.:|
000069d0  fc 0d 4d 4f 56 20 52 32  2c 23 30 0d 3b 06 19 53  |..MOV R2,#0.;..S|
000069e0  54 52 42 20 52 32 2c 5b  6d 65 6d 2c 23 54 33 6d  |TRB R2,[mem,#T3m|
000069f0  6f 64 65 5d 0d 3b 10 04  0d 3b 1a 1d 3b 4c 44 52  |ode].;...;..;LDR|
00006a00  42 20 52 31 2c 5b 52 30  2c 23 26 36 42 5d 20 3b  |B R1,[R0,#&6B] ;|
00006a10  20 46 45 36 42 0d 3b 24  16 3b 54 53 54 20 52 31  | FE6B.;$.;TST R1|
00006a20  2c 23 25 31 30 30 30 30  30 30 30 0d 3b 2e 1d 3b  |,#%10000000.;..;|
00006a30  4c 44 52 42 20 52 32 2c  5b 52 30 2c 23 26 36 30  |LDRB R2,[R0,#&60|
00006a40  5d 20 3b 20 46 45 36 30  0d 3b 38 13 3b 82 4e 45  |] ; FE60.;8.;.NE|
00006a50  20 52 32 2c 52 32 2c 23  26 38 30 0d 3b 42 14 3b  | R2,R2,#&80.;B.;|
00006a60  84 52 45 51 20 52 32 2c  52 32 2c 23 26 38 30 0d  |.REQ R2,R2,#&80.|
00006a70  3b 4c 1d 3b 53 54 52 42  20 52 32 2c 5b 52 30 2c  |;L.;STRB R2,[R0,|
00006a80  23 26 36 30 5d 20 3b 20  46 45 36 30 0d 3b 56 04  |#&60] ; FE60.;V.|
00006a90  0d 3b 60 1c 4c 44 52 42  20 52 31 2c 5b 52 30 2c  |.;`.LDRB R1,[R0,|
00006aa0  23 26 36 42 5d 20 3b 20  46 45 36 42 0d 3b 6a 10  |#&6B] ; FE6B.;j.|
00006ab0  82 20 52 31 2c 52 31 2c  23 26 43 30 0d 3b 74 0f  |. R1,R1,#&C0.;t.|
00006ac0  54 53 54 20 52 31 2c 23  26 43 30 0d 3b 7e 1c 4c  |TST R1,#&C0.;~.L|
00006ad0  44 52 42 20 52 32 2c 5b  52 30 2c 23 26 36 30 5d  |DRB R2,[R0,#&60]|
00006ae0  20 3b 20 46 45 36 30 0d  3b 88 12 82 45 51 20 52  | ; FE60.;...EQ R|
00006af0  32 2c 52 32 2c 23 26 38  30 0d 3b 92 13 84 52 4e  |2,R2,#&80.;...RN|
00006b00  45 20 52 32 2c 52 32 2c  23 26 38 30 0d 3b 9c 1c  |E R2,R2,#&80.;..|
00006b10  53 54 52 42 20 52 32 2c  5b 52 30 2c 23 26 36 30  |STRB R2,[R0,#&60|
00006b20  5d 20 3b 20 46 45 36 30  0d 3b a6 04 0d 3b b0 04  |] ; FE60.;...;..|
00006b30  0d 3b ba 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 3b  |.;..MOV PC,R14.;|
00006b40  c4 10 2e 72 65 74 75 72  6e 5f 61 64 64 72 0d 3b  |...return_addr.;|
00006b50  ce 0a 45 51 55 44 20 30  0d 3b d8 04 0d 3b e2 0e  |..EQUD 0.;...;..|
00006b60  2e 72 6f 6d 73 5f 61 64  64 72 0d 3b ec 0a 45 51  |.roms_addr.;..EQ|
00006b70  55 44 20 30 0d 3b f6 04  0d 3c 00 0b 2e 74 69 6d  |UD 0.;...<...tim|
00006b80  65 72 34 0d 3c 0a 19 4c  44 52 42 20 52 31 2c 5b  |er4.<..LDRB R1,[|
00006b90  6d 65 6d 2c 23 54 34 6d  6f 64 65 5d 0d 3c 14 0d  |mem,#T4mode].<..|
00006ba0  43 4d 50 20 52 31 2c 23  30 0d 3c 1e 0d ec 51 20  |CMP R1,#0.<...Q |
00006bb0  50 43 2c 52 31 34 0d 3c  28 0d 4d 4f 56 20 52 30  |PC,R14.<(.MOV R0|
00006bc0  2c 23 30 0d 3c 32 19 53  54 52 42 20 52 30 2c 5b  |,#0.<2.STRB R0,[|
00006bd0  6d 65 6d 2c 23 54 34 6d  6f 64 65 5d 0d 3c 3c 04  |mem,#T4mode].<<.|
00006be0  0d 3c 46 04 0d 3c 50 17  4c 44 52 42 20 52 31 2c  |.<F..<P.LDRB R1,|
00006bf0  5b 6d 65 6d 2c 23 69 66  72 32 5d 0d 3c 5a 33 84  |[mem,#ifr2].<Z3.|
00006c00  52 20 52 31 2c 52 31 2c  23 25 30 30 31 30 30 30  |R R1,R1,#%001000|
00006c10  30 30 20 3b 20 69 6e 74  65 72 72 75 70 74 20 69  |00 ; interrupt i|
00006c20  73 20 66 72 6f 6d 20 74  69 6d 65 72 20 34 0d 3c  |s from timer 4.<|
00006c30  64 17 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |d.STRB R1,[mem,#|
00006c40  69 66 72 32 5d 0d 3c 6e  04 0d 3c 78 0e 4d 4f 56  |ifr2].<n..<x.MOV|
00006c50  20 50 43 2c 52 31 34 0d  3c 82 04 0d 3c 8c 04 0d  | PC,R14.<...<...|
00006c60  3c 96 0c 3b 2e 74 72 61  63 65 32 0d 3c a0 0b 3b  |<..;.trace2.<..;|
00006c70  45 51 55 44 20 30 0d 3c  aa 04 0d 3c b4 0a 2e 72  |EQUD 0.<...<...r|
00006c80  65 73 65 74 0d 3c be 0e  3b 4d 4f 56 20 52 31 2c  |eset.<..;MOV R1,|
00006c90  23 31 0d 3c c8 11 3b 53  54 52 20 52 31 2c 74 72  |#1.<..;STR R1,tr|
00006ca0  61 63 65 0d 3c d2 2a 4d  4f 56 20 52 30 2c 23 31  |ace.<.*MOV R0,#1|
00006cb0  35 20 3a 20 4d 4f 56 20  52 31 2c 23 30 20 3a 20  |5 : MOV R1,#0 : |
00006cc0  53 57 49 20 22 4f 53 5f  42 79 74 65 22 0d 3c dc  |SWI "OS_Byte".<.|
00006cd0  12 4d 4f 56 20 52 30 2c  23 26 31 30 30 30 30 0d  |.MOV R0,#&10000.|
00006ce0  3c e6 10 53 55 42 20 52  30 2c 52 30 2c 23 34 0d  |<..SUB R0,R0,#4.|
00006cf0  3c f0 13 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 52  |<..LDR R0,[mem,R|
00006d00  30 5d 0d 3c fa 15 4d 4f  56 20 7a 70 63 2c 52 30  |0].<..MOV zpc,R0|
00006d10  2c 4c 53 4c 23 31 36 0d  3d 04 27 42 49 43 20 46  |,LSL#16.=.'BIC F|
00006d20  2c 46 2c 23 25 31 30 30  30 20 3b 20 63 6c 65 61  |,F,#%1000 ; clea|
00006d30  72 20 44 65 63 69 6d 61  6c 20 6d 6f 64 65 0d 3d  |r Decimal mode.=|
00006d40  0e 29 84 52 20 46 2c 46  2c 23 25 31 30 30 20 20  |.).R F,F,#%100  |
00006d50  3b 20 73 65 74 20 69 6e  74 65 72 72 75 70 74 20  |; set interrupt |
00006d60  64 69 73 61 62 6c 65 0d  3d 18 0b a4 66 65 74 63  |disable.=...fetc|
00006d70  68 32 0d 3d 22 04 0d 3d  2c 04 0d 3d 36 09 2e 65  |h2.="..=,..=6..e|
00006d80  78 69 74 0d 3d 40 0d 4d  4f 56 20 52 30 2c 23 30  |xit.=@.MOV R0,#0|
00006d90  0d 3d 4a 0e 2e 72 61 77  5f 65 78 69 74 32 0d 3d  |.=J..raw_exit2.=|
00006da0  54 17 53 57 49 20 22 36  35 30 32 5f 47 65 74 6b  |T.SWI "6502_Getk|
00006db0  64 61 74 61 22 0d 3d 5e  0d 2e 72 61 77 5f 65 78  |data".=^..raw_ex|
00006dc0  69 74 0d 3d 68 17 53 54  52 20 74 69 6d 65 2c 5b  |it.=h.STR time,[|
00006dd0  6d 65 6d 2c 23 6d 69 6e  5d 0d 3d 72 12 53 54 52  |mem,#min].=r.STR|
00006de0  20 41 2c 5b 6d 65 6d 2c  23 61 5d 0d 3d 7c 12 53  | A,[mem,#a].=|.S|
00006df0  54 52 20 58 2c 5b 6d 65  6d 2c 23 78 5d 0d 3d 86  |TR X,[mem,#x].=.|
00006e00  12 53 54 52 20 59 2c 5b  6d 65 6d 2c 23 79 5d 0d  |.STR Y,[mem,#y].|
00006e10  3d 90 14 53 54 52 20 53  50 2c 5b 6d 65 6d 2c 23  |=..STR SP,[mem,#|
00006e20  73 70 5d 0d 3d 9a 12 53  54 52 20 46 2c 5b 6d 65  |sp].=..STR F,[me|
00006e30  6d 2c 23 66 5d 0d 3d a4  1b 53 54 52 20 7a 70 63  |m,#f].=..STR zpc|
00006e40  2c 5b 6d 65 6d 2c 23 70  63 5f 73 74 6f 72 65 5d  |,[mem,#pc_store]|
00006e50  0d 3d ae 17 4c 44 52 20  52 31 33 2c 72 65 74 75  |.=..LDR R13,retu|
00006e60  72 6e 5f 61 64 64 72 0d  3d b8 1a 4c 44 4d 46 44  |rn_addr.=..LDMFD|
00006e70  20 52 31 33 21 2c 7b 52  31 2d 52 31 32 2c 50 43  | R13!,{R1-R12,PC|
00006e80  7d 0d 3d c2 0f 3b 4d 4f  56 20 50 43 2c 52 31 34  |}.=..;MOV PC,R14|
00006e90  0d 3d cc 04 0d 3d d6 04  0d 3d e0 0e 2e 66 65 30  |.=...=...=...fe0|
00006ea0  38 5f 72 65 61 64 0d 3d  ea 0a 45 51 55 42 20 30  |8_read.=..EQUB 0|
00006eb0  0d 3d f4 0f 2e 66 65 30  38 5f 77 72 69 74 65 0d  |.=...fe08_write.|
00006ec0  3d fe 0a 45 51 55 42 20  30 0d 3e 08 09 2e 66 65  |=..EQUB 0.>...fe|
00006ed0  30 39 0d 3e 12 0a 45 51  55 42 20 30 0d 3e 1c 0a  |09.>..EQUB 0.>..|
00006ee0  3b 2e 66 65 31 30 0d 3e  26 0b 3b 45 51 55 42 20  |;.fe10.>&.;EQUB |
00006ef0  30 0d 3e 30 09 41 4c 49  47 4e 0d 3e 3a 0c 2e 74  |0.>0.ALIGN.>:..t|
00006f00  62 75 66 66 65 72 0d 3e  44 0a 45 51 55 44 20 30  |buffer.>D.EQUD 0|
00006f10  0d 3e 4e 04 0d 3e 58 0f  2e 74 61 70 65 5f 66 65  |.>N..>X..tape_fe|
00006f20  74 63 68 0d 3e 62 18 3b  4c 44 52 20 52 30 2c 5b  |tch.>b.;LDR R0,[|
00006f30  6d 65 6d 2c 23 74 61 70  65 52 5d 0d 3e 6c 30 3b  |mem,#tapeR].>l0;|
00006f40  4d 4f 56 20 52 30 2c 23  26 33 34 30 30 20 3b 20  |MOV R0,#&3400 ; |
00006f50  32 30 30 30 30 30 30 2f  28 31 32 30 30 2f 38 29  |2000000/(1200/8)|
00006f60  7e 3d 31 32 30 30 20 62  61 75 64 0d 3e 76 11 4d  |~=1200 baud.>v.M|
00006f70  4f 56 20 52 30 2c 23 26  36 30 30 30 0d 3e 80 11  |OV R0,#&6000.>..|
00006f80  41 44 44 53 20 52 31 2c  52 31 2c 52 30 0d 3e 8a  |ADDS R1,R1,R0.>.|
00006f90  13 4d 4f 56 4c 45 20 52  31 2c 23 26 36 30 30 30  |.MOVLE R1,#&6000|
00006fa0  0d 3e 94 04 0d 3e 9e 17  4c 44 52 42 20 52 30 2c  |.>...>..LDRB R0,|
00006fb0  5b 6d 65 6d 2c 23 66 65  31 30 5d 0d 3e a8 1f 54  |[mem,#fe10].>..T|
00006fc0  53 54 20 52 30 2c 23 26  38 30 20 3b 20 69 73 20  |ST R0,#&80 ; is |
00006fd0  2a 4d 6f 74 6f 72 20 6f  6e 3f 0d 3e b2 12 ec 51  |*Motor on?.>...Q|
00006fe0  20 52 31 2c 23 26 31 30  30 30 30 30 0d 3e bc 04  | R1,#&100000.>..|
00006ff0  0d 3e c6 1c 53 54 52 20  52 31 2c 5b 6d 65 6d 2c  |.>..STR R1,[mem,|
00007000  23 74 61 70 65 5f 63 6f  75 6e 74 5d 0d 3e d0 04  |#tape_count].>..|
00007010  0d 3e da 0d ec 51 20 50  43 2c 52 31 34 0d 3e e4  |.>...Q PC,R14.>.|
00007020  04 0d 3e ee 1e 4c 44 52  42 20 52 31 2c 5b 6d 65  |..>..LDRB R1,[me|
00007030  6d 2c 23 74 61 70 65 5f  68 61 6e 64 6c 65 5d 0d  |m,#tape_handle].|
00007040  3e f8 0d 43 4d 50 20 52  31 2c 23 30 0d 3f 02 0d  |>..CMP R1,#0.?..|
00007050  ec 51 20 50 43 2c 52 31  34 0d 3f 0c 04 0d 3f 16  |.Q PC,R14.?...?.|
00007060  0d 2e 74 61 70 65 5f 67  65 74 0d 3f 20 12 53 57  |..tape_get.? .SW|
00007070  49 20 22 58 4f 53 5f 42  47 65 74 22 0d 3f 2a 0f  |I "XOS_BGet".?*.|
00007080  4d 4f 56 56 53 20 52 31  2c 23 30 0d 3f 34 20 53  |MOVVS R1,#0.?4 S|
00007090  54 52 56 53 42 20 52 31  2c 5b 6d 65 6d 2c 23 74  |TRVSB R1,[mem,#t|
000070a0  61 70 65 5f 68 61 6e 64  6c 65 5d 0d 3f 3e 10 4d  |ape_handle].?>.M|
000070b0  4f 56 56 53 20 50 43 2c  52 31 34 0d 3f 48 04 0d  |OVVS PC,R14.?H..|
000070c0  3f 52 13 42 43 43 20 74  61 70 65 5f 73 6b 69 70  |?R.BCC tape_skip|
000070d0  31 30 0d 3f 5c 04 0d 3f  66 0d 4d 4f 56 20 52 30  |10.?\..?f.MOV R0|
000070e0  2c 23 31 0d 3f 70 0d 4d  4f 56 20 52 32 2c 23 30  |,#1.?p.MOV R2,#0|
000070f0  0d 3f 7a 29 53 57 49 20  22 58 4f 53 5f 41 72 67  |.?z)SWI "XOS_Arg|
00007100  73 22 20 3b 20 72 65 77  69 6e 64 20 74 61 70 65  |s" ; rewind tape|
00007110  20 74 6f 20 73 74 61 72  74 0d 3f 84 0f 4d 4f 56  | to start.?..MOV|
00007120  56 53 20 52 31 2c 23 30  0d 3f 8e 20 53 54 52 56  |VS R1,#0.?. STRV|
00007130  53 42 20 52 31 2c 5b 6d  65 6d 2c 23 74 61 70 65  |SB R1,[mem,#tape|
00007140  5f 68 61 6e 64 6c 65 5d  0d 3f 98 10 4d 4f 56 56  |_handle].?..MOVV|
00007150  53 20 50 43 2c 52 31 34  0d 3f a2 04 0d 3f ac 10  |S PC,R14.?...?..|
00007160  2e 74 61 70 65 5f 73 6b  69 70 31 30 0d 3f b6 04  |.tape_skip10.?..|
00007170  0d 3f c0 0f 43 4d 50 20  52 30 2c 23 26 46 46 0d  |.?..CMP R0,#&FF.|
00007180  3f ca 0e 42 4e 45 20 6e  6f 74 5f 46 46 0d 3f d4  |?..BNE not_FF.?.|
00007190  14 53 57 49 45 51 20 22  58 4f 53 5f 42 47 65 74  |.SWIEQ "XOS_BGet|
000071a0  22 0d 3f de 0f 43 4d 50  20 52 30 2c 23 26 46 46  |".?..CMP R0,#&FF|
000071b0  0d 3f e8 0e 42 45 51 20  6e 6f 74 5f 46 46 0d 3f  |.?..BEQ not_FF.?|
000071c0  f2 04 0d 3f fc 15 4c 44  52 42 20 52 31 2c 66 65  |...?..LDRB R1,fe|
000071d0  30 38 5f 72 65 61 64 0d  40 06 13 42 49 43 20 52  |08_read.@..BIC R|
000071e0  31 2c 52 31 2c 23 25 31  30 30 0d 40 10 11 80 20  |1,R1,#%100.@... |
000071f0  52 30 2c 52 30 2c 23 25  31 30 30 0d 40 1a 0f 84  |R0,R0,#%100.@...|
00007200  52 20 52 31 2c 52 31 2c  52 30 0d 40 24 17 3b 84  |R R1,R1,R0.@$.;.|
00007210  52 20 52 31 2c 52 31 2c  23 26 38 30 20 3b 20 3f  |R R1,R1,#&80 ; ?|
00007220  3f 0d 40 2e 15 53 54 52  42 20 52 31 2c 66 65 30  |?.@..STRB R1,fe0|
00007230  38 5f 72 65 61 64 0d 40  38 04 0d 40 42 0d 43 4d  |8_read.@8..@B.CM|
00007240  50 20 52 30 2c 23 30 0d  40 4c 04 0d 40 56 13 3b  |P R0,#0.@L..@V.;|
00007250  4d 4f 56 20 52 30 2c 23  26 31 30 30 30 30 0d 40  |MOV R0,#&10000.@|
00007260  60 1d 3b 53 54 52 20 52  30 2c 5b 6d 65 6d 2c 23  |`.;STR R0,[mem,#|
00007270  74 61 70 65 5f 63 6f 75  6e 74 5d 0d 40 6a 04 0d  |tape_count].@j..|
00007280  40 74 13 3b 42 20 64 6f  5f 69 6e 74 65 72 72 75  |@t.;B do_interru|
00007290  70 74 0d 40 7e 0d ec 51  20 50 43 2c 52 31 34 0d  |pt.@~..Q PC,R14.|
000072a0  40 88 04 0d 40 92 11 84  52 20 52 31 2c 52 31 2c  |@...@...R R1,R1,|
000072b0  23 26 38 30 0d 40 9c 15  53 54 52 42 20 52 31 2c  |#&80.@..STRB R1,|
000072c0  66 65 30 38 5f 72 65 61  64 0d 40 a6 12 42 20 64  |fe08_read.@..B d|
000072d0  6f 5f 69 6e 74 65 72 72  75 70 74 0d 40 b0 04 0d  |o_interrupt.@...|
000072e0  40 ba 0b 2e 6e 6f 74 5f  46 46 0d 40 c4 10 53 54  |@...not_FF.@..ST|
000072f0  52 42 20 52 30 2c 66 65  30 39 0d 40 ce 04 0d 40  |RB R0,fe09.@...@|
00007300  d8 04 0d 40 e2 16 4c 44  52 42 20 52 30 2c 66 65  |...@..LDRB R0,fe|
00007310  30 38 5f 77 72 69 74 65  0d 40 ec 2e 54 53 54 20  |08_write.@..TST |
00007320  52 30 2c 23 26 38 30 20  3b 20 72 65 63 65 69 76  |R0,#&80 ; receiv|
00007330  65 20 69 6e 74 65 72 72  75 70 74 20 65 6e 61 62  |e interrupt enab|
00007340  6c 65 20 62 69 74 0d 40  f6 0d ec 51 20 50 43 2c  |le bit.@...Q PC,|
00007350  52 31 34 0d 41 00 04 0d  41 0a 15 4c 44 52 42 20  |R14.A...A..LDRB |
00007360  52 30 2c 66 65 30 38 5f  72 65 61 64 0d 41 14 11  |R0,fe08_read.A..|
00007370  84 52 20 52 30 2c 52 30  2c 23 26 38 31 0d 41 1e  |.R R0,R0,#&81.A.|
00007380  15 53 54 52 42 20 52 30  2c 66 65 30 38 5f 72 65  |.STRB R0,fe08_re|
00007390  61 64 0d 41 28 04 0d 41  32 12 42 20 64 6f 5f 69  |ad.A(..A2.B do_i|
000073a0  6e 74 65 72 72 75 70 74  0d 41 3c 0f 3b 4d 4f 56  |nterrupt.A<.;MOV|
000073b0  20 50 43 2c 52 31 34 0d  41 46 04 0d 41 50 0d 2e  | PC,R14.AF..AP..|
000073c0  72 65 61 64 46 45 30 38  0d 41 5a 14 3b 4c 44 52  |readFE08.AZ.;LDR|
000073d0  42 20 52 31 2c 74 62 75  66 66 65 72 0d 41 64 17  |B R1,tbuffer.Ad.|
000073e0  3b 4c 44 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 26  |;LDRB R0,[mem,#&|
000073f0  43 32 5d 0d 41 6e 0e 3b  43 4d 50 20 52 30 2c 23  |C2].An.;CMP R0,#|
00007400  31 0d 41 78 15 4c 44 52  42 20 52 30 2c 66 65 30  |1.Ax.LDRB R0,fe0|
00007410  38 5f 72 65 61 64 0d 41  82 13 3b 43 4d 50 45 51  |8_read.A..;CMPEQ|
00007420  20 52 31 2c 23 97 22 2a  22 0d 41 8c 15 3b 84 52  | R1,#."*".A..;.R|
00007430  45 51 20 52 30 2c 52 30  2c 23 25 31 30 30 0d 41  |EQ R0,R0,#%100.A|
00007440  96 16 3b 42 49 43 4e 45  20 52 30 2c 52 30 2c 23  |..;BICNE R0,R0,#|
00007450  25 31 30 30 0d 41 a0 0e  4d 4f 56 20 50 43 2c 52  |%100.A..MOV PC,R|
00007460  31 34 0d 41 aa 04 0d 41  b4 0d 2e 72 65 61 64 46  |14.A...A...readF|
00007470  45 30 39 0d 41 be 15 4c  44 52 42 20 52 30 2c 66  |E09.A..LDRB R0,f|
00007480  65 30 38 5f 72 65 61 64  0d 41 c8 12 42 49 43 20  |e08_read.A..BIC |
00007490  52 30 2c 52 30 2c 23 26  38 31 0d 41 d2 15 53 54  |R0,R0,#&81.A..ST|
000074a0  52 42 20 52 30 2c 66 65  30 38 5f 72 65 61 64 0d  |RB R0,fe08_read.|
000074b0  41 dc 10 4c 44 52 42 20  52 30 2c 66 65 30 39 0d  |A..LDRB R0,fe09.|
000074c0  41 e6 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 41 f0  |A..MOV PC,R14.A.|
000074d0  04 0d 41 fa 0e 2e 77 72  69 74 65 46 45 30 38 0d  |..A...writeFE08.|
000074e0  42 04 16 53 54 52 42 20  52 30 2c 66 65 30 38 5f  |B..STRB R0,fe08_|
000074f0  77 72 69 74 65 0d 42 0e  0e 4d 4f 56 20 50 43 2c  |write.B..MOV PC,|
00007500  52 31 34 0d 42 18 04 0d  42 22 0e 2e 77 72 69 74  |R14.B...B"..writ|
00007510  65 46 45 30 39 0d 42 2c  0e 4d 4f 56 20 50 43 2c  |eFE09.B,.MOV PC,|
00007520  52 31 34 0d 42 36 04 0d  42 40 0d 2e 72 65 61 64  |R14.B6..B@..read|
00007530  46 45 31 30 0d 42 4a 0f  4d 4f 56 20 52 30 2c 23  |FE10.BJ.MOV R0,#|
00007540  26 41 32 0d 42 54 0e 4d  4f 56 20 50 43 2c 52 31  |&A2.BT.MOV PC,R1|
00007550  34 0d 42 5e 04 0d 42 68  0e 2e 77 72 69 74 65 46  |4.B^..Bh..writeF|
00007560  45 31 30 0d 42 72 17 53  54 52 42 20 52 30 2c 5b  |E10.Br.STRB R0,[|
00007570  6d 65 6d 2c 23 66 65 31  30 5d 0d 42 7c 0e 4d 4f  |mem,#fe10].B|.MO|
00007580  56 20 50 43 2c 52 31 34  0d 42 86 04 0d 42 90 0a  |V PC,R14.B...B..|
00007590  2e 64 75 6d 6d 79 0d 42  9a 0e 4d 4f 56 20 50 43  |.dummy.B..MOV PC|
000075a0  2c 52 31 34 0d 42 a4 04  0d 42 ae 0c 3b 2e 52 4f  |,R14.B...B..;.RO|
000075b0  4d 53 45 4c 0d 42 b8 0b  3b 45 51 55 44 20 30 0d  |MSEL.B..;EQUD 0.|
000075c0  42 c2 04 0d 42 cc 18 3b  2e 72 6f 6d 20 3b 20 52  |B...B..;.rom ; R|
000075d0  4f 4d 20 70 61 67 65 64  20 69 6e 0d 42 d6 0b 3b  |OM paged in.B..;|
000075e0  45 51 55 44 20 30 0d 42  e0 04 0d 42 ea 23 3b 2e  |EQUD 0.B...B.#;.|
000075f0  52 4f 4d 52 41 4d 20 3b  20 77 68 69 63 68 20 62  |ROMRAM ; which b|
00007600  61 6e 6b 73 20 61 72 65  20 52 41 4d 3f 0d 42 f4  |anks are RAM?.B.|
00007610  29 3b 45 51 55 44 20 30  20 3a 20 3b 45 51 55 44  |);EQUD 0 : ;EQUD|
00007620  20 30 20 3a 20 3b 45 51  55 44 20 30 20 3a 20 3b  | 0 : ;EQUD 0 : ;|
00007630  45 51 55 44 20 30 0d 42  fe 04 0d 43 08 0c 3b 2e  |EQUD 0.B...C..;.|
00007640  41 43 43 43 4f 4e 0d 43  12 0b 3b 45 51 55 44 20  |ACCCON.C..;EQUD |
00007650  30 0d 43 1c 04 0d 43 26  04 0d 43 30 15 2e 73 77  |0.C...C&..C0..sw|
00007660  61 70 5f 6d 61 69 6e 5f  73 68 61 64 6f 77 0d 43  |ap_main_shadow.C|
00007670  3a 04 0d 43 44 20 53 54  4d 46 44 20 6d 65 6d 2c  |:..CD STMFD mem,|
00007680  7b 52 30 2d 52 32 2c 52  34 2d 52 31 31 2c 52 31  |{R0-R2,R4-R11,R1|
00007690  34 7d 0d 43 4e 16 41 44  44 20 52 31 34 2c 6d 65  |4}.CN.ADD R14,me|
000076a0  6d 2c 23 26 33 30 30 30  0d 43 58 17 53 55 42 20  |m,#&3000.CX.SUB |
000076b0  52 31 33 2c 6d 65 6d 2c  23 26 31 30 30 30 30 0d  |R13,mem,#&10000.|
000076c0  43 62 12 4d 4f 56 20 52  31 32 2c 23 26 35 30 30  |Cb.MOV R12,#&500|
000076d0  30 0d 43 6c 0e 2e 73 77  61 70 5f 6c 6f 6f 70 0d  |0.Cl..swap_loop.|
000076e0  43 76 1b 4c 44 4d 49 41  20 52 31 34 2c 7b 52 30  |Cv.LDMIA R14,{R0|
000076f0  2d 52 32 2c 52 34 2d 52  35 7d 0d 43 80 14 3b 4c  |-R2,R4-R5}.C..;L|
00007700  44 52 20 52 30 2c 5b 52  31 34 2c 23 30 5d 0d 43  |DR R0,[R14,#0].C|
00007710  8a 14 3b 4c 44 52 20 52  31 2c 5b 52 31 34 2c 23  |..;LDR R1,[R14,#|
00007720  34 5d 0d 43 94 14 3b 4c  44 52 20 52 32 2c 5b 52  |4].C..;LDR R2,[R|
00007730  31 34 2c 23 38 5d 0d 43  9e 15 3b 4c 44 52 20 52  |14,#8].C..;LDR R|
00007740  34 2c 5b 52 31 34 2c 23  31 32 5d 0d 43 a8 15 3b  |4,[R14,#12].C..;|
00007750  4c 44 52 20 52 35 2c 5b  52 31 34 2c 23 31 36 5d  |LDR R5,[R14,#16]|
00007760  0d 43 b2 04 0d 43 bc 16  4c 44 4d 49 41 20 52 31  |.C...C..LDMIA R1|
00007770  33 2c 7b 52 36 2d 52 31  30 7d 0d 43 c6 14 3b 4c  |3,{R6-R10}.C..;L|
00007780  44 52 20 52 36 2c 5b 52  31 33 2c 23 30 5d 0d 43  |DR R6,[R13,#0].C|
00007790  d0 14 3b 4c 44 52 20 52  37 2c 5b 52 31 33 2c 23  |..;LDR R7,[R13,#|
000077a0  34 5d 0d 43 da 14 3b 4c  44 52 20 52 38 2c 5b 52  |4].C..;LDR R8,[R|
000077b0  31 33 2c 23 38 5d 0d 43  e4 15 3b 4c 44 52 20 52  |13,#8].C..;LDR R|
000077c0  39 2c 5b 52 31 33 2c 23  31 32 5d 0d 43 ee 16 3b  |9,[R13,#12].C..;|
000077d0  4c 44 52 20 52 31 30 2c  5b 52 31 33 2c 23 31 36  |LDR R10,[R13,#16|
000077e0  5d 0d 43 f8 04 0d 44 02  1c 53 54 4d 49 41 20 52  |].C...D..STMIA R|
000077f0  31 33 21 2c 7b 52 30 2d  52 32 2c 52 34 2d 52 35  |13!,{R0-R2,R4-R5|
00007800  7d 0d 44 0c 14 3b 53 54  52 20 52 30 2c 5b 52 31  |}.D..;STR R0,[R1|
00007810  33 2c 23 30 5d 0d 44 16  14 3b 53 54 52 20 52 31  |3,#0].D..;STR R1|
00007820  2c 5b 52 31 33 2c 23 34  5d 0d 44 20 14 3b 53 54  |,[R13,#4].D .;ST|
00007830  52 20 52 32 2c 5b 52 31  33 2c 23 38 5d 0d 44 2a  |R R2,[R13,#8].D*|
00007840  15 3b 53 54 52 20 52 34  2c 5b 52 31 33 2c 23 31  |.;STR R4,[R13,#1|
00007850  32 5d 0d 44 34 15 3b 53  54 52 20 52 35 2c 5b 52  |2].D4.;STR R5,[R|
00007860  31 33 2c 23 31 36 5d 0d  44 3e 04 0d 44 48 17 53  |13,#16].D>..DH.S|
00007870  54 4d 49 41 20 52 31 34  21 2c 7b 52 36 2d 52 31  |TMIA R14!,{R6-R1|
00007880  30 7d 0d 44 52 14 3b 53  54 52 20 52 36 2c 5b 52  |0}.DR.;STR R6,[R|
00007890  31 34 2c 23 30 5d 0d 44  5c 14 3b 53 54 52 20 52  |14,#0].D\.;STR R|
000078a0  37 2c 5b 52 31 34 2c 23  34 5d 0d 44 66 14 3b 53  |7,[R14,#4].Df.;S|
000078b0  54 52 20 52 38 2c 5b 52  31 34 2c 23 38 5d 0d 44  |TR R8,[R14,#8].D|
000078c0  70 15 3b 53 54 52 20 52  39 2c 5b 52 31 34 2c 23  |p.;STR R9,[R14,#|
000078d0  31 32 5d 0d 44 7a 16 3b  53 54 52 20 52 31 30 2c  |12].Dz.;STR R10,|
000078e0  5b 52 31 34 2c 23 31 36  5d 0d 44 84 04 0d 44 8e  |[R14,#16].D...D.|
000078f0  14 3b 41 44 44 20 52 31  34 2c 52 31 34 2c 23 32  |.;ADD R14,R14,#2|
00007900  30 0d 44 98 14 3b 41 44  44 20 52 31 33 2c 52 31  |0.D..;ADD R13,R1|
00007910  33 2c 23 32 30 0d 44 a2  14 53 55 42 53 20 52 31  |3,#20.D..SUBS R1|
00007920  32 2c 52 31 32 2c 23 32  30 0d 44 ac 11 42 48 49  |2,R12,#20.D..BHI|
00007930  20 73 77 61 70 5f 6c 6f  6f 70 0d 44 b6 04 0d 44  | swap_loop.D...D|
00007940  c0 20 4c 44 4d 45 41 20  6d 65 6d 2c 7b 52 30 2d  |. LDMEA mem,{R0-|
00007950  52 32 2c 52 34 2d 52 31  31 2c 52 31 34 7d 0d 44  |R2,R4-R11,R14}.D|
00007960  ca 0f 42 20 73 77 61 70  5f 65 78 69 74 0d 44 d4  |..B swap_exit.D.|
00007970  04 0d 44 de 04 0d 44 e8  28 2e 73 74 72 62 5f 72  |..D...D.(.strb_r|
00007980  6f 6d 5f 72 65 74 32 20  3b 20 62 65 74 77 65 65  |om_ret2 ; betwee|
00007990  6e 20 43 30 30 30 20 80  20 45 30 30 30 0d 44 f2  |n C000 . E000.D.|
000079a0  19 4c 44 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 41  |.LDRB R2,[mem,#A|
000079b0  43 43 43 4f 4e 5d 0d 44  fc 11 54 53 54 20 52 32  |CCCON].D..TST R2|
000079c0  2c 23 25 31 30 30 30 0d  45 06 21 3b 53 55 42 4e  |,#%1000.E.!;SUBN|
000079d0  45 20 52 31 33 2c 6d 65  6d 2c 23 28 26 43 30 30  |E R13,mem,#(&C00|
000079e0  30 2b 26 41 30 30 30 29  0d 45 10 17 3b 53 54 52  |0+&A000).E..;STR|
000079f0  4e 45 42 20 52 30 2c 5b  52 31 33 2c 52 31 5d 0d  |NEB R0,[R13,R1].|
00007a00  45 1a 16 53 54 52 4e 45  42 20 52 30 2c 5b 6d 65  |E..STRNEB R0,[me|
00007a10  6d 2c 52 31 5d 0d 45 24  0e 4d 4f 56 20 50 43 2c  |m,R1].E$.MOV PC,|
00007a20  52 31 34 0d 45 2e 04 0d  45 38 0b 2e 61 63 63 63  |R14.E...E8..accc|
00007a30  6f 6e 0d 45 42 05 5d 0d  45 4c 22 e7 20 ac 6d 61  |on.EB.].EL". .ma|
00007a40  73 74 65 72 20 8c 20 5b  4f 50 54 70 3a 4d 4f 56  |ster . [OPTp:MOV|
00007a50  20 50 43 2c 52 31 34 3a  5d 0d 45 56 09 5b 4f 50  | PC,R14:].EV.[OP|
00007a60  54 70 0d 45 60 19 4c 44  52 42 20 52 31 2c 5b 6d  |Tp.E`.LDRB R1,[m|
00007a70  65 6d 2c 23 41 43 43 43  4f 4e 5d 0d 45 6a 19 53  |em,#ACCCON].Ej.S|
00007a80  54 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 41 43 43  |TRB R0,[mem,#ACC|
00007a90  43 4f 4e 5d 0d 45 74 0e  82 20 52 32 2c 52 30 2c  |CON].Et.. R2,R0,|
00007aa0  52 31 0d 45 7e 04 0d 45  88 2c 54 53 54 20 52 32  |R1.E~..E.,TST R2|
00007ab0  2c 23 25 31 20 3b 20 6d  61 69 6e 2f 73 68 61 64  |,#%1 ; main/shad|
00007ac0  6f 77 20 74 6f 20 62 65  20 64 69 73 70 6c 61 79  |ow to be display|
00007ad0  65 64 0d 45 92 1c 53 54  52 4e 45 42 20 52 31 32  |ed.E..STRNEB R12|
00007ae0  2c 5b 6d 65 6d 2c 23 74  61 6d 70 65 72 5d 0d 45  |,[mem,#tamper].E|
00007af0  9c 04 0d 45 a6 0f 3b 4d  4f 56 20 50 43 2c 52 31  |...E..;MOV PC,R1|
00007b00  34 0d 45 b0 04 0d 45 ba  2e 3b 54 53 54 20 52 32  |4.E...E..;TST R2|
00007b10  2c 23 25 31 30 30 20 3b  20 6d 61 69 6e 2f 73 68  |,#%100 ; main/sh|
00007b20  61 64 6f 77 20 74 6f 20  62 65 20 70 61 67 65 64  |adow to be paged|
00007b30  20 69 6e 0d 45 c4 19 3b  42 4e 45 20 73 77 61 70  | in.E..;BNE swap|
00007b40  5f 6d 61 69 6e 5f 73 68  61 64 6f 77 0d 45 ce 0e  |_main_shadow.E..|
00007b50  2e 73 77 61 70 5f 65 78  69 74 0d 45 d8 04 0d 45  |.swap_exit.E...E|
00007b60  e2 27 80 53 20 52 32 2c  52 32 2c 23 25 31 30 30  |.'.S R2,R2,#%100|
00007b70  30 20 3b 20 66 69 6c 69  6e 67 20 73 79 73 74 65  |0 ; filing syste|
00007b80  6d 20 52 41 4d 0d 45 ec  0d ec 51 20 50 43 2c 52  |m RAM.E...Q PC,R|
00007b90  31 34 0d 45 f6 04 0d 46  00 1f 53 54 4d 46 44 20  |14.E...F..STMFD |
00007ba0  6d 65 6d 2c 7b 52 30 2d  52 32 2c 52 34 2d 52 39  |mem,{R0-R2,R4-R9|
00007bb0  2c 52 31 34 7d 0d 46 0a  04 0d 46 14 11 54 53 54  |,R14}.F...F..TST|
00007bc0  20 52 31 2c 23 25 31 30  30 30 0d 46 1e 0e 42 45  | R1,#%1000.F..BE|
00007bd0  51 20 6f 73 5f 6f 75 74  0d 46 28 0e 3b 42 4e 45  |Q os_out.F(.;BNE|
00007be0  20 6f 73 5f 69 6e 0d 46  32 04 0d 46 3c 10 2e 6f  | os_in.F2..F<..o|
00007bf0  73 5f 69 6e 20 3b 20 52  4a 57 0d 46 46 15 4c 44  |s_in ; RJW.FF.LD|
00007c00  52 20 52 31 32 2c 72 6f  6d 73 5f 61 64 64 72 0d  |R R12,roms_addr.|
00007c10  46 50 2e 41 44 44 20 52  31 32 2c 52 31 32 2c 23  |FP.ADD R12,R12,#|
00007c20  31 36 2a 31 36 2a 31 30  32 34 20 3b 20 31 37 74  |16*16*1024 ; 17t|
00007c30  68 20 52 4f 4d 20 3d 20  4f 53 33 2e 32 0d 46 5a  |h ROM = OS3.2.FZ|
00007c40  12 4d 4f 56 20 52 31 33  2c 23 26 32 30 30 30 0d  |.MOV R13,#&2000.|
00007c50  46 64 15 53 55 42 20 52  32 2c 6d 65 6d 2c 23 26  |Fd.SUB R2,mem,#&|
00007c60  42 30 30 30 0d 46 6e 16  41 44 44 20 6d 65 6d 2c  |B000.Fn.ADD mem,|
00007c70  6d 65 6d 2c 23 26 43 30  30 30 0d 46 78 0f 2e 6f  |mem,#&C000.Fx..o|
00007c80  73 5f 69 6e 5f 6c 6f 6f  70 0d 46 82 28 4c 44 4d  |s_in_loop.F.(LDM|
00007c90  49 41 20 6d 65 6d 2c 20  7b 52 30 2c 52 31 2c 52  |IA mem, {R0,R1,R|
00007ca0  34 2c 52 35 2c 52 36 2c  52 37 2c 52 38 2c 52 39  |4,R5,R6,R7,R8,R9|
00007cb0  7d 0d 46 8c 28 53 54 4d  49 41 20 52 32 21 2c 20  |}.F.(STMIA R2!, |
00007cc0  7b 52 30 2c 52 31 2c 52  34 2c 52 35 2c 52 36 2c  |{R0,R1,R4,R5,R6,|
00007cd0  52 37 2c 52 38 2c 52 39  7d 0d 46 96 28 4c 44 4d  |R7,R8,R9}.F.(LDM|
00007ce0  49 41 20 52 31 32 21 2c  7b 52 30 2c 52 31 2c 52  |IA R12!,{R0,R1,R|
00007cf0  34 2c 52 35 2c 52 36 2c  52 37 2c 52 38 2c 52 39  |4,R5,R6,R7,R8,R9|
00007d00  7d 0d 46 a0 2a 53 54 4d  49 41 20 28 6d 65 6d 29  |}.F.*STMIA (mem)|
00007d10  21 2c 7b 52 30 2c 52 31  2c 52 34 2c 52 35 2c 52  |!,{R0,R1,R4,R5,R|
00007d20  36 2c 52 37 2c 52 38 2c  52 39 7d 0d 46 aa 15 53  |6,R7,R8,R9}.F..S|
00007d30  55 42 53 20 52 31 33 2c  52 31 33 2c 23 34 2a 38  |UBS R13,R13,#4*8|
00007d40  0d 46 b4 12 42 47 54 20  6f 73 5f 69 6e 5f 6c 6f  |.F..BGT os_in_lo|
00007d50  6f 70 0d 46 be 16 53 55  42 20 6d 65 6d 2c 6d 65  |op.F..SUB mem,me|
00007d60  6d 2c 23 26 45 30 30 30  0d 46 c8 1e 4c 44 4d 45  |m,#&E000.F..LDME|
00007d70  41 20 6d 65 6d 2c 7b 52  30 2d 52 32 2c 52 34 2d  |A mem,{R0-R2,R4-|
00007d80  52 39 2c 50 43 7d 0d 46  d2 04 0d 46 dc 11 2e 6f  |R9,PC}.F...F...o|
00007d90  73 5f 6f 75 74 20 3b 20  52 4a 57 0d 46 e6 12 4d  |s_out ; RJW.F..M|
00007da0  4f 56 20 52 31 33 2c 23  26 32 30 30 30 0d 46 f0  |OV R13,#&2000.F.|
00007db0  15 53 55 42 20 52 32 2c  6d 65 6d 2c 23 26 42 30  |.SUB R2,mem,#&B0|
00007dc0  30 30 0d 46 fa 16 41 44  44 20 6d 65 6d 2c 6d 65  |00.F..ADD mem,me|
00007dd0  6d 2c 23 26 43 30 30 30  0d 47 04 10 2e 6f 73 5f  |m,#&C000.G...os_|
00007de0  6f 75 74 5f 6c 6f 6f 70  0d 47 0e 27 4c 44 4d 49  |out_loop.G.'LDMI|
00007df0  41 20 52 32 21 2c 7b 52  30 2c 52 31 2c 52 34 2c  |A R2!,{R0,R1,R4,|
00007e00  52 35 2c 52 36 2c 52 37  2c 52 38 2c 52 39 7d 0d  |R5,R6,R7,R8,R9}.|
00007e10  47 18 2a 53 54 4d 49 41  20 28 6d 65 6d 29 21 2c  |G.*STMIA (mem)!,|
00007e20  7b 52 30 2c 52 31 2c 52  34 2c 52 35 2c 52 36 2c  |{R0,R1,R4,R5,R6,|
00007e30  52 37 2c 52 38 2c 52 39  7d 0d 47 22 15 53 55 42  |R7,R8,R9}.G".SUB|
00007e40  53 20 52 31 33 2c 52 31  33 2c 23 34 2a 38 0d 47  |S R13,R13,#4*8.G|
00007e50  2c 13 42 47 54 20 6f 73  5f 6f 75 74 5f 6c 6f 6f  |,.BGT os_out_loo|
00007e60  70 0d 47 36 16 53 55 42  20 6d 65 6d 2c 6d 65 6d  |p.G6.SUB mem,mem|
00007e70  2c 23 26 45 30 30 30 0d  47 40 1e 4c 44 4d 45 41  |,#&E000.G@.LDMEA|
00007e80  20 6d 65 6d 2c 7b 52 30  2d 52 32 2c 52 34 2d 52  | mem,{R0-R2,R4-R|
00007e90  39 2c 50 43 7d 0d 47 4a  04 0d 47 54 26 2e 73 74  |9,PC}.GJ..GT&.st|
00007ea0  72 62 38 30 30 30 20 20  20 20 20 20 3b 20 67 72  |rb8000      ; gr|
00007eb0  65 61 74 65 72 20 74 68  61 6e 20 38 30 30 30 0d  |eater than 8000.|
00007ec0  47 5e 05 5d 0d 47 68 0e  e7 20 6d 61 73 74 65 72  |G^.].Gh.. master|
00007ed0  20 8c 0d 47 72 09 5b 4f  50 54 70 0d 47 7c 11 43  | ..Gr.[OPTp.G|.C|
00007ee0  4d 50 20 52 31 2c 23 26  45 30 30 30 0d 47 86 14  |MP R1,#&E000.G..|
00007ef0  42 47 45 20 73 74 72 62  5f 72 6f 6d 5f 72 65 74  |BGE strb_rom_ret|
00007f00  0d 47 90 11 43 4d 50 20  52 31 2c 23 26 43 30 30  |.G..CMP R1,#&C00|
00007f10  30 0d 47 9a 15 42 47 45  20 73 74 72 62 5f 72 6f  |0.G..BGE strb_ro|
00007f20  6d 5f 72 65 74 32 0d 47  a4 11 43 4d 50 20 52 31  |m_ret2.G..CMP R1|
00007f30  2c 23 26 39 30 30 30 0d  47 ae 10 42 47 45 20 73  |,#&9000.G..BGE s|
00007f40  74 72 62 5f 72 6f 6d 0d  47 b8 05 5d 0d 47 c2 05  |trb_rom.G..].G..|
00007f50  cc 0d 47 cc 09 5b 4f 50  54 70 0d 47 d6 11 43 4d  |..G..[OPTp.G..CM|
00007f60  50 20 52 31 2c 23 26 43  30 30 30 0d 47 e0 14 42  |P R1,#&C000.G..B|
00007f70  47 45 20 73 74 72 62 5f  72 6f 6d 5f 72 65 74 0d  |GE strb_rom_ret.|
00007f80  47 ea 05 5d 0d 47 f4 05  cd 0d 47 fe 09 5b 4f 50  |G..].G....G..[OP|
00007f90  54 70 0d 48 08 04 0d 48  12 17 4c 44 52 42 20 52  |Tp.H...H..LDRB R|
00007fa0  31 32 2c 5b 6d 65 6d 2c  23 72 6f 6d 5d 0d 48 1c  |12,[mem,#rom].H.|
00007fb0  10 54 53 54 20 52 31 32  2c 23 26 38 30 0d 48 26  |.TST R12,#&80.H&|
00007fc0  10 42 45 51 20 73 74 72  62 5f 72 6f 6d 0d 48 30  |.BEQ strb_rom.H0|
00007fd0  04 0d 48 3a 30 3b 53 55  42 20 52 31 33 2c 6d 65  |..H:0;SUB R13,me|
00007fe0  6d 2c 23 28 26 38 30 30  30 2b 26 42 30 30 30 29  |m,#(&8000+&B000)|
00007ff0  20 3b 20 34 6b 20 50 72  69 76 61 74 65 20 52 41  | ; 4k Private RA|
00008000  4d 0d 48 44 15 3b 53 54  52 42 20 52 30 2c 5b 52  |M.HD.;STRB R0,[R|
00008010  31 33 2c 52 31 5d 0d 48  4e 14 53 54 52 42 20 52  |13,R1].HN.STRB R|
00008020  30 2c 5b 6d 65 6d 2c 52  31 5d 0d 48 58 0e 4d 4f  |0,[mem,R1].HX.MO|
00008030  56 20 50 43 2c 52 31 34  0d 48 62 04 0d 48 6c 0d  |V PC,R14.Hb..Hl.|
00008040  2e 73 74 72 62 5f 72 6f  6d 0d 48 76 18 53 55 42  |.strb_rom.Hv.SUB|
00008050  20 52 31 32 2c 6d 65 6d  2c 23 2d 52 4f 4d 52 41  | R12,mem,#-ROMRA|
00008060  4d 0d 48 80 17 4c 44 52  42 20 52 31 33 2c 5b 6d  |M.H..LDRB R13,[m|
00008070  65 6d 2c 23 72 6f 6d 5d  0d 48 8a 16 4c 44 52 42  |em,#rom].H..LDRB|
00008080  20 52 31 33 2c 5b 52 31  32 2c 52 31 33 5d 0d 48  | R13,[R12,R13].H|
00008090  94 0e 43 4d 50 20 52 31  33 2c 23 30 0d 48 9e 16  |..CMP R13,#0.H..|
000080a0  53 54 52 45 51 42 20 52  30 2c 5b 6d 65 6d 2c 52  |STREQB R0,[mem,R|
000080b0  31 5d 0d 48 a8 0e 4d 4f  56 20 50 43 2c 52 31 34  |1].H..MOV PC,R14|
000080c0  0d 48 b2 13 3b 42 20 73  74 72 62 5f 72 6f 6d 5f  |.H..;B strb_rom_|
000080d0  72 65 74 0d 48 bc 04 0d  48 c6 0b 2e 72 6f 6d 73  |ret.H...H...roms|
000080e0  65 6c 0d 48 d0 1d 4c 44  52 42 20 52 31 32 2c 5b  |el.H..LDRB R12,[|
000080f0  6d 65 6d 2c 23 52 4f 4d  53 45 4c 5f 4f 4e 5d 0d  |mem,#ROMSEL_ON].|
00008100  48 da 0e 43 4d 50 20 52  31 32 2c 23 30 0d 48 e4  |H..CMP R12,#0.H.|
00008110  10 4d 4f 56 4e 45 20 50  43 2c 52 31 34 0d 48 ee  |.MOVNE PC,R14.H.|
00008120  04 0d 48 f8 16 4c 44 52  42 20 52 31 2c 5b 6d 65  |..H..LDRB R1,[me|
00008130  6d 2c 23 72 6f 6d 5d 0d  49 02 04 0d 49 0c 05 5d  |m,#rom].I...I..]|
00008140  0d 49 16 0f e7 20 ac 6d  61 73 74 65 72 20 8c 0d  |.I... .master ..|
00008150  49 20 09 5b 4f 50 54 70  0d 49 2a 12 80 20 52 30  |I .[OPTp.I*.. R0|
00008160  2c 52 30 2c 23 25 31 31  31 31 0d 49 34 44 43 4d  |,R0,#%1111.I4DCM|
00008170  50 20 52 30 2c 52 31 20  3a 20 ec 51 20 50 43 2c  |P R0,R1 : .Q PC,|
00008180  52 31 34 20 3b 20 57 41  52 20 28 75 73 65 64 20  |R14 ; WAR (used |
00008190  74 6f 29 20 6e 65 65 64  20 74 68 69 73 20 63 6f  |to) need this co|
000081a0  6d 6d 65 6e 74 65 64 20  6f 75 74 21 3f 21 0d 49  |mmented out!?!.I|
000081b0  3e 11 42 20 72 6f 6d 73  65 6c 5f 6e 65 78 74 0d  |>.B romsel_next.|
000081c0  49 48 05 5d 0d 49 52 05  cd 0d 49 5c 09 5b 4f 50  |IH.].IR...I\.[OP|
000081d0  54 70 0d 49 66 04 0d 49  70 16 80 20 52 30 2c 52  |Tp.If..Ip.. R0,R|
000081e0  30 2c 23 25 31 30 30 30  31 31 31 31 0d 49 7a 04  |0,#%10001111.Iz.|
000081f0  0d 49 84 44 43 4d 50 20  52 30 2c 52 31 20 3a 20  |.I.DCMP R0,R1 : |
00008200  ec 51 20 50 43 2c 52 31  34 20 3b 20 57 41 52 20  |.Q PC,R14 ; WAR |
00008210  28 75 73 65 64 20 74 6f  29 20 6e 65 65 64 20 74  |(used to) need t|
00008220  68 69 73 20 63 6f 6d 6d  65 6e 74 65 64 20 6f 75  |his commented ou|
00008230  74 21 3f 21 0d 49 8e 04  0d 49 98 0e 82 20 52 32  |t!?!.I...I... R2|
00008240  2c 52 30 2c 52 31 0d 49  a2 29 80 53 20 52 32 2c  |,R0,R1.I.).S R2,|
00008250  52 32 2c 23 25 31 30 30  30 30 30 30 30 20 3b 20  |R2,#%10000000 ; |
00008260  70 72 69 76 61 74 65 20  52 41 4d 20 62 69 74 0d  |private RAM bit.|
00008270  49 ac 25 42 45 51 20 72  6f 6d 73 65 6c 5f 6e 65  |I.%BEQ romsel_ne|
00008280  78 74 20 3b 20 62 69 74  20 6e 6f 74 20 63 68 61  |xt ; bit not cha|
00008290  6e 67 65 64 0d 49 b6 04  0d 49 c0 15 54 53 54 20  |nged.I...I..TST |
000082a0  52 31 2c 23 25 31 30 30  30 30 30 30 30 0d 49 ca  |R1,#%10000000.I.|
000082b0  29 42 4e 45 20 70 72 69  76 61 74 65 5f 6f 75 74  |)BNE private_out|
000082c0  20 3b 20 6d 61 70 20 6f  75 74 20 70 72 69 76 61  | ; map out priva|
000082d0  74 65 20 52 41 4d 0d 49  d4 28 42 45 51 20 70 72  |te RAM.I.(BEQ pr|
000082e0  69 76 61 74 65 5f 69 6e  20 20 3b 20 6d 61 70 20  |ivate_in  ; map |
000082f0  69 6e 20 70 72 69 76 61  74 65 20 52 41 4d 0d 49  |in private RAM.I|
00008300  de 04 0d 49 e8 04 0d 49  f2 04 0d 49 fc 10 2e 72  |...I...I...I...r|
00008310  6f 6d 73 65 6c 5f 6e 65  78 74 0d 4a 06 15 4c 44  |omsel_next.J..LD|
00008320  52 20 52 31 32 2c 72 6f  6d 73 5f 61 64 64 72 0d  |R R12,roms_addr.|
00008330  4a 10 1f 80 20 52 32 2c  52 30 2c 23 26 46 20 3b  |J... R2,R0,#&F ;|
00008340  20 73 6f 63 6b 65 74 20  6e 75 6d 62 65 72 0d 4a  | socket number.J|
00008350  1a 16 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..LDRB R1,[mem,#|
00008360  72 6f 6d 5d 0d 4a 24 0f  80 20 52 31 2c 52 31 2c  |rom].J$.. R1,R1,|
00008370  23 26 46 0d 4a 2e 16 53  54 52 42 20 52 30 2c 5b  |#&F.J..STRB R0,[|
00008380  6d 65 6d 2c 23 72 6f 6d  5d 0d 4a 38 18 53 55 42  |mem,#rom].J8.SUB|
00008390  20 52 31 33 2c 6d 65 6d  2c 23 2d 52 4f 4d 52 41  | R13,mem,#-ROMRA|
000083a0  4d 0d 4a 42 15 4c 44 52  42 20 52 31 33 2c 5b 52  |M.JB.LDRB R13,[R|
000083b0  31 33 2c 52 31 5d 0d 4a  4c 31 43 4d 50 20 52 31  |13,R1].JL1CMP R1|
000083c0  33 2c 23 30 20 3b 20 69  73 20 74 68 65 20 62 61  |3,#0 ; is the ba|
000083d0  6e 6b 20 62 65 69 6e 67  20 70 61 67 65 64 20 6f  |nk being paged o|
000083e0  75 74 20 52 41 4d 3f 0d  4a 56 0f 42 4e 45 20 72  |ut RAM?.JV.BNE r|
000083f0  6f 6d 73 65 6c 32 0d 4a  60 04 0d 4a 6a 2e 54 53  |omsel2.J`..Jj.TS|
00008400  54 20 52 30 2c 23 25 31  30 30 30 30 30 30 30 20  |T R0,#%10000000 |
00008410  3b 20 70 72 69 76 61 74  65 20 52 41 4d 20 6d 61  |; private RAM ma|
00008420  70 70 65 64 20 69 6e 3f  0d 4a 74 11 ec 51 20 52  |pped in?.Jt..Q R|
00008430  31 33 2c 23 26 38 30 30  30 0d 4a 7e 14 4d 4f 56  |13,#&8000.J~.MOV|
00008440  4e 45 20 52 31 33 2c 23  26 39 30 30 30 0d 4a 88  |NE R13,#&9000.J.|
00008450  0f 80 20 52 30 2c 52 30  2c 23 26 46 0d 4a 92 04  |.. R0,R0,#&F.J..|
00008460  0d 4a 9c 18 41 44 44 20  52 32 2c 52 31 32 2c 52  |.J..ADD R2,R12,R|
00008470  31 2c 4c 53 4c 23 31 34  0d 4a a6 16 41 44 44 4e  |1,LSL#14.J..ADDN|
00008480  45 20 52 32 2c 52 32 2c  23 26 31 30 30 30 0d 4a  |E R2,R2,#&1000.J|
00008490  b0 26 41 44 44 20 52 31  32 2c 52 31 32 2c 52 30  |.&ADD R12,R12,R0|
000084a0  2c 4c 53 4c 23 31 34 20  3b 20 52 30 2a 31 36 2a  |,LSL#14 ; R0*16*|
000084b0  31 30 32 34 0d 4a ba 18  41 44 44 4e 45 20 52 31  |1024.J..ADDNE R1|
000084c0  32 2c 52 31 32 2c 23 26  31 30 30 30 0d 4a c4 1b  |2,R12,#&1000.J..|
000084d0  41 44 52 20 52 31 2c 72  6f 6d 73 65 6c 5f 6c 6f  |ADR R1,romsel_lo|
000084e0  6f 70 5f 74 65 6d 70 0d  4a ce 1b 53 54 4d 49 41  |op_temp.J..STMIA|
000084f0  20 52 31 2c 7b 52 30 2c  52 34 2d 52 38 2c 52 31  | R1,{R0,R4-R8,R1|
00008500  34 7d 0d 4a d8 13 41 44  44 20 6d 65 6d 2c 6d 65  |4}.J..ADD mem,me|
00008510  6d 2c 52 31 33 0d 4a e2  16 52 53 42 20 52 31 33  |m,R13.J..RSB R13|
00008520  2c 52 31 33 2c 23 26 43  30 30 30 0d 4a ec 10 2e  |,R13,#&C000.J...|
00008530  72 6f 6d 73 65 6c 5f 6c  6f 6f 70 0d 4a f6 28 4c  |romsel_loop.J.(L|
00008540  44 4d 49 41 20 6d 65 6d  2c 7b 52 30 2c 52 31 2c  |DMIA mem,{R0,R1,|
00008550  52 34 2c 52 35 2c 52 36  2c 52 37 2c 52 38 2c 52  |R4,R5,R6,R7,R8,R|
00008560  31 34 7d 0d 4b 00 28 53  54 4d 49 41 20 52 32 21  |14}.K.(STMIA R2!|
00008570  2c 7b 52 30 2c 52 31 2c  52 34 2c 52 35 2c 52 36  |,{R0,R1,R4,R5,R6|
00008580  2c 52 37 2c 52 38 2c 52  31 34 7d 0d 4b 0a 29 4c  |,R7,R8,R14}.K.)L|
00008590  44 4d 49 41 20 52 31 32  21 2c 7b 52 30 2c 52 31  |DMIA R12!,{R0,R1|
000085a0  2c 52 34 2c 52 35 2c 52  36 2c 52 37 2c 52 38 2c  |,R4,R5,R6,R7,R8,|
000085b0  52 31 34 7d 0d 4b 14 2b  53 54 4d 49 41 20 28 6d  |R14}.K.+STMIA (m|
000085c0  65 6d 29 21 2c 7b 52 30  2c 52 31 2c 52 34 2c 52  |em)!,{R0,R1,R4,R|
000085d0  35 2c 52 36 2c 52 37 2c  52 38 2c 52 31 34 7d 0d  |5,R6,R7,R8,R14}.|
000085e0  4b 1e 15 53 55 42 53 20  52 31 33 2c 52 31 33 2c  |K..SUBS R13,R13,|
000085f0  23 34 2a 38 0d 4b 28 13  42 4e 45 20 72 6f 6d 73  |#4*8.K(.BNE roms|
00008600  65 6c 5f 6c 6f 6f 70 0d  4b 32 16 53 55 42 20 6d  |el_loop.K2.SUB m|
00008610  65 6d 2c 6d 65 6d 2c 23  26 43 30 30 30 0d 4b 3c  |em,mem,#&C000.K<|
00008620  1b 41 44 52 20 52 31 2c  72 6f 6d 73 65 6c 5f 6c  |.ADR R1,romsel_l|
00008630  6f 6f 70 5f 74 65 6d 70  0d 4b 46 1a 4c 44 4d 49  |oop_temp.KF.LDMI|
00008640  41 20 52 31 2c 7b 52 30  2c 52 34 2d 52 38 2c 50  |A R1,{R0,R4-R8,P|
00008650  43 7d 0d 4b 50 15 2e 72  6f 6d 73 65 6c 5f 6c 6f  |C}.KP..romsel_lo|
00008660  6f 70 5f 74 65 6d 70 0d  4b 5a 1f 45 51 55 44 20  |op_temp.KZ.EQUD |
00008670  30 3a 45 51 55 44 20 30  3a 45 51 55 44 20 30 3a  |0:EQUD 0:EQUD 0:|
00008680  45 51 55 44 20 30 0d 4b  64 1f 45 51 55 44 20 30  |EQUD 0.Kd.EQUD 0|
00008690  3a 45 51 55 44 20 30 3a  45 51 55 44 20 30 3a 45  |:EQUD 0:EQUD 0:E|
000086a0  51 55 44 20 30 0d 4b 6e  04 0d 4b 78 11 2e 72 6f  |QUD 0.Kn..Kx..ro|
000086b0  6d 73 65 6c 5f 65 6d 70  74 79 0d 4b 82 17 41 44  |msel_empty.K..AD|
000086c0  44 20 52 31 33 2c 52 32  2c 52 32 2c 4c 53 4c 23  |D R13,R2,R2,LSL#|
000086d0  38 0d 4b 8c 1a 41 44 44  20 52 31 33 2c 52 31 33  |8.K..ADD R13,R13|
000086e0  2c 52 31 33 2c 4c 53 4c  23 31 36 0d 4b 96 15 41  |,R13,LSL#16.K..A|
000086f0  44 44 20 52 30 2c 6d 65  6d 2c 23 26 38 30 30 30  |DD R0,mem,#&8000|
00008700  0d 4b a0 13 53 54 52 20  52 31 33 2c 5b 52 30 2c  |.K..STR R13,[R0,|
00008710  23 30 5d 0d 4b aa 13 53  54 52 20 52 31 33 2c 5b  |#0].K..STR R13,[|
00008720  52 30 2c 23 34 5d 0d 4b  b4 13 53 54 52 20 52 31  |R0,#4].K..STR R1|
00008730  33 2c 5b 52 30 2c 23 38  5d 0d 4b be 14 53 54 52  |3,[R0,#8].K..STR|
00008740  20 52 31 33 2c 5b 52 30  2c 23 31 32 5d 0d 4b c8  | R13,[R0,#12].K.|
00008750  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 4b d2 04 0d  |.MOV PC,R14.K...|
00008760  4b dc 0c 2e 72 6f 6d 73  65 6c 32 0d 4b e6 04 0d  |K...romsel2.K...|
00008770  4b f0 18 53 55 42 20 52  31 33 2c 6d 65 6d 2c 23  |K..SUB R13,mem,#|
00008780  2d 52 4f 4d 52 41 4d 0d  4b fa 15 4c 44 52 42 20  |-ROMRAM.K..LDRB |
00008790  52 31 33 2c 5b 52 31 33  2c 52 32 5d 0d 4c 04 33  |R13,[R13,R2].L.3|
000087a0  43 4d 50 20 52 31 33 2c  23 32 20 3b 20 69 73 20  |CMP R13,#2 ; is |
000087b0  74 68 65 20 62 61 6e 6b  20 62 65 69 6e 67 20 70  |the bank being p|
000087c0  61 67 65 64 20 6f 75 74  20 65 6d 70 74 79 3f 0d  |aged out empty?.|
000087d0  4c 0e 14 42 45 51 20 72  6f 6d 73 65 6c 5f 65 6d  |L..BEQ romsel_em|
000087e0  70 74 79 0d 4c 18 04 0d  4c 22 2e 54 53 54 20 52  |pty.L...L".TST R|
000087f0  30 2c 23 25 31 30 30 30  30 30 30 30 20 3b 20 70  |0,#%10000000 ; p|
00008800  72 69 76 61 74 65 20 52  41 4d 20 6d 61 70 70 65  |rivate RAM mappe|
00008810  64 20 69 6e 3f 0d 4c 2c  11 ec 51 20 52 31 33 2c  |d in?.L,..Q R13,|
00008820  23 26 38 30 30 30 0d 4c  36 14 4d 4f 56 4e 45 20  |#&8000.L6.MOVNE |
00008830  52 31 33 2c 23 26 39 30  30 30 0d 4c 40 0f 80 20  |R13,#&9000.L@.. |
00008840  52 30 2c 52 30 2c 23 26  46 0d 4c 4a 04 0d 4c 54  |R0,R0,#&F.LJ..LT|
00008850  04 0d 4c 5e 26 41 44 44  20 52 31 32 2c 52 31 32  |..L^&ADD R12,R12|
00008860  2c 52 30 2c 4c 53 4c 23  31 34 20 3b 20 52 30 2a  |,R0,LSL#14 ; R0*|
00008870  31 36 2a 31 30 32 34 0d  4c 68 18 41 44 44 4e 45  |16*1024.Lh.ADDNE|
00008880  20 52 31 32 2c 52 31 32  2c 23 26 31 30 30 30 0d  | R12,R12,#&1000.|
00008890  4c 72 13 41 44 44 20 6d  65 6d 2c 6d 65 6d 2c 52  |Lr.ADD mem,mem,R|
000088a0  31 33 0d 4c 7c 16 52 53  42 20 52 31 33 2c 52 31  |13.L|.RSB R13,R1|
000088b0  33 2c 23 26 43 30 30 30  0d 4c 86 1b 41 44 52 20  |3,#&C000.L..ADR |
000088c0  52 31 2c 72 6f 6d 73 65  6c 5f 6c 6f 6f 70 5f 74  |R1,romsel_loop_t|
000088d0  65 6d 70 0d 4c 90 1b 53  54 4d 49 41 20 52 31 2c  |emp.L..STMIA R1,|
000088e0  7b 52 30 2c 52 34 2d 52  38 2c 52 31 34 7d 0d 4c  |{R0,R4-R8,R14}.L|
000088f0  9a 11 2e 72 6f 6d 73 65  6c 32 5f 6c 6f 6f 70 0d  |...romsel2_loop.|
00008900  4c a4 2b 4c 44 4d 49 41  20 20 52 31 32 20 21 2c  |L.+LDMIA  R12 !,|
00008910  7b 52 30 2c 52 31 2c 52  34 2c 52 35 2c 52 36 2c  |{R0,R1,R4,R5,R6,|
00008920  52 37 2c 52 38 2c 52 31  34 7d 0d 4c ae 2b 53 54  |R7,R8,R14}.L.+ST|
00008930  4d 49 41 20 28 6d 65 6d  29 21 2c 7b 52 30 2c 52  |MIA (mem)!,{R0,R|
00008940  31 2c 52 34 2c 52 35 2c  52 36 2c 52 37 2c 52 38  |1,R4,R5,R6,R7,R8|
00008950  2c 52 31 34 7d 0d 4c b8  14 3b 4c 44 52 20 52 31  |,R14}.L..;LDR R1|
00008960  2c 5b 52 31 32 5d 2c 23  34 0d 4c c2 3d 3b 53 54  |,[R12],#4.L.=;ST|
00008970  52 20 52 31 2c 5b 6d 65  6d 5d 2c 23 34 20 3b 20  |R R1,[mem],#4 ; |
00008980  73 74 6f 72 65 20 62 79  74 65 20 66 72 6f 6d 20  |store byte from |
00008990  52 4f 4d 20 69 6e 20 6d  61 69 6e 20 6d 65 6d 6f  |ROM in main memo|
000089a0  72 79 20 6d 61 70 0d 4c  cc 15 53 55 42 53 20 52  |ry map.L..SUBS R|
000089b0  31 33 2c 52 31 33 2c 23  34 2a 38 0d 4c d6 14 42  |13,R13,#4*8.L..B|
000089c0  4e 45 20 72 6f 6d 73 65  6c 32 5f 6c 6f 6f 70 0d  |NE romsel2_loop.|
000089d0  4c e0 16 53 55 42 20 6d  65 6d 2c 6d 65 6d 2c 23  |L..SUB mem,mem,#|
000089e0  26 43 30 30 30 0d 4c ea  1b 41 44 52 20 52 31 2c  |&C000.L..ADR R1,|
000089f0  72 6f 6d 73 65 6c 5f 6c  6f 6f 70 5f 74 65 6d 70  |romsel_loop_temp|
00008a00  0d 4c f4 1a 4c 44 4d 49  41 20 52 31 2c 7b 52 30  |.L..LDMIA R1,{R0|
00008a10  2c 52 34 2d 52 38 2c 50  43 7d 0d 4c fe 04 0d 4d  |,R4-R8,PC}.L...M|
00008a20  08 15 2e 70 72 69 76 61  74 65 5f 69 6e 20 3b 20  |...private_in ; |
00008a30  52 4a 57 0d 4d 12 1c 53  54 4d 46 44 20 6d 65 6d  |RJW.M..STMFD mem|
00008a40  2c 7b 52 30 2d 52 32 2c  52 34 2d 52 31 30 7d 0d  |,{R0-R2,R4-R10}.|
00008a50  4d 1c 14 4c 44 52 20 52  32 2c 72 6f 6d 73 5f 61  |M..LDR R2,roms_a|
00008a60  64 64 72 0d 4d 26 0f 80  20 52 31 2c 52 31 2c 23  |ddr.M&.. R1,R1,#|
00008a70  26 46 0d 4d 30 24 41 44  44 20 52 32 2c 52 32 2c  |&F.M0$ADD R2,R2,|
00008a80  52 31 2c 4c 53 4c 23 31  34 20 3b 20 52 31 2a 31  |R1,LSL#14 ; R1*1|
00008a90  36 2a 31 30 32 34 0d 4d  3a 1c 53 55 42 20 52 31  |6*1024.M:.SUB R1|
00008aa0  32 2c 6d 65 6d 2c 23 26  42 30 30 30 2d 26 38 30  |2,mem,#&B000-&80|
00008ab0  30 30 0d 4d 44 12 4d 4f  56 20 52 31 33 2c 23 26  |00.MD.MOV R13,#&|
00008ac0  31 30 30 30 0d 4d 4e 16  41 44 44 20 6d 65 6d 2c  |1000.MN.ADD mem,|
00008ad0  6d 65 6d 2c 23 26 38 30  30 30 0d 4d 58 11 2e 70  |mem,#&8000.MX..p|
00008ae0  72 69 76 5f 69 6e 5f 6c  6f 6f 70 0d 4d 62 2b 4c  |riv_in_loop.Mb+L|
00008af0  44 4d 49 41 20 28 6d 65  6d 29 2c 20 7b 52 31 2c  |DMIA (mem), {R1,|
00008b00  52 34 2c 52 35 2c 52 36  2c 52 37 2c 52 38 2c 52  |R4,R5,R6,R7,R8,R|
00008b10  39 2c 52 31 30 7d 0d 4d  6c 2b 53 54 4d 49 41 20  |9,R10}.Ml+STMIA |
00008b20  52 32 21 2c 20 20 20 7b  52 31 2c 52 34 2c 52 35  |R2!,   {R1,R4,R5|
00008b30  2c 52 36 2c 52 37 2c 52  38 2c 52 39 2c 52 31 30  |,R6,R7,R8,R9,R10|
00008b40  7d 0d 4d 76 2b 4c 44 4d  49 41 20 52 31 32 21 2c  |}.Mv+LDMIA R12!,|
00008b50  20 20 7b 52 31 2c 52 34  2c 52 35 2c 52 36 2c 52  |  {R1,R4,R5,R6,R|
00008b60  37 2c 52 38 2c 52 39 2c  52 31 30 7d 0d 4d 80 2b  |7,R8,R9,R10}.M.+|
00008b70  53 54 4d 49 41 20 28 6d  65 6d 29 21 2c 7b 52 31  |STMIA (mem)!,{R1|
00008b80  2c 52 34 2c 52 35 2c 52  36 2c 52 37 2c 52 38 2c  |,R4,R5,R6,R7,R8,|
00008b90  52 39 2c 52 31 30 7d 0d  4d 8a 14 53 55 42 53 20  |R9,R10}.M..SUBS |
00008ba0  52 31 33 2c 31 33 2c 23  34 2a 38 0d 4d 94 14 42  |R13,13,#4*8.M..B|
00008bb0  4e 45 20 70 72 69 76 5f  69 6e 5f 6c 6f 6f 70 0d  |NE priv_in_loop.|
00008bc0  4d 9e 16 53 55 42 20 6d  65 6d 2c 6d 65 6d 2c 23  |M..SUB mem,mem,#|
00008bd0  26 39 30 30 30 0d 4d a8  1c 4c 44 4d 45 41 20 6d  |&9000.M..LDMEA m|
00008be0  65 6d 2c 7b 52 30 2d 52  32 2c 52 34 2d 52 31 30  |em,{R0-R2,R4-R10|
00008bf0  7d 0d 4d b2 11 42 20 72  6f 6d 73 65 6c 5f 6e 65  |}.M..B romsel_ne|
00008c00  78 74 0d 4d bc 04 0d 4d  c6 16 2e 70 72 69 76 61  |xt.M...M...priva|
00008c10  74 65 5f 6f 75 74 20 3b  20 52 4a 57 0d 4d d0 1c  |te_out ; RJW.M..|
00008c20  53 54 4d 46 44 20 6d 65  6d 2c 7b 52 30 2d 52 32  |STMFD mem,{R0-R2|
00008c30  2c 52 34 2d 52 31 30 7d  0d 4d da 14 4c 44 52 20  |,R4-R10}.M..LDR |
00008c40  52 32 2c 72 6f 6d 73 5f  61 64 64 72 0d 4d e4 16  |R2,roms_addr.M..|
00008c50  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 72 6f  |LDRB R1,[mem,#ro|
00008c60  6d 5d 0d 4d ee 0f 80 20  52 31 2c 52 30 2c 23 26  |m].M... R1,R0,#&|
00008c70  46 0d 4d f8 24 41 44 44  20 52 32 2c 52 32 2c 52  |F.M.$ADD R2,R2,R|
00008c80  31 2c 4c 53 4c 23 31 34  20 3b 20 52 31 2a 31 36  |1,LSL#14 ; R1*16|
00008c90  2a 31 30 32 34 0d 4e 02  1c 53 55 42 20 52 31 32  |*1024.N..SUB R12|
00008ca0  2c 6d 65 6d 2c 23 26 42  30 30 30 2d 26 38 30 30  |,mem,#&B000-&800|
00008cb0  30 0d 4e 0c 12 4d 4f 56  20 52 31 33 2c 23 26 31  |0.N..MOV R13,#&1|
00008cc0  30 30 30 0d 4e 16 16 41  44 44 20 6d 65 6d 2c 6d  |000.N..ADD mem,m|
00008cd0  65 6d 2c 23 26 38 30 30  30 0d 4e 20 12 2e 70 72  |em,#&8000.N ..pr|
00008ce0  69 76 5f 6f 75 74 5f 6c  6f 6f 70 0d 4e 2a 2b 4c  |iv_out_loop.N*+L|
00008cf0  44 4d 49 41 20 28 6d 65  6d 29 2c 20 7b 52 31 2c  |DMIA (mem), {R1,|
00008d00  52 34 2c 52 35 2c 52 36  2c 52 37 2c 52 38 2c 52  |R4,R5,R6,R7,R8,R|
00008d10  39 2c 52 31 30 7d 0d 4e  34 2b 53 54 4d 49 41 20  |9,R10}.N4+STMIA |
00008d20  52 31 32 21 2c 20 20 7b  52 31 2c 52 34 2c 52 35  |R12!,  {R1,R4,R5|
00008d30  2c 52 36 2c 52 37 2c 52  38 2c 52 39 2c 52 31 30  |,R6,R7,R8,R9,R10|
00008d40  7d 0d 4e 3e 2b 4c 44 4d  49 41 20 52 32 21 2c 20  |}.N>+LDMIA R2!, |
00008d50  20 20 7b 52 31 2c 52 34  2c 52 35 2c 52 36 2c 52  |  {R1,R4,R5,R6,R|
00008d60  37 2c 52 38 2c 52 39 2c  52 31 30 7d 0d 4e 48 2b  |7,R8,R9,R10}.NH+|
00008d70  53 54 4d 49 41 20 28 6d  65 6d 29 21 2c 7b 52 31  |STMIA (mem)!,{R1|
00008d80  2c 52 34 2c 52 35 2c 52  36 2c 52 37 2c 52 38 2c  |,R4,R5,R6,R7,R8,|
00008d90  52 39 2c 52 31 30 7d 0d  4e 52 15 53 55 42 53 20  |R9,R10}.NR.SUBS |
00008da0  52 31 33 2c 52 31 33 2c  23 34 2a 38 0d 4e 5c 15  |R13,R13,#4*8.N\.|
00008db0  42 4e 45 20 70 72 69 76  5f 6f 75 74 5f 6c 6f 6f  |BNE priv_out_loo|
00008dc0  70 0d 4e 66 16 53 55 42  20 6d 65 6d 2c 6d 65 6d  |p.Nf.SUB mem,mem|
00008dd0  2c 23 26 39 30 30 30 0d  4e 70 1c 4c 44 4d 45 41  |,#&9000.Np.LDMEA|
00008de0  20 6d 65 6d 2c 7b 52 30  2d 52 32 2c 52 34 2d 52  | mem,{R0-R2,R4-R|
00008df0  31 30 7d 0d 4e 7a 11 42  20 72 6f 6d 73 65 6c 5f  |10}.Nz.B romsel_|
00008e00  6e 65 78 74 0d 4e 84 04  0d 4e 8e 08 2e 63 72 74  |next.N...N...crt|
00008e10  0d 4e 98 1c 53 55 42 20  52 31 2c 6d 65 6d 2c 23  |.N..SUB R1,mem,#|
00008e20  35 31 32 20 3b 20 73 68  65 69 6c 61 0d 4e a2 14  |512 ; sheila.N..|
00008e30  4c 44 52 42 20 52 31 32  2c 5b 52 31 2c 23 30 5d  |LDRB R12,[R1,#0]|
00008e40  0d 4e ac 15 80 20 52 31  32 2c 52 31 32 2c 23 25  |.N... R12,R12,#%|
00008e50  31 31 31 31 31 0d 4e b6  0f 43 4d 50 20 52 31 32  |11111.N..CMP R12|
00008e60  2c 23 31 37 0d 4e c0 10  4d 4f 56 48 49 20 50 43  |,#17.N..MOVHI PC|
00008e70  2c 52 31 34 0d 4e ca 15  3b 41 44 52 20 52 31 33  |,R14.N..;ADR R13|
00008e80  2c 63 72 74 5f 72 65 67  73 0d 4e d4 1a 53 55 42  |,crt_regs.N..SUB|
00008e90  20 52 31 33 2c 6d 65 6d  2c 23 2d 63 72 74 5f 72  | R13,mem,#-crt_r|
00008ea0  65 67 73 0d 4e de 15 4c  44 52 42 20 52 31 2c 5b  |egs.N..LDRB R1,[|
00008eb0  52 31 33 2c 52 31 32 5d  0d 4e e8 25 43 4d 50 20  |R13,R12].N.%CMP |
00008ec0  52 31 2c 52 30 20 3a 20  ec 51 20 50 43 2c 52 31  |R1,R0 : .Q PC,R1|
00008ed0  34 20 3b 20 6e 6f 20 63  68 61 6e 67 65 0d 4e f2  |4 ; no change.N.|
00008ee0  15 53 54 52 42 20 52 30  2c 5b 52 31 33 2c 52 31  |.STRB R0,[R13,R1|
00008ef0  32 5d 0d 4e fc 17 41 44  44 20 50 43 2c 50 43 2c  |2].N..ADD PC,PC,|
00008f00  52 31 32 2c 4c 53 4c 23  32 0d 4f 06 24 4d 4f 56  |R12,LSL#2.O.$MOV|
00008f10  20 52 30 2c 52 30 20 3b  20 70 61 64 64 69 6e 67  | R0,R0 ; padding|
00008f20  20 66 6f 72 20 70 69 70  65 6c 69 6e 65 0d 4f 10  | for pipeline.O.|
00008f30  29 4d 4f 56 20 50 43 2c  52 31 34 20 20 20 20 20  |)MOV PC,R14     |
00008f40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00008f50  20 72 65 67 20 30 0d 4f  1a 29 42 20 6e 65 77 5f  | reg 0.O.)B new_|
00008f60  68 6f 72 69 7a 76 65 72  74 20 20 20 20 20 20 20  |horizvert       |
00008f70  20 20 20 20 20 20 20 20  3b 20 72 65 67 20 31 0d  |        ; reg 1.|
00008f80  4f 24 29 4d 4f 56 20 50  43 2c 52 31 34 20 20 20  |O$)MOV PC,R14   |
00008f90  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00008fa0  20 3b 20 72 65 67 20 32  0d 4f 2e 29 4d 4f 56 20  | ; reg 2.O.)MOV |
00008fb0  50 43 2c 52 31 34 20 20  20 20 20 20 20 20 20 20  |PC,R14          |
00008fc0  20 20 20 20 20 20 20 20  20 20 3b 20 72 65 67 20  |          ; reg |
00008fd0  33 0d 4f 38 29 4d 4f 56  20 50 43 2c 52 31 34 20  |3.O8)MOV PC,R14 |
00008fe0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00008ff0  20 20 20 3b 20 72 65 67  20 34 0d 4f 42 29 4d 4f  |   ; reg 4.OB)MO|
00009000  56 20 50 43 2c 52 31 34  20 20 20 20 20 20 20 20  |V PC,R14        |
00009010  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 65  |            ; re|
00009020  67 20 35 0d 4f 4c 29 42  20 6e 65 77 5f 68 6f 72  |g 5.OL)B new_hor|
00009030  69 7a 76 65 72 74 20 20  20 20 20 20 20 20 20 20  |izvert          |
00009040  20 20 20 20 20 3b 20 72  65 67 20 36 0d 4f 56 29  |     ; reg 6.OV)|
00009050  4d 4f 56 20 50 43 2c 52  31 34 20 20 20 20 20 20  |MOV PC,R14      |
00009060  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00009070  72 65 67 20 37 0d 4f 60  29 4d 4f 56 20 50 43 2c  |reg 7.O`)MOV PC,|
00009080  52 31 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |R14             |
00009090  20 20 20 20 20 20 20 3b  20 72 65 67 20 38 0d 4f  |       ; reg 8.O|
000090a0  6a 29 4d 4f 56 20 50 43  2c 52 31 34 20 20 20 20  |j)MOV PC,R14    |
000090b0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000090c0  3b 20 72 65 67 20 39 0d  4f 74 2a 42 20 63 75 72  |; reg 9.Ot*B cur|
000090d0  73 6f 72 5f 73 74 61 72  74 20 20 20 20 20 20 20  |sor_start       |
000090e0  20 20 20 20 20 20 20 20  20 3b 20 72 65 67 20 31  |         ; reg 1|
000090f0  30 0d 4f 7e 2a 42 20 63  75 72 73 6f 72 5f 65 6e  |0.O~*B cursor_en|
00009100  64 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |d               |
00009110  20 20 20 3b 20 72 65 67  20 31 31 0d 4f 88 2a 42  |   ; reg 11.O.*B|
00009120  20 63 72 74 31 32 20 20  20 20 20 20 20 20 20 20  | crt12          |
00009130  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
00009140  65 67 20 31 32 0d 4f 92  2a 42 20 63 72 74 31 33  |eg 12.O.*B crt13|
00009150  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00009160  20 20 20 20 20 20 20 3b  20 72 65 67 20 31 33 0d  |       ; reg 13.|
00009170  4f 9c 2a 42 20 63 75 72  73 6f 72 5f 63 68 61 6e  |O.*B cursor_chan|
00009180  67 65 64 20 20 20 20 20  20 20 20 20 20 20 20 20  |ged             |
00009190  20 3b 20 72 65 67 20 31  34 0d 4f a6 2a 42 20 63  | ; reg 14.O.*B c|
000091a0  75 72 73 6f 72 5f 63 68  61 6e 67 65 64 20 20 20  |ursor_changed   |
000091b0  20 20 20 20 20 20 20 20  20 20 20 3b 20 72 65 67  |           ; reg|
000091c0  20 31 35 0d 4f b0 2a 4d  4f 56 20 50 43 2c 52 31  | 15.O.*MOV PC,R1|
000091d0  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
000091e0  20 20 20 20 20 3b 20 72  65 67 20 31 36 0d 4f ba  |     ; reg 16.O.|
000091f0  2a 4d 4f 56 20 50 43 2c  52 31 34 20 20 20 20 20  |*MOV PC,R14     |
00009200  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00009210  20 72 65 67 20 31 37 0d  4f c4 04 0d 4f ce 04 0d  | reg 17.O...O...|
00009220  4f d8 04 0d 4f e2 4a 43  4d 50 20 52 31 32 2c 23  |O...O.JCMP R12,#|
00009230  31 34 20 3a 20 43 4d 50  4e 45 20 52 31 32 2c 23  |14 : CMPNE R12,#|
00009240  31 35 20 3a 20 ec 51 20  52 30 2c 23 31 20 3a 20  |15 : .Q R0,#1 : |
00009250  53 54 52 45 51 20 52 30  2c 5b 6d 65 6d 2c 23 63  |STREQ R0,[mem,#c|
00009260  75 72 73 6f 72 5f 74 61  6d 70 65 72 5d 0d 4f ec  |ursor_tamper].O.|
00009270  22 43 4d 50 20 52 31 32  2c 23 31 30 20 3a 20 42  |"CMP R12,#10 : B|
00009280  45 51 20 63 75 72 73 6f  72 5f 73 74 61 72 74 0d  |EQ cursor_start.|
00009290  4f f6 20 43 4d 50 20 52  31 32 2c 23 31 31 20 3a  |O. CMP R12,#11 :|
000092a0  20 42 45 51 20 63 75 72  73 6f 72 5f 65 6e 64 0d  | BEQ cursor_end.|
000092b0  50 00 28 43 4d 50 20 52  31 32 2c 23 31 32 20 3a  |P.(CMP R12,#12 :|
000092c0  20 42 45 51 20 63 72 74  31 32 20 3a 20 2e 63 72  | BEQ crt12 : .cr|
000092d0  74 31 32 63 6f 6e 74 0d  50 0a 0f 43 4d 50 20 52  |t12cont.P..CMP R|
000092e0  31 32 2c 23 31 32 0d 50  14 11 43 4d 50 4e 45 20  |12,#12.P..CMPNE |
000092f0  52 31 32 2c 23 31 33 0d  50 1e 10 43 4d 50 4e 45  |R12,#13.P..CMPNE|
00009300  20 52 31 32 2c 23 31 0d  50 28 10 43 4d 50 4e 45  | R12,#1.P(.CMPNE|
00009310  20 52 31 32 2c 23 36 0d  50 32 10 4d 4f 56 4e 45  | R12,#6.P2.MOVNE|
00009320  20 50 43 2c 52 31 34 0d  50 3c 0e 4d 4f 56 20 52  | PC,R14.P<.MOV R|
00009330  31 33 2c 23 31 0d 50 46  19 53 54 52 20 52 31 33  |13,#1.PF.STR R13|
00009340  2c 5b 6d 65 6d 2c 23 74  61 6d 70 65 72 5d 0d 50  |,[mem,#tamper].P|
00009350  50 0e 43 4d 50 20 52 31  32 2c 23 31 0d 50 5a 10  |P.CMP R12,#1.PZ.|
00009360  43 4d 50 4e 45 20 52 31  32 2c 23 36 0d 50 64 15  |CMPNE R12,#6.Pd.|
00009370  42 45 51 20 6e 65 77 5f  68 6f 72 69 7a 76 65 72  |BEQ new_horizver|
00009380  74 0d 50 6e 10 3b 43 4d  50 20 52 31 32 2c 23 31  |t.Pn.;CMP R12,#1|
00009390  33 0d 50 78 1e 3b 53 57  49 45 51 20 22 36 35 30  |3.Px.;SWIEQ "650|
000093a0  32 5f 55 70 64 61 74 65  53 63 72 65 65 6e 22 0d  |2_UpdateScreen".|
000093b0  50 82 0f 43 4d 50 20 52  31 32 2c 23 31 32 0d 50  |P..CMP R12,#12.P|
000093c0  8c 11 43 4d 50 4e 45 20  52 31 32 2c 23 31 33 0d  |..CMPNE R12,#13.|
000093d0  50 96 10 4d 4f 56 4e 45  20 50 43 2c 52 31 34 0d  |P..MOVNE PC,R14.|
000093e0  50 a0 11 42 20 72 65 63  61 6c 63 5f 77 72 61 70  |P..B recalc_wrap|
000093f0  0d 50 aa 04 0d 50 b4 13  2e 63 75 72 73 6f 72 5f  |.P...P...cursor_|
00009400  63 68 61 6e 67 65 64 0d  50 be 0d 4d 4f 56 20 52  |changed.P..MOV R|
00009410  30 2c 23 31 0d 50 c8 20  53 54 52 42 20 52 30 2c  |0,#1.P. STRB R0,|
00009420  5b 6d 65 6d 2c 23 63 75  72 73 6f 72 5f 74 61 6d  |[mem,#cursor_tam|
00009430  70 65 72 5d 0d 50 d2 0e  4d 4f 56 20 50 43 2c 52  |per].P..MOV PC,R|
00009440  31 34 0d 50 dc 04 0d 50  e6 12 2e 6e 65 77 5f 68  |14.P...P...new_h|
00009450  6f 72 69 7a 76 65 72 74  0d 50 f0 0e 4d 4f 56 20  |orizvert.P..MOV |
00009460  52 31 33 2c 23 31 0d 50  fa 19 53 54 52 20 52 31  |R13,#1.P..STR R1|
00009470  33 2c 5b 6d 65 6d 2c 23  74 61 6d 70 65 72 5d 0d  |3,[mem,#tamper].|
00009480  51 04 11 53 55 42 20 52  31 32 2c 52 31 2c 52 30  |Q..SUB R12,R1,R0|
00009490  0d 51 0e 0e 43 4d 50 20  52 31 32 2c 23 32 0d 51  |.Q..CMP R12,#2.Q|
000094a0  18 10 4d 4f 56 4c 45 20  50 43 2c 52 31 34 0d 51  |..MOVLE PC,R14.Q|
000094b0  22 2b 4d 4f 56 20 52 31  32 2c 23 32 35 35 20 3a  |"+MOV R12,#255 :|
000094c0  20 53 54 52 42 20 52 31  32 2c 5b 6d 65 6d 2c 23  | STRB R12,[mem,#|
000094d0  6c 61 73 74 6d 6f 64 65  5d 0d 51 2c 0e 4d 4f 56  |lastmode].Q,.MOV|
000094e0  20 50 43 2c 52 31 34 0d  51 36 04 0d 51 40 0a 2e  | PC,R14.Q6..Q@..|
000094f0  63 72 74 31 32 0d 51 4a  11 43 4d 50 20 52 30 2c  |crt12.QJ.CMP R0,|
00009500  23 25 30 31 31 30 0d 51  54 12 4d 4f 56 4c 54 20  |#%0110.QT.MOVLT |
00009510  52 30 2c 23 25 31 31 30  0d 51 5e 15 53 54 52 42  |R0,#%110.Q^.STRB|
00009520  20 52 30 2c 5b 52 31 33  2c 52 31 32 5d 0d 51 68  | R0,[R13,R12].Qh|
00009530  10 3b 42 20 63 72 74 31  32 63 6f 6e 74 0d 51 72  |.;B crt12cont.Qr|
00009540  0a 2e 63 72 74 31 33 0d  51 7c 04 0d 51 86 10 54  |..crt13.Q|..Q..T|
00009550  53 54 20 46 2c 23 31 3c  3c 31 31 0d 51 90 06 3b  |ST F,#1<<11.Q..;|
00009560  5d 0d 51 9a 13 3b e7 20  ac 20 48 57 53 63 72 6f  |].Q..;. . HWScro|
00009570  6c 6c 20 8c 0d 51 a4 0a  3b 5b 4f 50 54 70 0d 51  |ll ..Q..;[OPTp.Q|
00009580  ae 0d ec 51 20 52 31 33  2c 23 31 0d 51 b8 3d 53  |...Q R13,#1.Q.=S|
00009590  54 52 45 51 20 52 31 33  2c 5b 6d 65 6d 2c 23 74  |TREQ R13,[mem,#t|
000095a0  61 6d 70 65 72 5d 20 20  20 3b 20 64 6f 6e 27 74  |amper]   ; don't|
000095b0  20 77 61 6e 74 20 74 68  69 73 20 66 6f 72 20 48  | want this for H|
000095c0  57 20 53 63 72 6f 6c 6c  0d 51 c2 13 42 45 51 20  |W Scroll.Q..BEQ |
000095d0  72 65 63 61 6c 63 5f 77  72 61 70 0d 51 cc 06 3b  |recalc_wrap.Q..;|
000095e0  5d 0d 51 d6 06 3b 8b 0d  51 e0 04 0d 51 ea 0a 3b  |].Q..;..Q...Q..;|
000095f0  5b 4f 50 54 70 0d 51 f4  0f 3b 20 48 57 20 73 63  |[OPTp.Q..; HW sc|
00009600  72 6f 6c 6c 0d 51 fe 18  4c 44 52 20 52 31 32 2c  |roll.Q..LDR R12,|
00009610  75 70 64 61 74 65 70 69  78 65 6c 56 0d 52 08 1d  |updatepixelV.R..|
00009620  41 44 52 20 52 31 33 2c  64 6f 68 61 72 64 77 61  |ADR R13,dohardwa|
00009630  72 65 5f 73 63 72 6f 6c  6c 0d 52 12 0f 43 4d 50  |re_scroll.R..CMP|
00009640  20 52 31 32 2c 52 31 33  0d 52 1c 1a 53 54 52 4e  | R12,R13.R..STRN|
00009650  45 20 52 31 33 2c 75 70  64 61 74 65 70 69 78 65  |E R13,updatepixe|
00009660  6c 56 0d 52 26 04 0d 52  30 11 42 20 72 65 63 61  |lV.R&..R0.B reca|
00009670  6c 63 5f 77 72 61 70 0d  52 3a 04 0d 52 44 16 2e  |lc_wrap.R:..RD..|
00009680  64 6f 68 61 72 64 77 61  72 65 5f 73 63 72 6f 6c  |dohardware_scrol|
00009690  6c 0d 52 4e 27 3b 20 48  65 72 65 20 77 65 20 64  |l.RN'; Here we d|
000096a0  6f 20 74 68 65 20 68 61  72 64 77 61 72 65 20 73  |o the hardware s|
000096b0  63 72 6f 6c 6c 69 6e 67  0d 52 58 0f 53 54 52 20  |crolling.RX.STR |
000096c0  52 31 34 2c 79 75 6b 0d  52 62 17 42 4c 20 64 6f  |R14,yuk.Rb.BL do|
000096d0  68 61 72 64 77 61 72 65  73 63 72 6f 6c 6c 0d 52  |hardwarescroll.R|
000096e0  6c 18 42 4c 20 70 6f 6b  65 5f 75 70 64 61 74 65  |l.BL poke_update|
000096f0  70 69 78 65 6c 56 0d 52  76 0f 4c 44 52 20 52 31  |pixelV.Rv.LDR R1|
00009700  34 2c 79 75 6b 0d 52 80  29 3b 20 54 68 65 6e 20  |4,yuk.R.); Then |
00009710  77 65 20 67 6f 20 64 6f  20 74 68 65 20 75 70 64  |we go do the upd|
00009720  61 74 65 20 61 73 20 6e  6f 72 6d 61 6c 2e 0d 52  |ate as normal..R|
00009730  8a 34 3b 4c 44 52 20 50  43 2c 64 6f 68 61 72 64  |.4;LDR PC,dohard|
00009740  77 61 72 65 5f 73 63 72  6f 6c 6c 56 20 3b 20 6f  |ware_scrollV ; o|
00009750  6c 64 20 63 6f 6e 74 65  6e 74 73 20 6f 66 20 75  |ld contents of u|
00009760  70 56 0d 52 94 17 4c 44  52 20 50 43 2c 75 70 64  |pV.R..LDR PC,upd|
00009770  61 74 65 70 69 78 65 6c  56 0d 52 9e 04 0d 52 a8  |atepixelV.R...R.|
00009780  08 2e 79 75 6b 0d 52 b2  0a 45 51 55 44 20 30 0d  |..yuk.R..EQUD 0.|
00009790  52 bc 04 0d 52 c6 18 3b  2e 64 6f 68 61 72 64 77  |R...R..;.dohardw|
000097a0  61 72 65 5f 73 63 72 6f  6c 6c 56 0d 52 d0 0b 3b  |are_scrollV.R..;|
000097b0  45 51 55 44 20 30 0d 52  da 04 0d 52 e4 15 2e 64  |EQUD 0.R...R...d|
000097c0  6f 68 61 72 64 77 61 72  65 73 63 72 6f 6c 6c 0d  |ohardwarescroll.|
000097d0  52 ee 15 a4 64 6f 68 61  72 64 77 61 72 65 73 63  |R...dohardwaresc|
000097e0  72 6f 6c 6c 0d 52 f8 04  0d 53 02 18 3b 2e 73 63  |roll.R...S..;.sc|
000097f0  72 65 65 6e 77 69 64 74  68 63 68 61 6e 67 65 64  |reenwidthchanged|
00009800  0d 53 0c 0f 3b 4d 4f 56  20 50 43 2c 52 31 34 0d  |.S..;MOV PC,R14.|
00009810  53 16 04 0d 53 20 20 2e  68 61 72 64 77 61 72 65  |S...S  .hardware|
00009820  5f 73 63 72 6f 6c 6c 5f  73 74 61 63 6b 5f 73 70  |_scroll_stack_sp|
00009830  61 63 65 0d 53 2a 1c 5d  3a 50 25 2b 3d 32 35 36  |ace.S*.]:P%+=256|
00009840  3a 4f 25 2b 3d 32 35 36  3a 5b 4f 50 54 20 70 0d  |:O%+=256:[OPT p.|
00009850  53 34 24 2e 68 61 72 64  77 61 72 65 5f 73 63 72  |S4$.hardware_scr|
00009860  6f 6c 6c 5f 73 74 61 63  6b 5f 73 70 61 63 65 5f  |oll_stack_space_|
00009870  74 6f 70 0d 53 3e 05 5d  0d 53 48 04 0d 53 52 05  |top.S>.].SH..SR.|
00009880  cd 0d 53 5c 04 0d 53 66  09 5b 4f 50 54 70 0d 53  |..S\..Sf.[OPTp.S|
00009890  70 22 3b 20 65 6e 64 20  6f 66 20 68 61 72 64 77  |p"; end of hardw|
000098a0  61 72 65 20 73 63 72 6f  6c 6c 20 73 74 75 66 66  |are scroll stuff|
000098b0  0d 53 7a 04 0d 53 84 11  2e 63 75 72 73 6f 72 5f  |.Sz..S...cursor_|
000098c0  73 74 61 72 74 0d 53 8e  1d 5c 4c 44 52 42 20 52  |start.S..\LDRB R|
000098d0  31 2c 5b 6d 65 6d 2c 23  63 75 72 73 6f 72 5f 6f  |1,[mem,#cursor_o|
000098e0  6e 5d 0d 53 98 1c 5c 43  4d 50 20 52 31 2c 23 30  |n].S..\CMP R1,#0|
000098f0  3a 5c 4d 4f 56 4e 45 20  50 43 2c 52 31 34 0d 53  |:\MOVNE PC,R14.S|
00009900  a2 1f 54 53 54 20 46 2c  23 31 20 3c 3c 20 31 30  |..TST F,#1 << 10|
00009910  20 3b 20 63 75 72 73 6f  72 20 6f 6e 3f 0d 53 ac  | ; cursor on?.S.|
00009920  0d ec 51 20 50 43 2c 52  31 34 0d 53 b6 1e 4c 44  |..Q PC,R14.S..LD|
00009930  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |RB R1,[mem,#crt_|
00009940  72 65 67 73 2b 31 31 5d  0d 53 c0 13 80 20 52 31  |regs+11].S... R1|
00009950  2c 52 31 2c 23 25 31 31  31 31 31 0d 53 ca 13 80  |,R1,#%11111.S...|
00009960  20 52 32 2c 52 30 2c 23  25 31 31 31 31 31 0d 53  | R2,R0,#%11111.S|
00009970  d4 0d 43 4d 50 20 52 32  2c 52 31 0d 53 de 14 42  |..CMP R2,R1.S..B|
00009980  47 54 20 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 0d  |GT blank_cursor.|
00009990  53 e8 04 0d 53 f2 14 82  20 52 30 2c 52 30 2c 23  |S...S... R0,R0,#|
000099a0  25 31 30 30 30 30 30 0d  53 fc 14 54 53 54 20 52  |%100000.S..TST R|
000099b0  30 2c 23 25 31 31 30 30  30 30 30 0d 54 06 14 42  |0,#%1100000.T..B|
000099c0  45 51 20 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 0d  |EQ blank_cursor.|
000099d0  54 10 13 42 20 64 65 66  69 6e 65 5f 63 75 72 73  |T..B define_curs|
000099e0  6f 72 0d 54 1a 04 0d 54  24 0f 2e 63 75 72 73 6f  |or.T...T$..curso|
000099f0  72 5f 65 6e 64 0d 54 2e  1d 5c 4c 44 52 42 20 52  |r_end.T..\LDRB R|
00009a00  31 2c 5b 6d 65 6d 2c 23  63 75 72 73 6f 72 5f 6f  |1,[mem,#cursor_o|
00009a10  6e 5d 0d 54 38 1c 5c 43  4d 50 20 52 31 2c 23 30  |n].T8.\CMP R1,#0|
00009a20  3a 5c 4d 4f 56 4e 45 20  50 43 2c 52 31 34 0d 54  |:\MOVNE PC,R14.T|
00009a30  42 1f 54 53 54 20 46 2c  23 31 20 3c 3c 20 31 30  |B.TST F,#1 << 10|
00009a40  20 3b 20 63 75 72 73 6f  72 20 6f 6e 3f 0d 54 4c  | ; cursor on?.TL|
00009a50  0d ec 51 20 50 43 2c 52  31 34 0d 54 56 13 80 20  |..Q PC,R14.TV.. |
00009a60  52 31 2c 52 30 2c 23 25  31 31 31 31 31 0d 54 60  |R1,R0,#%11111.T`|
00009a70  1e 4c 44 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 63  |.LDRB R2,[mem,#c|
00009a80  72 74 5f 72 65 67 73 2b  31 30 5d 0d 54 6a 13 80  |rt_regs+10].Tj..|
00009a90  20 52 32 2c 52 32 2c 23  25 31 31 31 31 31 0d 54  | R2,R2,#%11111.T|
00009aa0  74 0d 43 4d 50 20 52 32  2c 52 31 0d 54 7e 14 42  |t.CMP R2,R1.T~.B|
00009ab0  47 54 20 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 0d  |GT blank_cursor.|
00009ac0  54 88 13 42 20 64 65 66  69 6e 65 5f 63 75 72 73  |T..B define_curs|
00009ad0  6f 72 0d 54 92 0f 3b 4d  4f 56 20 50 43 2c 52 31  |or.T..;MOV PC,R1|
00009ae0  34 0d 54 9c 04 0d 54 a6  09 2e 6c 69 6e 6b 0d 54  |4.T...T...link.T|
00009af0  b0 0a 45 51 55 44 20 30  0d 54 ba 04 0d 54 c4 0e  |..EQUD 0.T...T..|
00009b00  2e 63 61 70 73 5f 6c 6f  63 6b 0d 54 ce 12 80 20  |.caps_lock.T... |
00009b10  52 30 2c 52 30 2c 23 25  31 30 30 30 0d 54 d8 13  |R0,R0,#%1000.T..|
00009b20  4d 4f 56 20 52 31 2c 52  30 2c 4c 53 4c 23 31 0d  |MOV R1,R0,LSL#1.|
00009b30  54 e2 0f 4d 4f 56 20 52  30 2c 23 32 30 32 0d 54  |T..MOV R0,#202.T|
00009b40  ec 15 4d 4f 56 20 52 32  2c 23 25 31 31 31 30 31  |..MOV R2,#%11101|
00009b50  31 31 31 0d 54 f6 11 53  57 49 20 22 4f 53 5f 42  |111.T..SWI "OS_B|
00009b60  79 74 65 22 0d 55 00 0f  4d 4f 56 20 52 30 2c 23  |yte".U..MOV R0,#|
00009b70  31 31 38 0d 55 0a 11 53  57 49 20 22 4f 53 5f 42  |118.U..SWI "OS_B|
00009b80  79 74 65 22 0d 55 14 0e  4d 4f 56 20 50 43 2c 52  |yte".U..MOV PC,R|
00009b90  31 34 0d 55 1e 04 0d 55  28 0a 2e 6c 61 74 63 68  |14.U...U(..latch|
00009ba0  0d 55 32 16 3b 84 52 20  52 30 2c 52 30 2c 23 25  |.U2.;.R R0,R0,#%|
00009bb0  31 31 30 30 30 30 0d 55  3c 27 3b 53 54 52 42 20  |110000.U<';STRB |
00009bc0  52 30 2c 5b 6d 65 6d 2c  52 31 5d 20 3b 20 6e 6f  |R0,[mem,R1] ; no|
00009bd0  20 66 69 72 65 20 62 75  74 74 6f 6e 73 0d 55 46  | fire buttons.UF|
00009be0  12 80 53 20 52 32 2c 52  30 2c 23 25 31 31 31 0d  |..S R2,R0,#%111.|
00009bf0  55 50 04 0d 55 5a 08 3b  52 4a 57 0d 55 64 0e 3b  |UP..UZ.;RJW.Ud.;|
00009c00  43 4d 50 20 52 32 2c 23  30 0d 55 6e 1e 54 53 54  |CMP R2,#0.Un.TST|
00009c10  45 51 20 46 2c 23 31 3c  3c 31 32 20 3b 20 73 6f  |EQ F,#1<<12 ; so|
00009c20  75 6e 64 20 6f 6e 3f 0d  55 78 13 42 45 51 20 73  |und on?.Ux.BEQ s|
00009c30  6f 75 6e 64 5f 6c 61 74  63 68 0d 55 82 0d 43 4d  |ound_latch.U..CM|
00009c40  50 20 52 32 2c 23 33 0d  55 8c 12 42 45 51 20 6c  |P R2,#3.U..BEQ l|
00009c50  61 74 63 68 5f 6b 65 79  62 0d 55 96 0d 43 4d 50  |atch_keyb.U..CMP|
00009c60  20 52 32 2c 23 36 0d 55  a0 11 42 45 51 20 63 61  | R2,#6.U..BEQ ca|
00009c70  70 73 5f 6c 6f 63 6b 0d  55 aa 1f 4c 44 52 42 20  |ps_lock.U..LDRB |
00009c80  52 31 32 2c 5b 6d 65 6d  2c 23 63 72 74 5f 72 65  |R12,[mem,#crt_re|
00009c90  67 73 2b 31 39 5d 0d 55  b4 0d 43 4d 50 20 52 32  |gs+19].U..CMP R2|
00009ca0  2c 23 34 0d 55 be 15 80  45 51 20 52 31 33 2c 52  |,#4.U...EQ R13,R|
00009cb0  30 2c 23 25 31 30 30 30  0d 55 c8 15 42 49 43 45  |0,#%1000.U..BICE|
00009cc0  51 20 52 31 32 2c 52 31  32 2c 23 25 31 0d 55 d2  |Q R12,R12,#%1.U.|
00009cd0  1a 84 52 45 51 20 52 31  32 2c 52 31 32 2c 52 31  |..REQ R12,R12,R1|
00009ce0  33 2c 4c 53 52 23 33 0d  55 dc 0d 43 4d 50 20 52  |3,LSR#3.U..CMP R|
00009cf0  32 2c 23 35 0d 55 e6 15  80 45 51 20 52 31 33 2c  |2,#5.U...EQ R13,|
00009d00  52 30 2c 23 25 31 30 30  30 0d 55 f0 16 42 49 43  |R0,#%1000.U..BIC|
00009d10  45 51 20 52 31 32 2c 52  31 32 2c 23 25 31 30 0d  |EQ R12,R12,#%10.|
00009d20  55 fa 1a 84 52 45 51 20  52 31 32 2c 52 31 32 2c  |U...REQ R12,R12,|
00009d30  52 31 33 2c 4c 53 52 23  32 0d 56 04 1f 53 54 52  |R13,LSR#2.V..STR|
00009d40  42 20 52 31 32 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |B R12,[mem,#crt_|
00009d50  72 65 67 73 2b 31 39 5d  0d 56 0e 04 0d 56 18 10  |regs+19].V...V..|
00009d60  2e 72 65 63 61 6c 63 5f  77 72 61 70 0d 56 22 1f  |.recalc_wrap.V".|
00009d70  4c 44 52 42 20 52 31 32  2c 5b 6d 65 6d 2c 23 63  |LDRB R12,[mem,#c|
00009d80  72 74 5f 72 65 67 73 2b  31 39 5d 0d 56 2c 13 80  |rt_regs+19].V,..|
00009d90  53 20 52 31 32 2c 52 31  32 2c 23 25 31 31 0d 56  |S R12,R12,#%11.V|
00009da0  36 14 4d 4f 56 4e 45 20  52 31 33 2c 23 26 35 38  |6.MOVNE R13,#&58|
00009db0  30 30 0d 56 40 11 ec 51  20 52 31 33 2c 23 26 34  |00.V@..Q R13,#&4|
00009dc0  30 30 30 0d 56 4a 10 43  4d 50 20 52 31 32 2c 23  |000.VJ.CMP R12,#|
00009dd0  25 31 30 0d 56 54 11 ec  51 20 52 31 33 2c 23 26  |%10.VT..Q R13,#&|
00009de0  33 30 30 30 0d 56 5e 10  43 4d 50 20 52 31 32 2c  |3000.V^.CMP R12,|
00009df0  23 25 30 31 0d 56 68 11  ec 51 20 52 31 33 2c 23  |#%01.Vh..Q R13,#|
00009e00  26 36 30 30 30 0d 56 72  04 0d 56 7c 1f 4c 44 52  |&6000.Vr..V|.LDR|
00009e10  42 20 52 31 32 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |B R12,[mem,#crt_|
00009e20  72 65 67 73 2b 31 33 5d  0d 56 86 1e 4c 44 52 42  |regs+13].V..LDRB|
00009e30  20 52 32 2c 5b 6d 65 6d  2c 23 63 72 74 5f 72 65  | R2,[mem,#crt_re|
00009e40  67 73 2b 31 32 5d 0d 56  90 12 80 20 52 32 2c 52  |gs+12].V... R2,R|
00009e50  32 2c 23 25 31 31 31 31  0d 56 9a 18 41 44 44 20  |2,#%1111.V..ADD |
00009e60  52 31 32 2c 52 31 32 2c  52 32 2c 4c 53 4c 23 38  |R12,R12,R2,LSL#8|
00009e70  0d 56 a4 04 0d 56 ae 15  43 4d 50 20 52 31 33 2c  |.V...V..CMP R13,|
00009e80  52 31 32 2c 4c 53 4c 23  33 0d 56 b8 17 4d 4f 56  |R12,LSL#3.V..MOV|
00009e90  47 54 20 52 31 33 2c 52  31 32 2c 4c 53 4c 23 33  |GT R13,R12,LSL#3|
00009ea0  0d 56 c2 04 0d 56 cc 1d  53 55 42 20 52 31 32 2c  |.V...V..SUB R12,|
00009eb0  6d 65 6d 2c 23 35 31 32  20 3b 20 73 68 65 69 6c  |mem,#512 ; sheil|
00009ec0  61 0d 56 d6 17 4c 44 52  42 20 52 31 32 2c 5b 52  |a.V..LDRB R12,[R|
00009ed0  31 32 2c 23 26 32 30 5d  0d 56 e0 04 0d 56 ea 1c  |12,#&20].V...V..|
00009ee0  54 53 54 20 52 31 32 2c  23 25 31 30 20 3b 20 74  |TST R12,#%10 ; t|
00009ef0  65 6c 65 74 65 78 74 3f  0d 56 f4 14 4d 4f 56 4e  |eletext?.V..MOVN|
00009f00  45 20 52 31 33 2c 23 26  37 43 30 30 0d 56 fe 04  |E R13,#&7C00.V..|
00009f10  0d 57 08 0f 3b 80 20 46  2c 46 2c 23 26 46 46 0d  |.W..;. F,F,#&FF.|
00009f20  57 12 16 42 49 43 20 46  2c 46 2c 23 26 46 46 30  |W..BIC F,F,#&FF0|
00009f30  30 30 30 30 30 0d 57 1c  14 42 49 43 20 46 2c 46  |00000.W..BIC F,F|
00009f40  2c 23 26 46 46 30 30 30  30 0d 57 26 15 84 52 20  |,#&FF0000.W&..R |
00009f50  46 2c 46 2c 52 31 33 2c  4c 53 4c 23 31 36 0d 57  |F,F,R13,LSL#16.W|
00009f60  30 16 3b 53 54 52 20 52  31 33 2c 77 72 61 70 5f  |0.;STR R13,wrap_|
00009f70  61 64 64 72 0d 57 3a 0e  4d 4f 56 20 50 43 2c 52  |addr.W:.MOV PC,R|
00009f80  31 34 0d 57 44 04 0d 57  4e 04 0d 57 58 0f 2e 6c  |14.WD..WN..WX..l|
00009f90  61 74 63 68 5f 6b 65 79  62 0d 57 62 04 0d 57 6c  |atch_keyb.Wb..Wl|
00009fa0  12 80 20 52 32 2c 52 30  2c 23 25 31 30 30 30 0d  |.. R2,R0,#%1000.|
00009fb0  57 76 19 53 54 52 42 20  52 32 2c 6b 65 79 5f 77  |Wv.STRB R2,key_w|
00009fc0  72 69 74 65 5f 65 6e 61  0d 57 80 11 43 4d 50 20  |rite_ena.W..CMP |
00009fd0  52 32 2c 23 25 31 30 30  30 0d 57 8a 10 4d 4f 56  |R2,#%1000.W..MOV|
00009fe0  4e 45 20 50 43 2c 52 31  34 0d 57 94 0d 4d 4f 56  |NE PC,R14.W..MOV|
00009ff0  20 52 32 2c 23 30 0d 57  9e 1a 53 54 52 42 20 52  | R2,#0.W..STRB R|
0000a000  32 2c 63 6f 6c 75 6d 6e  5f 63 6f 75 6e 74 65 72  |2,column_counter|
0000a010  0d 57 a8 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 57  |.W..MOV PC,R14.W|
0000a020  b2 04 0d 57 bc 12 2e 70  72 69 6e 74 65 72 5f 77  |...W...printer_w|
0000a030  72 69 74 65 0d 57 c6 0c  53 57 49 20 26 31 30 32  |rite.W..SWI &102|
0000a040  0d 57 d0 0c 53 57 49 20  26 31 30 31 0d 57 da 13  |.W..SWI &101.W..|
0000a050  53 57 49 20 22 4f 53 5f  57 72 69 74 65 43 22 0d  |SWI "OS_WriteC".|
0000a060  57 e4 1b 4d 4f 56 20 52  30 2c 23 31 35 32 20 3a  |W..MOV R0,#152 :|
0000a070  20 4d 4f 56 20 52 31 2c  23 33 0d 57 ee 28 53 57  | MOV R1,#3.W.(SW|
0000a080  49 20 22 4f 53 5f 42 79  74 65 22 20 3b 20 63 68  |I "OS_Byte" ; ch|
0000a090  65 63 6b 20 70 72 69 6e  74 65 72 20 62 75 66 66  |eck printer buff|
0000a0a0  65 72 0d 57 f8 12 42 43  53 20 70 72 69 6e 74 65  |er.W..BCS printe|
0000a0b0  72 5f 6f 6e 0d 58 02 1a  4d 4f 56 20 52 30 2c 23  |r_on.X..MOV R0,#|
0000a0c0  32 31 20 3a 20 4d 4f 56  20 52 31 2c 23 33 0d 58  |21 : MOV R1,#3.X|
0000a0d0  0c 20 53 57 49 20 22 4f  53 5f 42 79 74 65 22 20  |. SWI "OS_Byte" |
0000a0e0  3b 20 66 6c 75 73 68 20  62 75 66 66 65 72 0d 58  |; flush buffer.X|
0000a0f0  16 0f 2e 70 72 69 6e 74  65 72 5f 6f 6e 0d 58 20  |...printer_on.X |
0000a100  0c 53 57 49 20 26 31 30  33 0d 58 2a 17 4c 44 52  |.SWI &103.X*.LDR|
0000a110  42 20 52 30 2c 5b 6d 65  6d 2c 23 69 66 72 32 5d  |B R0,[mem,#ifr2]|
0000a120  0d 58 34 11 84 52 20 52  30 2c 52 30 2c 23 25 31  |.X4..R R0,R0,#%1|
0000a130  30 0d 58 3e 17 53 54 52  42 20 52 30 2c 5b 6d 65  |0.X>.STRB R0,[me|
0000a140  6d 2c 23 69 66 72 32 5d  0d 58 48 0e 4d 4f 56 20  |m,#ifr2].XH.MOV |
0000a150  50 43 2c 52 31 34 0d 58  52 04 0d 58 5c 0c 2e 72  |PC,R14.XR..X\..r|
0000a160  65 67 42 5f 34 31 0d 58  66 04 0d 58 70 1d 53 55  |egB_41.Xf..Xp.SU|
0000a170  42 20 52 31 32 2c 6d 65  6d 2c 23 35 31 32 20 3b  |B R12,mem,#512 ;|
0000a180  20 73 68 65 69 6c 61 0d  58 7a 1b 4c 44 52 42 20  | sheila.Xz.LDRB |
0000a190  52 31 2c 5b 52 31 32 2c  23 26 43 5d 20 3b 20 50  |R1,[R12,#&C] ; P|
0000a1a0  43 52 0d 58 84 16 4c 44  52 42 20 52 32 2c 5b 6d  |CR.X..LDRB R2,[m|
0000a1b0  65 6d 2c 23 69 66 72 5d  0d 58 8e 13 80 20 52 31  |em,#ifr].X... R1|
0000a1c0  33 2c 52 31 2c 23 25 31  31 31 30 0d 58 98 15 54  |3,R1,#%1110.X..T|
0000a1d0  45 51 20 52 31 33 2c 20  20 20 23 25 30 30 31 30  |EQ R13,   #%0010|
0000a1e0  0d 58 a2 15 54 45 51 4e  45 20 52 31 33 2c 20 23  |.X..TEQNE R13, #|
0000a1f0  25 30 31 31 30 0d 58 ac  14 42 49 43 45 51 20 52  |%0110.X..BICEQ R|
0000a200  32 2c 52 32 2c 23 25 31  31 0d 58 b6 14 42 49 43  |2,R2,#%11.X..BIC|
0000a210  4e 45 20 52 32 2c 52 32  2c 23 25 31 30 0d 58 c0  |NE R2,R2,#%10.X.|
0000a220  16 53 54 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 69  |.STRB R2,[mem,#i|
0000a230  66 72 5d 0d 58 ca 0c 2e  72 65 67 42 5f 34 46 0d  |fr].X...regB_4F.|
0000a240  58 d4 1d 53 55 42 20 52  31 32 2c 6d 65 6d 2c 23  |X..SUB R12,mem,#|
0000a250  35 31 32 20 3b 20 73 68  65 69 6c 61 0d 58 de 04  |512 ; sheila.X..|
0000a260  0d 58 e8 3d 53 54 52 42  20 52 30 2c 73 6f 75 6e  |.X.=STRB R0,soun|
0000a270  64 5f 64 61 74 61 20 20  20 20 20 20 20 20 20 20  |d_data          |
0000a280  20 20 3b 20 6b 65 65 70  20 61 20 63 6f 70 79 20  |  ; keep a copy |
0000a290  69 6e 20 73 6f 75 6e 64  5f 64 61 74 61 0d 58 f2  |in sound_data.X.|
0000a2a0  04 0d 58 fc 2a 4c 44 52  42 20 52 32 2c 5b 52 31  |..X.*LDRB R2,[R1|
0000a2b0  32 2c 23 26 34 33 5d 20  3b 20 52 32 3d 64 61 74  |2,#&43] ; R2=dat|
0000a2c0  61 20 64 69 72 65 63 74  69 6f 6e 0d 59 06 0e 80  |a direction.Y...|
0000a2d0  20 52 31 2c 52 30 2c 52  32 0d 59 10 0e 3b 4d 4f  | R1,R0,R2.Y..;MO|
0000a2e0  56 20 52 31 2c 52 30 0d  59 1a 40 80 53 20 52 30  |V R1,R0.Y.@.S R0|
0000a2f0  2c 52 31 2c 23 25 30 31  31 31 30 30 30 30 20 3a  |,R1,#%01110000 :|
0000a300  20 4d 4f 56 4e 45 20 52  30 2c 23 30 20 3a 20 53  | MOVNE R0,#0 : S|
0000a310  54 52 4e 45 42 20 52 30  2c 63 6f 6c 75 6d 6e 5f  |TRNEB R0,column_|
0000a320  63 6f 75 6e 74 65 72 0d  59 24 11 3b 82 20 52 31  |counter.Y$.;. R1|
0000a330  2c 52 31 2c 23 26 46 46  0d 59 2e 1a 3b 53 57 49  |,R1,#&FF.Y..;SWI|
0000a340  20 22 36 35 30 32 5f 47  65 74 6b 65 79 61 64 64  | "6502_Getkeyadd|
0000a350  72 22 0d 59 38 1a 4c 44  52 20 52 30 2c 5b 6d 65  |r".Y8.LDR R0,[me|
0000a360  6d 2c 23 6b 65 79 5f 61  64 64 72 5d 0d 59 42 21  |m,#key_addr].YB!|
0000a370  4c 44 52 42 20 52 32 2c  5b 52 30 5d 20 3b 20 73  |LDRB R2,[R0] ; s|
0000a380  68 69 66 74 20 70 72 65  73 73 65 64 3f 0d 59 4c  |hift pressed?.YL|
0000a390  0d 43 4d 50 20 52 32 2c  23 30 0d 59 56 14 41 44  |.CMP R2,#0.YV.AD|
0000a3a0  44 4e 45 20 52 30 2c 52  30 2c 23 32 35 36 0d 59  |DNE R0,R0,#256.Y|
0000a3b0  60 04 0d 59 6a 0f 80 20  52 32 2c 52 31 2c 23 26  |`..Yj.. R2,R1,#&|
0000a3c0  46 0d 59 74 29 43 4d 50  20 52 32 2c 23 26 46 20  |F.Yt)CMP R2,#&F |
0000a3d0  3b 20 63 6f 6c 75 6d 6e  20 63 6f 75 6e 74 65 72  |; column counter|
0000a3e0  20 64 69 73 61 62 6c 65  64 3f 0d 59 7e 1e 42 45  | disabled?.Y~.BE|
0000a3f0  51 20 64 69 73 61 62 6c  65 5f 63 6f 6c 75 6d 6e  |Q disable_column|
0000a400  5f 63 6f 75 6e 74 65 72  0d 59 88 1a 4c 44 52 42  |_counter.Y..LDRB|
0000a410  20 52 32 2c 63 6f 6c 75  6d 6e 5f 63 6f 75 6e 74  | R2,column_count|
0000a420  65 72 0d 59 92 0e 43 4d  50 20 52 32 2c 23 26 46  |er.Y..CMP R2,#&F|
0000a430  0d 59 9c 11 42 45 51 20  63 68 65 63 6b 5f 72 6f  |.Y..BEQ check_ro|
0000a440  77 0d 59 a6 04 0d 59 b0  13 3b 42 49 43 20 52 31  |w.Y...Y..;BIC R1|
0000a450  2c 52 31 2c 23 26 38 30  0d 59 ba 13 4c 44 52 42  |,R1,#&80.Y..LDRB|
0000a460  20 52 30 2c 5b 52 30 2c  52 31 5d 0d 59 c4 24 3b  | R0,[R0,R1].Y.$;|
0000a470  82 20 52 30 2c 52 30 2c  52 31 2c 4c 53 52 23 37  |. R0,R0,R1,LSR#7|
0000a480  20 3b 20 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 0d  | ; ************.|
0000a490  59 ce 0f 3b 82 20 52 30  2c 52 30 2c 23 31 0d 59  |Y..;. R0,R0,#1.Y|
0000a4a0  d8 1a 3b 43 4d 50 20 52  30 2c 23 30 20 3a 20 3b  |..;CMP R0,#0 : ;|
0000a4b0  ec 51 20 52 31 2c 23 30  0d 59 e2 15 84 52 20 52  |.Q R1,#0.Y...R R|
0000a4c0  30 2c 52 31 2c 52 30 2c  4c 53 4c 23 37 0d 59 ec  |0,R1,R0,LSL#7.Y.|
0000a4d0  14 3b 4d 4f 56 20 52 30  2c 52 31 2c 4c 53 4c 23  |.;MOV R0,R1,LSL#|
0000a4e0  37 0d 59 f6 0e 3b 4d 4f  56 20 52 30 2c 52 31 0d  |7.Y..;MOV R0,R1.|
0000a4f0  5a 00 17 3b 41 44 44 20  52 30 2c 52 31 2c 52 31  |Z..;ADD R0,R1,R1|
0000a500  2c 4c 53 4c 23 37 0d 5a  0a 04 0d 5a 14 10 3b 4d  |,LSL#7.Z...Z..;M|
0000a510  4f 56 20 52 30 2c 23 26  38 31 0d 5a 1e 10 3b 4d  |OV R0,#&81.Z..;M|
0000a520  4f 56 20 52 32 2c 23 26  46 46 0d 5a 28 12 3b 53  |OV R2,#&FF.Z(.;S|
0000a530  57 49 20 22 4f 53 5f 42  79 74 65 22 0d 5a 32 17  |WI "OS_Byte".Z2.|
0000a540  3b 43 4d 50 20 52 30 2c  23 39 38 20 3b 20 73 70  |;CMP R0,#98 ; sp|
0000a550  61 63 65 0d 5a 3c 10 3b  43 4d 50 20 52 31 2c 23  |ace.Z<.;CMP R1,#|
0000a560  26 46 46 0d 5a 46 0f 3b  ec 51 20 52 30 2c 23 26  |&FF.ZF.;.Q R0,#&|
0000a570  38 30 0d 5a 50 10 3b 4d  4f 56 4e 45 20 52 30 2c  |80.ZP.;MOVNE R0,|
0000a580  23 30 0d 5a 5a 16 53 54  52 42 20 52 30 2c 5b 52  |#0.ZZ.STRB R0,[R|
0000a590  31 32 2c 23 26 34 46 5d  0d 5a 64 16 53 54 52 42  |12,#&4F].Zd.STRB|
0000a5a0  20 52 30 2c 5b 52 31 32  2c 23 26 34 31 5d 0d 5a  | R0,[R12,#&41].Z|
0000a5b0  6e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 5a 78 04  |n.MOV PC,R14.Zx.|
0000a5c0  0d 5a 82 13 2e 63 6f 6c  75 6d 6e 5f 63 6f 75 6e  |.Z...column_coun|
0000a5d0  74 65 72 0d 5a 8c 0a 45  51 55 44 20 30 0d 5a 96  |ter.Z..EQUD 0.Z.|
0000a5e0  12 2e 6b 65 79 5f 77 72  69 74 65 5f 65 6e 61 0d  |..key_write_ena.|
0000a5f0  5a a0 0a 45 51 55 44 20  30 0d 5a aa 04 0d 5a b4  |Z..EQUD 0.Z...Z.|
0000a600  1b 2e 64 69 73 61 62 6c  65 5f 63 6f 6c 75 6d 6e  |..disable_column|
0000a610  5f 63 6f 75 6e 74 65 72  0d 5a be 1a 53 54 52 42  |_counter.Z..STRB|
0000a620  20 52 32 2c 63 6f 6c 75  6d 6e 5f 63 6f 75 6e 74  | R2,column_count|
0000a630  65 72 0d 5a c8 0e 2e 63  68 65 63 6b 5f 72 6f 77  |er.Z...check_row|
0000a640  0d 5a d2 16 80 20 52 31  2c 52 31 2c 23 25 30 30  |.Z... R1,R1,#%00|
0000a650  30 30 31 31 31 31 0d 5a  dc 0e 4d 4f 56 20 52 31  |001111.Z..MOV R1|
0000a660  33 2c 23 30 0d 5a e6 1a  3b 53 57 49 20 22 36 35  |3,#0.Z..;SWI "65|
0000a670  30 32 5f 47 65 74 6b 65  79 61 64 64 72 22 0d 5a  |02_Getkeyaddr".Z|
0000a680  f0 1a 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 6b  |..LDR R0,[mem,#k|
0000a690  65 79 5f 61 64 64 72 5d  0d 5a fa 21 4c 44 52 42  |ey_addr].Z.!LDRB|
0000a6a0  20 52 32 2c 5b 52 30 5d  20 3b 20 73 68 69 66 74  | R2,[R0] ; shift|
0000a6b0  20 70 72 65 73 73 65 64  3f 0d 5b 04 0d 43 4d 50  | pressed?.[..CMP|
0000a6c0  20 52 32 2c 23 30 0d 5b  0e 14 41 44 44 4e 45 20  | R2,#0.[..ADDNE |
0000a6d0  52 30 2c 52 30 2c 23 32  35 36 0d 5b 18 04 0d 5b  |R0,R0,#256.[...[|
0000a6e0  22 0d 2e 72 6f 77 5f 6c  6f 6f 70 0d 5b 2c 13 4c  |"..row_loop.[,.L|
0000a6f0  44 52 42 20 52 32 2c 5b  52 30 2c 52 31 5d 0d 5b  |DRB R2,[R0,R1].[|
0000a700  36 11 84 52 20 52 31 33  2c 52 31 33 2c 52 32 0d  |6..R R13,R13,R2.|
0000a710  5b 40 15 41 44 44 20 52  31 2c 52 31 2c 23 25 31  |[@.ADD R1,R1,#%1|
0000a720  30 30 30 30 0d 5b 4a 14  54 53 54 20 52 31 2c 23  |0000.[J.TST R1,#|
0000a730  25 31 31 31 30 30 30 30  0d 5b 54 10 42 4e 45 20  |%1110000.[T.BNE |
0000a740  72 6f 77 5f 6c 6f 6f 70  0d 5b 5e 12 80 53 20 52  |row_loop.[^..S R|
0000a750  31 32 2c 52 31 33 2c 23  25 31 0d 5b 68 19 4c 44  |12,R13,#%1.[h.LD|
0000a760  52 4e 45 42 20 52 31 33  2c 5b 6d 65 6d 2c 23 69  |RNEB R13,[mem,#i|
0000a770  66 72 5d 0d 5b 72 14 84  52 4e 45 20 52 31 33 2c  |fr].[r..RNE R13,|
0000a780  52 31 33 2c 52 31 32 0d  5b 7c 19 53 54 52 4e 45  |R13,R12.[|.STRNE|
0000a790  42 20 52 31 33 2c 5b 6d  65 6d 2c 23 69 66 72 5d  |B R13,[mem,#ifr]|
0000a7a0  0d 5b 86 1c 53 55 42 20  52 30 2c 6d 65 6d 2c 23  |.[..SUB R0,mem,#|
0000a7b0  35 31 32 20 3b 20 73 68  65 69 6c 61 0d 5b 90 15  |512 ; sheila.[..|
0000a7c0  4c 44 52 42 20 52 31 2c  5b 52 30 2c 23 26 34 46  |LDRB R1,[R0,#&4F|
0000a7d0  5d 0d 5b 9a 12 42 49 43  20 52 31 2c 52 31 2c 23  |].[..BIC R1,R1,#|
0000a7e0  26 38 30 0d 5b a4 16 84  52 20 52 31 2c 52 31 2c  |&80.[...R R1,R1,|
0000a7f0  52 31 32 2c 4c 53 4c 23  37 0d 5b ae 15 53 54 52  |R12,LSL#7.[..STR|
0000a800  42 20 52 31 2c 5b 52 30  2c 23 26 34 46 5d 0d 5b  |B R1,[R0,#&4F].[|
0000a810  b8 15 53 54 52 42 20 52  31 2c 5b 52 30 2c 23 26  |..STRB R1,[R0,#&|
0000a820  34 31 5d 0d 5b c2 0e 4d  4f 56 20 50 43 2c 52 31  |41].[..MOV PC,R1|
0000a830  34 0d 5b cc 04 0d 5b d6  14 2e 69 6e 74 65 72 72  |4.[...[...interr|
0000a840  75 70 74 5f 66 6c 61 67  73 0d 5b e0 16 4c 44 52  |upt_flags.[..LDR|
0000a850  42 20 52 32 2c 5b 6d 65  6d 2c 23 69 66 72 5d 0d  |B R2,[mem,#ifr].|
0000a860  5b ea 10 42 49 43 20 52  32 2c 52 32 2c 52 30 0d  |[..BIC R2,R2,R0.|
0000a870  5b f4 16 53 54 52 42 20  52 32 2c 5b 6d 65 6d 2c  |[..STRB R2,[mem,|
0000a880  23 69 66 72 5d 0d 5b fe  0e 4d 4f 56 20 50 43 2c  |#ifr].[..MOV PC,|
0000a890  52 31 34 0d 5c 08 04 0d  5c 12 04 0d 5c 1c 15 2e  |R14.\...\...\...|
0000a8a0  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000a8b0  0d 5c 26 16 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |.\&.LDRB R1,[mem|
0000a8c0  2c 23 69 65 72 5d 0d 5c  30 0f 54 53 54 20 52 30  |,#ier].\0.TST R0|
0000a8d0  2c 23 26 38 30 0d 5c 3a  12 42 49 43 45 51 20 52  |,#&80.\:.BICEQ R|
0000a8e0  31 2c 52 31 2c 52 30 0d  5c 44 11 84 52 4e 45 20  |1,R1,R0.\D..RNE |
0000a8f0  52 31 2c 52 31 2c 52 30  0d 5c 4e 17 84 52 20 52  |R1,R1,R0.\N..R R|
0000a900  31 2c 52 31 2c 23 26 38  30 20 3b 20 26 38 31 0d  |1,R1,#&80 ; &81.|
0000a910  5c 58 16 53 54 52 42 20  52 31 2c 5b 6d 65 6d 2c  |\X.STRB R1,[mem,|
0000a920  23 69 65 72 5d 0d 5c 62  11 3b 54 53 54 20 74 69  |#ier].\b.;TST ti|
0000a930  6d 65 2c 23 25 31 0d 5c  6c 17 3b 53 55 42 4e 45  |me,#%1.\l.;SUBNE|
0000a940  20 74 69 6d 65 2c 74 69  6d 65 2c 23 31 0d 5c 76  | time,time,#1.\v|
0000a950  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 5c 80 04 0d  |.MOV PC,R14.\...|
0000a960  5c 8a 15 2e 69 6e 74 65  72 72 75 70 74 5f 66 6c  |\...interrupt_fl|
0000a970  61 67 73 32 0d 5c 94 17  4c 44 52 42 20 52 32 2c  |ags2.\..LDRB R2,|
0000a980  5b 6d 65 6d 2c 23 69 66  72 32 5d 0d 5c 9e 10 42  |[mem,#ifr2].\..B|
0000a990  49 43 20 52 32 2c 52 32  2c 52 30 0d 5c a8 17 53  |IC R2,R2,R0.\..S|
0000a9a0  54 52 42 20 52 32 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R2,[mem,#ifr|
0000a9b0  32 5d 0d 5c b2 0e 4d 4f  56 20 50 43 2c 52 31 34  |2].\..MOV PC,R14|
0000a9c0  0d 5c bc 04 0d 5c c6 04  0d 5c d0 16 2e 69 6e 74  |.\...\...\...int|
0000a9d0  65 72 72 75 70 74 5f 65  6e 61 62 6c 65 32 0d 5c  |errupt_enable2.\|
0000a9e0  da 17 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..LDRB R1,[mem,#|
0000a9f0  69 65 72 32 5d 0d 5c e4  0f 54 53 54 20 52 30 2c  |ier2].\..TST R0,|
0000aa00  23 26 38 30 0d 5c ee 12  42 49 43 45 51 20 52 31  |#&80.\..BICEQ R1|
0000aa10  2c 52 31 2c 52 30 0d 5c  f8 11 84 52 4e 45 20 52  |,R1,R0.\...RNE R|
0000aa20  31 2c 52 31 2c 52 30 0d  5d 02 17 84 52 20 52 31  |1,R1,R0.]...R R1|
0000aa30  2c 52 31 2c 23 26 38 30  20 3b 20 26 38 31 0d 5d  |,R1,#&80 ; &81.]|
0000aa40  0c 17 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..STRB R1,[mem,#|
0000aa50  69 65 72 32 5d 0d 5d 16  0e 4d 4f 56 20 50 43 2c  |ier2].]..MOV PC,|
0000aa60  52 31 34 0d 5d 20 04 0d  5d 2a 0a 2e 66 6c 61 73  |R14.] ..]*..flas|
0000aa70  68 0d 5d 34 12 3b 4c 44  52 42 20 52 31 2c 65 6c  |h.]4.;LDRB R1,el|
0000aa80  69 74 65 0d 5d 3e 0e 3b  43 4d 50 20 52 31 2c 23  |ite.]>.;CMP R1,#|
0000aa90  30 0d 5d 48 12 3b 42 4e  45 20 73 6b 69 70 5f 66  |0.]H.;BNE skip_f|
0000aaa0  65 32 30 0d 5d 52 1d 54  53 54 20 46 2c 23 31 20  |e20.]R.TST F,#1 |
0000aab0  3c 3c 20 38 20 3b 20 70  61 74 63 68 20 6f 6e 3f  |<< 8 ; patch on?|
0000aac0  0d 5d 5c 11 42 4e 45 20  73 6b 69 70 5f 66 65 32  |.]\.BNE skip_fe2|
0000aad0  30 0d 5d 66 18 4c 44 52  42 20 52 31 32 2c 5b 6d  |0.]f.LDRB R12,[m|
0000aae0  65 6d 2c 23 66 65 32 30  5d 0d 5d 70 14 80 20 52  |em,#fe20].]p.. R|
0000aaf0  31 2c 52 31 32 2c 23 25  31 31 31 30 30 0d 5d 7a  |1,R12,#%11100.]z|
0000ab00  14 80 20 52 32 2c 52 30  2c 20 23 25 31 31 31 30  |.. R2,R0, #%1110|
0000ab10  30 0d 5d 84 0d 43 4d 50  20 52 31 2c 52 32 0d 5d  |0.]..CMP R1,R2.]|
0000ab20  8e 0f 4d 4f 56 4e 45 20  52 32 2c 23 31 0d 5d 98  |..MOVNE R2,#1.].|
0000ab30  1b 53 54 52 4e 45 42 20  52 32 2c 5b 6d 65 6d 2c  |.STRNEB R2,[mem,|
0000ab40  23 74 61 6d 70 65 72 5d  0d 5d a2 04 0d 5d ac 17  |#tamper].]...]..|
0000ab50  80 20 52 31 2c 52 31 32  2c 23 25 31 31 31 30 30  |. R1,R12,#%11100|
0000ab60  30 30 30 0d 5d b6 17 80  20 52 32 2c 52 30 2c 20  |000.]... R2,R0, |
0000ab70  23 25 31 31 31 30 30 30  30 30 0d 5d c0 0d 43 4d  |#%11100000.]..CM|
0000ab80  50 20 52 31 2c 52 32 0d  5d ca 0f 4d 4f 56 4e 45  |P R1,R2.]..MOVNE|
0000ab90  20 52 32 2c 23 31 0d 5d  d4 22 53 54 52 4e 45 42  | R2,#1.]."STRNEB|
0000aba0  20 52 32 2c 5b 6d 65 6d  2c 23 63 75 72 73 6f 72  | R2,[mem,#cursor|
0000abb0  5f 74 61 6d 70 65 72 5d  0d 5d de 04 0d 5d e8 0e  |_tamper].]...]..|
0000abc0  2e 73 6b 69 70 5f 66 65  32 30 0d 5d f2 18 4c 44  |.skip_fe20.]..LD|
0000abd0  52 42 20 52 31 32 2c 5b  6d 65 6d 2c 23 66 65 32  |RB R12,[mem,#fe2|
0000abe0  30 5d 0d 5d fc 17 53 54  52 42 20 52 30 2c 5b 6d  |0].]..STRB R0,[m|
0000abf0  65 6d 2c 23 66 65 32 30  5d 0d 5e 06 0e 54 53 54  |em,#fe20].^..TST|
0000ac00  20 52 30 2c 23 25 31 0d  5e 10 0c ec 51 20 52 30  | R0,#%1.^...Q R0|
0000ac10  2c 23 39 0d 5e 1a 10 4d  4f 56 4e 45 20 52 30 2c  |,#9.^..MOVNE R0,|
0000ac20  23 31 30 0d 5e 24 0d 4d  4f 56 20 52 31 2c 23 30  |#10.^$.MOV R1,#0|
0000ac30  0d 5e 2e 11 53 57 49 20  22 4f 53 5f 42 79 74 65  |.^..SWI "OS_Byte|
0000ac40  22 0d 5e 38 2d 42 20 70  6f 6b 65 5f 75 70 64 61  |".^8-B poke_upda|
0000ac50  74 65 70 69 78 65 6c 56  20 3b 20 69 6e 63 6c 75  |tepixelV ; inclu|
0000ac60  64 65 73 20 4d 4f 56 20  50 43 2c 52 31 34 0d 5e  |des MOV PC,R14.^|
0000ac70  42 0f 3b 4d 4f 56 20 50  43 2c 52 31 34 0d 5e 4c  |B.;MOV PC,R14.^L|
0000ac80  04 0d 5e 56 0a 3b 2e 66  65 32 30 0d 5e 60 0b 3b  |..^V.;.fe20.^`.;|
0000ac90  45 51 55 44 20 30 0d 5e  6a 04 0d 5e 74 0e 3b 2e  |EQUD 0.^j..^t.;.|
0000aca0  63 72 74 5f 72 65 67 73  0d 5e 7e 0b 3b 45 51 55  |crt_regs.^~.;EQU|
0000acb0  44 20 30 0d 5e 88 0b 3b  45 51 55 44 20 30 0d 5e  |D 0.^..;EQUD 0.^|
0000acc0  92 0b 3b 45 51 55 44 20  30 0d 5e 9c 0b 3b 45 51  |..;EQUD 0.^..;EQ|
0000acd0  55 44 20 30 0d 5e a6 0b  3b 45 51 55 44 20 30 0d  |UD 0.^..;EQUD 0.|
0000ace0  5e b0 04 0d 5e ba 40 3b  20 69 6e 63 6c 75 64 65  |^...^.@; include|
0000acf0  20 74 68 65 20 73 6f 75  6e 64 20 63 6f 64 65 20  | the sound code |
0000ad00  68 65 72 65 20 63 6f 6e  74 61 69 6e 65 64 20 69  |here contained i|
0000ad10  6e 20 74 68 65 20 53 6f  75 6e 64 20 6c 69 62 72  |n the Sound libr|
0000ad20  61 72 79 0d 5e c4 10 a4  73 6f 75 6e 64 5f 6c 61  |ary.^...sound_la|
0000ad30  74 63 68 0d 5e ce 04 0d  5e d8 04 0d 5e e2 0b a4  |tch.^...^...^...|
0000ad40  73 63 72 65 65 6e 0d 5e  ec 04 0d 5e f6 05 5d 0d  |screen.^...^..].|
0000ad50  5f 00 28 e7 20 48 57 53  63 72 6f 6c 6c 20 8c 20  |_.(. HWScroll . |
0000ad60  5b 4f 50 54 70 3a a4 68  61 72 64 77 61 72 65 73  |[OPTp:.hardwares|
0000ad70  63 72 6f 6c 6c 3a 5d 0d  5f 0a 09 5b 4f 50 54 70  |croll:]._..[OPTp|
0000ad80  0d 5f 14 04 0d 5f 1e 04  0d 5f 28 0b 2e 46 46 70  |._..._..._(..FFp|
0000ad90  61 67 65 0d 5f 32 15 3b  53 55 42 20 74 69 6d 65  |age._2.;SUB time|
0000ada0  2c 74 69 6d 65 2c 23 31  0d 5f 3c 0e 4d 4f 56 20  |,time,#1._<.MOV |
0000adb0  50 43 2c 52 31 34 0d 5f  46 04 0d 5f 50 0f 2e 75  |PC,R14._F.._P..u|
0000adc0  70 64 61 74 65 5f 70 61  6c 0d 5f 5a 1a 4c 44 52  |pdate_pal._Z.LDR|
0000add0  42 20 52 31 2c 5b 6d 65  6d 2c 23 50 61 6c 65 74  |B R1,[mem,#Palet|
0000ade0  74 65 5d 0d 5f 64 0d 43  4d 50 20 52 31 2c 23 30  |te]._d.CMP R1,#0|
0000adf0  0d 5f 6e 10 4d 4f 56 4e  45 20 50 43 2c 52 31 34  |._n.MOVNE PC,R14|
0000ae00  0d 5f 78 15 2e 66 6f 72  63 65 5f 75 70 64 61 74  |._x..force_updat|
0000ae10  65 5f 70 61 6c 0d 5f 82  1c 53 54 52 20 52 31 34  |e_pal._..STR R14|
0000ae20  2c 5b 6d 65 6d 2c 23 50  61 6c 65 74 74 65 2b 34  |,[mem,#Palette+4|
0000ae30  5d 0d 5f 8c 1a 53 55 42  20 52 31 33 2c 6d 65 6d  |]._..SUB R13,mem|
0000ae40  2c 23 2d 70 61 6c 5f 72  65 67 73 0d 5f 96 14 4c  |,#-pal_regs._..L|
0000ae50  44 52 42 20 52 30 2c 5b  52 31 33 2c 23 30 5d 0d  |DRB R0,[R13,#0].|
0000ae60  5f a0 0d 42 4c 20 64 6f  5f 70 61 6c 0d 5f aa 14  |_..BL do_pal._..|
0000ae70  4c 44 52 42 20 52 30 2c  5b 52 31 33 2c 23 31 5d  |LDRB R0,[R13,#1]|
0000ae80  0d 5f b4 0d 42 4c 20 64  6f 5f 70 61 6c 0d 5f be  |._..BL do_pal._.|
0000ae90  14 4c 44 52 42 20 52 30  2c 5b 52 31 33 2c 23 32  |.LDRB R0,[R13,#2|
0000aea0  5d 0d 5f c8 0d 42 4c 20  64 6f 5f 70 61 6c 0d 5f  |]._..BL do_pal._|
0000aeb0  d2 14 4c 44 52 42 20 52  30 2c 5b 52 31 33 2c 23  |..LDRB R0,[R13,#|
0000aec0  33 5d 0d 5f dc 0d 42 4c  20 64 6f 5f 70 61 6c 0d  |3]._..BL do_pal.|
0000aed0  5f e6 14 4c 44 52 42 20  52 30 2c 5b 52 31 33 2c  |_..LDRB R0,[R13,|
0000aee0  23 34 5d 0d 5f f0 0d 42  4c 20 64 6f 5f 70 61 6c  |#4]._..BL do_pal|
0000aef0  0d 5f fa 14 4c 44 52 42  20 52 30 2c 5b 52 31 33  |._..LDRB R0,[R13|
0000af00  2c 23 35 5d 0d 60 04 0d  42 4c 20 64 6f 5f 70 61  |,#5].`..BL do_pa|
0000af10  6c 0d 60 0e 14 4c 44 52  42 20 52 30 2c 5b 52 31  |l.`..LDRB R0,[R1|
0000af20  33 2c 23 36 5d 0d 60 18  0d 42 4c 20 64 6f 5f 70  |3,#6].`..BL do_p|
0000af30  61 6c 0d 60 22 14 4c 44  52 42 20 52 30 2c 5b 52  |al.`".LDRB R0,[R|
0000af40  31 33 2c 23 37 5d 0d 60  2c 0d 42 4c 20 64 6f 5f  |13,#7].`,.BL do_|
0000af50  70 61 6c 0d 60 36 14 4c  44 52 42 20 52 30 2c 5b  |pal.`6.LDRB R0,[|
0000af60  52 31 33 2c 23 38 5d 0d  60 40 0d 42 4c 20 64 6f  |R13,#8].`@.BL do|
0000af70  5f 70 61 6c 0d 60 4a 14  4c 44 52 42 20 52 30 2c  |_pal.`J.LDRB R0,|
0000af80  5b 52 31 33 2c 23 39 5d  0d 60 54 0d 42 4c 20 64  |[R13,#9].`T.BL d|
0000af90  6f 5f 70 61 6c 0d 60 5e  15 4c 44 52 42 20 52 30  |o_pal.`^.LDRB R0|
0000afa0  2c 5b 52 31 33 2c 23 31  30 5d 0d 60 68 0d 42 4c  |,[R13,#10].`h.BL|
0000afb0  20 64 6f 5f 70 61 6c 0d  60 72 15 4c 44 52 42 20  | do_pal.`r.LDRB |
0000afc0  52 30 2c 5b 52 31 33 2c  23 31 31 5d 0d 60 7c 0d  |R0,[R13,#11].`|.|
0000afd0  42 4c 20 64 6f 5f 70 61  6c 0d 60 86 15 4c 44 52  |BL do_pal.`..LDR|
0000afe0  42 20 52 30 2c 5b 52 31  33 2c 23 31 32 5d 0d 60  |B R0,[R13,#12].`|
0000aff0  90 0d 42 4c 20 64 6f 5f  70 61 6c 0d 60 9a 15 4c  |..BL do_pal.`..L|
0000b000  44 52 42 20 52 30 2c 5b  52 31 33 2c 23 31 33 5d  |DRB R0,[R13,#13]|
0000b010  0d 60 a4 0d 42 4c 20 64  6f 5f 70 61 6c 0d 60 ae  |.`..BL do_pal.`.|
0000b020  15 4c 44 52 42 20 52 30  2c 5b 52 31 33 2c 23 31  |.LDRB R0,[R13,#1|
0000b030  34 5d 0d 60 b8 0d 42 4c  20 64 6f 5f 70 61 6c 0d  |4].`..BL do_pal.|
0000b040  60 c2 15 4c 44 52 42 20  52 30 2c 5b 52 31 33 2c  |`..LDRB R0,[R13,|
0000b050  23 31 35 5d 0d 60 cc 0d  42 4c 20 64 6f 5f 70 61  |#15].`..BL do_pa|
0000b060  6c 0d 60 d6 29 4d 4f 56  20 52 31 34 2c 23 30 3a  |l.`.)MOV R14,#0:|
0000b070  53 54 52 42 20 52 31 34  2c 5b 6d 65 6d 2c 23 70  |STRB R14,[mem,#p|
0000b080  61 6c 5f 74 61 6d 70 65  72 5d 0d 60 e0 1b 4c 44  |al_tamper].`..LD|
0000b090  52 20 50 43 2c 5b 6d 65  6d 2c 23 50 61 6c 65 74  |R PC,[mem,#Palet|
0000b0a0  74 65 2b 34 5d 0d 60 ea  04 0d 60 f4 04 0d 60 fe  |te+4].`...`...`.|
0000b0b0  0c 2e 70 61 6c 65 74 74  65 0d 61 08 1a 53 55 42  |..palette.a..SUB|
0000b0c0  20 52 31 32 2c 6d 65 6d  2c 23 2d 70 61 6c 5f 72  | R12,mem,#-pal_r|
0000b0d0  65 67 73 0d 61 12 1a 53  54 52 42 20 52 30 2c 5b  |egs.a..STRB R0,[|
0000b0e0  52 31 32 2c 52 30 2c 4c  53 52 23 34 5d 0d 61 1c  |R12,R0,LSR#4].a.|
0000b0f0  04 0d 61 26 1a 4c 44 52  42 20 52 31 2c 5b 6d 65  |..a&.LDRB R1,[me|
0000b100  6d 2c 23 50 61 6c 65 74  74 65 5d 0d 61 30 0d 43  |m,#Palette].a0.C|
0000b110  4d 50 20 52 31 2c 23 30  0d 61 3a 10 4d 4f 56 4e  |MP R1,#0.a:.MOVN|
0000b120  45 20 50 43 2c 52 31 34  0d 61 44 04 0d 61 4e 29  |E PC,R14.aD..aN)|
0000b130  4d 4f 56 20 52 31 2c 23  32 35 35 3a 53 54 52 42  |MOV R1,#255:STRB|
0000b140  20 52 31 2c 5b 6d 65 6d  2c 23 70 61 6c 5f 74 61  | R1,[mem,#pal_ta|
0000b150  6d 70 65 72 5d 0d 61 58  0e 4d 4f 56 20 50 43 2c  |mper].aX.MOV PC,|
0000b160  52 31 34 0d 61 62 04 0d  61 6c 0b 2e 64 6f 5f 70  |R14.ab..al..do_p|
0000b170  61 6c 0d 61 76 17 4c 44  52 42 20 52 31 2c 5b 6d  |al.av.LDRB R1,[m|
0000b180  65 6d 2c 23 66 65 32 30  5d 0d 61 80 0f 54 53 54  |em,#fe20].a..TST|
0000b190  20 52 31 2c 23 25 31 30  0d 61 8a 19 4d 4f 56 4e  | R1,#%10.a..MOVN|
0000b1a0  45 20 50 43 2c 52 31 34  20 3b 20 6d 6f 64 65 20  |E PC,R14 ; mode |
0000b1b0  37 0d 61 94 13 80 20 52  31 2c 52 31 2c 23 25 31  |7.a... R1,R1,#%1|
0000b1c0  31 31 30 30 0d 61 9e 22  43 4d 50 20 52 31 2c 23  |1100.a."CMP R1,#|
0000b1d0  25 31 31 31 30 30 20 3a  20 42 45 51 20 74 77 6f  |%11100 : BEQ two|
0000b1e0  63 6f 6c 70 61 6c 0d 61  a8 22 43 4d 50 20 52 31  |colpal.a."CMP R1|
0000b1f0  2c 23 25 30 31 30 30 30  20 3a 20 42 45 51 20 74  |,#%01000 : BEQ t|
0000b200  77 6f 63 6f 6c 70 61 6c  0d 61 b2 23 43 4d 50 20  |wocolpal.a.#CMP |
0000b210  52 31 2c 23 25 31 31 30  30 30 20 3a 20 42 45 51  |R1,#%11000 : BEQ|
0000b220  20 66 6f 75 72 63 6f 6c  70 61 6c 0d 61 bc 23 43  | fourcolpal.a.#C|
0000b230  4d 50 20 52 31 2c 23 25  30 30 31 30 30 20 3a 20  |MP R1,#%00100 : |
0000b240  42 45 51 20 66 6f 75 72  63 6f 6c 70 61 6c 0d 61  |BEQ fourcolpal.a|
0000b250  c6 04 0d 61 d0 04 0d 61  da 12 2e 73 69 78 74 65  |...a...a...sixte|
0000b260  65 6e 63 6f 6c 70 61 6c  0d 61 e4 0f 80 20 52 31  |encolpal.a... R1|
0000b270  2c 52 30 2c 23 26 46 0d  61 ee 13 4d 4f 56 20 52  |,R0,#&F.a..MOV R|
0000b280  30 2c 52 30 2c 4c 53 52  23 34 0d 61 f8 0e 82 20  |0,R0,LSR#4.a... |
0000b290  52 31 2c 52 31 2c 23 37  0d 62 02 04 0d 62 0c 1a  |R1,R1,#7.b...b..|
0000b2a0  3b 43 4d 50 20 52 30 2c  23 30 20 3b 20 66 6f 72  |;CMP R0,#0 ; for|
0000b2b0  20 45 78 69 6c 65 0d 62  16 12 3b 53 57 49 4e 45  | Exile.b..;SWINE|
0000b2c0  20 45 54 43 20 45 54 43  0d 62 20 04 0d 62 2a 0f  | ETC ETC.b ..b*.|
0000b2d0  53 57 49 20 26 31 30 30  2b 31 39 0d 62 34 13 53  |SWI &100+19.b4.S|
0000b2e0  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 62  |WI "OS_WriteC".b|
0000b2f0  3e 0d 4d 4f 56 20 52 30  2c 52 31 0d 62 48 13 53  |>.MOV R0,R1.bH.S|
0000b300  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 62  |WI "OS_WriteC".b|
0000b310  52 0c 53 57 49 20 26 31  30 30 0d 62 5c 0c 53 57  |R.SWI &100.b\.SW|
0000b320  49 20 26 31 30 30 0d 62  66 0c 53 57 49 20 26 31  |I &100.bf.SWI &1|
0000b330  30 30 0d 62 70 0e 4d 4f  56 20 50 43 2c 52 31 34  |00.bp.MOV PC,R14|
0000b340  0d 62 7a 04 0d 62 84 0e  2e 74 77 6f 63 6f 6c 70  |.bz..b...twocolp|
0000b350  61 6c 0d 62 8e 0f 80 20  52 31 2c 52 30 2c 23 26  |al.b... R1,R0,#&|
0000b360  46 0d 62 98 13 4d 4f 56  20 52 30 2c 52 30 2c 4c  |F.b..MOV R0,R0,L|
0000b370  53 52 23 37 0d 62 a2 0e  82 20 52 31 2c 52 31 2c  |SR#7.b... R1,R1,|
0000b380  23 37 0d 62 ac 0d 43 4d  50 20 52 30 2c 23 31 0d  |#7.b..CMP R0,#1.|
0000b390  62 b6 19 ec 51 20 52 30  2c 23 33 20 3b 20 6d 6f  |b...Q R0,#3 ; mo|
0000b3a0  64 65 20 34 20 66 69 78  0d 62 c0 0f 53 57 49 20  |de 4 fix.b..SWI |
0000b3b0  26 31 30 30 2b 31 39 0d  62 ca 13 53 57 49 20 22  |&100+19.b..SWI "|
0000b3c0  4f 53 5f 57 72 69 74 65  43 22 0d 62 d4 0d 4d 4f  |OS_WriteC".b..MO|
0000b3d0  56 20 52 30 2c 52 31 0d  62 de 13 53 57 49 20 22  |V R0,R1.b..SWI "|
0000b3e0  4f 53 5f 57 72 69 74 65  43 22 0d 62 e8 0c 53 57  |OS_WriteC".b..SW|
0000b3f0  49 20 26 31 30 30 0d 62  f2 0c 53 57 49 20 26 31  |I &100.b..SWI &1|
0000b400  30 30 0d 62 fc 0c 53 57  49 20 26 31 30 30 0d 63  |00.b..SWI &100.c|
0000b410  06 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 63 10 04  |..MOV PC,R14.c..|
0000b420  0d 63 1a 0f 2e 66 6f 75  72 63 6f 6c 70 61 6c 0d  |.c...fourcolpal.|
0000b430  63 24 0f 80 20 52 31 2c  52 30 2c 23 26 46 0d 63  |c$.. R1,R0,#&F.c|
0000b440  2e 18 80 20 52 30 2c 52  30 2c 20 20 23 25 31 30  |... R0,R0,  #%10|
0000b450  31 30 30 30 30 30 0d 63  38 1a 54 53 54 20 52 30  |100000.c8.TST R0|
0000b460  2c 20 20 20 20 20 23 25  31 30 30 30 30 30 30 30  |,     #%10000000|
0000b470  0d 63 42 19 84 52 4e 45  20 52 30 2c 52 30 2c 23  |.cB..RNE R0,R0,#|
0000b480  25 30 31 30 30 30 30 30  30 0d 63 4c 1a 42 49 43  |%01000000.cL.BIC|
0000b490  4e 45 20 52 30 2c 52 30  2c 23 25 31 30 30 30 30  |NE R0,R0,#%10000|
0000b4a0  30 30 30 0d 63 56 13 4d  4f 56 20 52 30 2c 52 30  |000.cV.MOV R0,R0|
0000b4b0  2c 4c 53 52 23 35 0d 63  60 0e 82 20 52 31 2c 52  |,LSR#5.c`.. R1,R|
0000b4c0  31 2c 23 37 0d 63 6a 0f  53 57 49 20 26 31 30 30  |1,#7.cj.SWI &100|
0000b4d0  2b 31 39 0d 63 74 13 53  57 49 20 22 4f 53 5f 57  |+19.ct.SWI "OS_W|
0000b4e0  72 69 74 65 43 22 0d 63  7e 0d 4d 4f 56 20 52 30  |riteC".c~.MOV R0|
0000b4f0  2c 52 31 0d 63 88 13 53  57 49 20 22 4f 53 5f 57  |,R1.c..SWI "OS_W|
0000b500  72 69 74 65 43 22 0d 63  92 0c 53 57 49 20 26 31  |riteC".c..SWI &1|
0000b510  30 30 0d 63 9c 0c 53 57  49 20 26 31 30 30 0d 63  |00.c..SWI &100.c|
0000b520  a6 0c 53 57 49 20 26 31  30 30 0d 63 b0 0e 4d 4f  |..SWI &100.c..MO|
0000b530  56 20 50 43 2c 52 31 34  0d 63 ba 04 0d 63 c4 0b  |V PC,R14.c...c..|
0000b540  2e 6f 73 62 70 75 74 0d  63 ce 13 4d 4f 56 20 52  |.osbput.c..MOV R|
0000b550  30 2c 41 2c 4c 53 52 23  32 34 0d 63 d8 13 4d 4f  |0,A,LSR#24.c..MO|
0000b560  56 20 52 31 2c 59 2c 4c  53 52 23 32 34 0d 63 e2  |V R1,Y,LSR#24.c.|
0000b570  12 53 57 49 20 22 58 4f  53 5f 42 50 75 74 22 0d  |.SWI "XOS_BPut".|
0000b580  63 ec 11 42 56 53 20 73  77 69 5f 65 72 72 6f 72  |c..BVS swi_error|
0000b590  0d 63 f6 17 42 20 6f 70  63 6f 64 65 28 26 36 30  |.c..B opcode(&60|
0000b5a0  29 20 3b 20 72 74 73 0d  64 00 04 0d 64 0a 0b 2e  |) ; rts.d...d...|
0000b5b0  6f 73 62 67 65 74 0d 64  14 13 4d 4f 56 20 52 30  |osbget.d..MOV R0|
0000b5c0  2c 41 2c 4c 53 52 23 32  34 0d 64 1e 13 4d 4f 56  |,A,LSR#24.d..MOV|
0000b5d0  20 52 31 2c 59 2c 4c 53  52 23 32 34 0d 64 28 12  | R1,Y,LSR#24.d(.|
0000b5e0  53 57 49 20 22 58 4f 53  5f 42 47 65 74 22 0d 64  |SWI "XOS_BGet".d|
0000b5f0  32 11 42 56 53 20 73 77  69 5f 65 72 72 6f 72 0d  |2.BVS swi_error.|
0000b600  64 3c 13 4d 4f 56 20 41  2c 52 30 2c 4c 53 4c 23  |d<.MOV A,R0,LSL#|
0000b610  32 34 0d 64 46 0b a4 73  65 74 75 70 43 0d 64 50  |24.dF..setupC.dP|
0000b620  17 42 20 6f 70 63 6f 64  65 28 26 36 30 29 20 3b  |.B opcode(&60) ;|
0000b630  20 72 74 73 0d 64 5a 04  0d 64 64 0e 2e 73 77 69  | rts.dZ..dd..swi|
0000b640  5f 65 72 72 6f 72 0d 64  6e 15 41 44 44 20 6d 65  |_error.dn.ADD me|
0000b650  6d 2c 6d 65 6d 2c 23 26  31 30 30 0d 64 78 15 41  |m,mem,#&100.dx.A|
0000b660  44 44 20 6d 65 6d 2c 6d  65 6d 2c 23 26 30 30 32  |DD mem,mem,#&002|
0000b670  0d 64 82 13 4d 4f 56 20  52 31 2c 23 30 20 3b 20  |.d..MOV R1,#0 ; |
0000b680  42 52 4b 0d 64 8c 15 53  54 52 42 20 52 31 2c 5b  |BRK.d..STRB R1,[|
0000b690  6d 65 6d 2c 23 2d 32 5d  0d 64 96 1b 4c 44 52 42  |mem,#-2].d..LDRB|
0000b6a0  20 52 31 2c 5b 52 30 5d  20 3b 20 65 72 72 6f 72  | R1,[R0] ; error|
0000b6b0  20 6e 6f 0d 64 a0 15 53  54 52 42 20 52 31 2c 5b  | no.d..STRB R1,[|
0000b6c0  6d 65 6d 2c 23 2d 31 5d  0d 64 aa 10 41 44 44 20  |mem,#-1].d..ADD |
0000b6d0  52 30 2c 52 30 2c 23 34  0d 64 b4 0e 4d 4f 56 20  |R0,R0,#4.d..MOV |
0000b6e0  52 31 34 2c 23 30 0d 64  be 04 0d 64 c8 11 2e 73  |R14,#0.d...d...s|
0000b6f0  77 69 5f 65 72 72 5f 6c  6f 6f 70 0d 64 d2 15 4c  |wi_err_loop.d..L|
0000b700  44 52 42 20 52 31 33 2c  5b 52 30 2c 52 31 34 5d  |DRB R13,[R0,R14]|
0000b710  0d 64 dc 0e 43 4d 50 20  52 31 33 2c 23 30 0d 64  |.d..CMP R13,#0.d|
0000b720  e6 12 3b 4d 4f 56 20 52  31 33 2c 23 97 22 41 22  |..;MOV R13,#."A"|
0000b730  0d 64 f0 16 53 54 52 42  20 52 31 33 2c 5b 6d 65  |.d..STRB R13,[me|
0000b740  6d 2c 52 31 34 5d 0d 64  fa 12 41 44 44 20 52 31  |m,R14].d..ADD R1|
0000b750  34 2c 52 31 34 2c 23 31  0d 65 04 0f ec 51 20 52  |4,R14,#1.e...Q R|
0000b760  31 34 2c 23 32 35 35 0d  65 0e 10 43 4d 50 20 52  |14,#255.e..CMP R|
0000b770  31 34 2c 23 32 35 33 0d  65 18 14 42 4c 45 20 73  |14,#253.e..BLE s|
0000b780  77 69 5f 65 72 72 5f 6c  6f 6f 70 0d 65 22 04 0d  |wi_err_loop.e"..|
0000b790  65 2c 17 4d 4f 56 20 7a  70 63 2c 23 26 31 30 30  |e,.MOV zpc,#&100|
0000b7a0  20 3c 3c 20 31 36 0d 65  36 15 53 55 42 20 6d 65  | << 16.e6.SUB me|
0000b7b0  6d 2c 6d 65 6d 2c 23 26  31 30 30 0d 65 40 15 53  |m,mem,#&100.e@.S|
0000b7c0  55 42 20 6d 65 6d 2c 6d  65 6d 2c 23 26 30 30 32  |UB mem,mem,#&002|
0000b7d0  0d 65 4a 0b a4 66 65 74  63 68 32 0d 65 54 04 0d  |.eJ..fetch2.eT..|
0000b7e0  65 5e 12 2e 72 65 74 75  72 6e 5f 52 4f 4d 53 45  |e^..return_ROMSE|
0000b7f0  4c 0d 65 68 16 4c 44 52  42 20 52 30 2c 5b 6d 65  |L.eh.LDRB R0,[me|
0000b800  6d 2c 23 72 6f 6d 5d 0d  65 72 0e 4d 4f 56 20 50  |m,#rom].er.MOV P|
0000b810  43 2c 52 31 34 0d 65 7c  04 0d 65 86 12 2e 72 65  |C,R14.e|..e...re|
0000b820  74 75 72 6e 5f 41 43 43  43 4f 4e 0d 65 90 19 4c  |turn_ACCCON.e..L|
0000b830  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 41 43 43  |DRB R0,[mem,#ACC|
0000b840  43 4f 4e 5d 0d 65 9a 0e  4d 4f 56 20 50 43 2c 52  |CON].e..MOV PC,R|
0000b850  31 34 0d 65 a4 04 0d 65  ae 04 0d 65 b8 04 0d 65  |14.e...e...e...e|
0000b860  c2 11 2e 73 74 72 62 5f  72 6f 6d 5f 72 65 74 0d  |...strb_rom_ret.|
0000b870  65 cc 04 0d 65 d6 0b 2e  73 68 65 69 6c 61 0d 65  |e...e...sheila.e|
0000b880  e0 15 53 55 42 53 20 52  32 2c 52 31 2c 23 26 46  |..SUBS R2,R1,#&F|
0000b890  45 30 30 0d 65 ea 10 4d  4f 56 4c 54 20 50 43 2c  |E00.e..MOVLT PC,|
0000b8a0  52 31 34 0d 65 f4 14 53  55 42 53 20 52 32 2c 52  |R14.e..SUBS R2,R|
0000b8b0  32 2c 23 26 31 30 30 0d  65 fe 10 4d 4f 56 47 45  |2,#&100.e..MOVGE|
0000b8c0  20 50 43 2c 52 31 34 0d  66 08 0f 3b 42 47 45 20  | PC,R14.f..;BGE |
0000b8d0  46 46 70 61 67 65 0d 66  12 04 0d 66 1c 10 54 53  |FFpage.f...f..TS|
0000b8e0  54 20 74 69 6d 65 2c 23  25 31 0d 66 26 16 53 55  |T time,#%1.f&.SU|
0000b8f0  42 4e 45 20 74 69 6d 65  2c 74 69 6d 65 2c 23 31  |BNE time,time,#1|
0000b900  0d 66 30 16 53 55 42 45  51 20 74 69 6d 65 2c 74  |.f0.SUBEQ time,t|
0000b910  69 6d 65 2c 23 32 0d 66  3a 04 0d 66 44 15 3b 53  |ime,#2.f:..fD.;S|
0000b920  54 52 42 20 52 30 2c 5b  6d 65 6d 2c 52 31 5d 0d  |TRB R0,[mem,R1].|
0000b930  66 4e 26 53 55 42 20 52  32 2c 6d 65 6d 2c 23 26  |fN&SUB R2,mem,#&|
0000b940  31 30 30 30 30 3a 53 54  52 42 20 52 30 2c 5b 52  |10000:STRB R0,[R|
0000b950  32 2c 52 31 5d 0d 66 58  04 0d 66 62 10 80 20 52  |2,R1].fX..fb.. R|
0000b960  32 2c 52 31 2c 23 26 46  46 0d 66 6c 1b 3b 41 44  |2,R1,#&FF.fl.;AD|
0000b970  52 20 52 31 2c 73 68 65  69 6c 61 5f 77 72 69 74  |R R1,sheila_writ|
0000b980  65 74 61 62 0d 66 76 18  4c 44 52 20 50 43 2c 5b  |etab.fv.LDR PC,[|
0000b990  50 43 2c 52 32 2c 4c 53  4c 23 32 5d 0d 66 80 21  |PC,R2,LSL#2].f.!|
0000b9a0  45 51 55 44 20 30 20 3b  20 70 61 64 64 69 6e 67  |EQUD 0 ; padding|
0000b9b0  20 66 6f 72 20 70 69 70  65 6c 69 6e 65 0d 66 8a  | for pipeline.f.|
0000b9c0  14 2e 73 68 65 69 6c 61  5f 77 72 69 74 65 74 61  |..sheila_writeta|
0000b9d0  62 0d 66 94 09 3b 20 30  2d 46 0d 66 9e 0e 45 51  |b.f..; 0-F.f..EQ|
0000b9e0  55 44 20 64 75 6d 6d 79  0d 66 a8 0c 45 51 55 44  |UD dummy.f..EQUD|
0000b9f0  20 63 72 74 0d 66 b2 0e  45 51 55 44 20 64 75 6d  | crt.f..EQUD dum|
0000ba00  6d 79 0d 66 bc 0c 45 51  55 44 20 63 72 74 0d 66  |my.f..EQUD crt.f|
0000ba10  c6 0e 45 51 55 44 20 64  75 6d 6d 79 0d 66 d0 0c  |..EQUD dummy.f..|
0000ba20  45 51 55 44 20 63 72 74  0d 66 da 0e 45 51 55 44  |EQUD crt.f..EQUD|
0000ba30  20 64 75 6d 6d 79 0d 66  e4 0c 45 51 55 44 20 63  | dummy.f..EQUD c|
0000ba40  72 74 0d 66 ee 12 45 51  55 44 20 77 72 69 74 65  |rt.f..EQUD write|
0000ba50  46 45 30 38 0d 66 f8 12  45 51 55 44 20 77 72 69  |FE08.f..EQUD wri|
0000ba60  74 65 46 45 30 39 0d 67  02 12 a4 65 71 75 64 28  |teFE09.g...equd(|
0000ba70  36 2c 64 75 6d 6d 79 29  0d 67 0c 0b 3b 20 31 30  |6,dummy).g..; 10|
0000ba80  2d 31 37 0d 67 16 12 45  51 55 44 20 77 72 69 74  |-17.g..EQUD writ|
0000ba90  65 46 45 31 30 0d 67 20  12 a4 65 71 75 64 28 37  |eFE10.g ..equd(7|
0000baa0  2c 64 75 6d 6d 79 29 0d  67 2a 0b 3b 20 31 38 2d  |,dummy).g*.; 18-|
0000bab0  31 46 0d 67 34 19 45 51  55 44 20 77 72 69 74 65  |1F.g4.EQUD write|
0000bac0  5f 41 44 43 5f 73 74 61  74 75 73 0d 67 3e 12 a4  |_ADC_status.g>..|
0000bad0  65 71 75 64 28 37 2c 64  75 6d 6d 79 29 0d 67 48  |equd(7,dummy).gH|
0000bae0  0b 3b 20 32 30 2d 32 46  0d 67 52 0e 45 51 55 44  |.; 20-2F.gR.EQUD|
0000baf0  20 66 6c 61 73 68 0d 67  5c 10 45 51 55 44 20 70  | flash.g\.EQUD p|
0000bb00  61 6c 65 74 74 65 0d 67  66 13 a4 65 71 75 64 28  |alette.gf..equd(|
0000bb10  31 34 2c 64 75 6d 6d 79  29 0d 67 70 0b 3b 20 33  |14,dummy).gp.; 3|
0000bb20  30 2d 33 46 0d 67 7a 13  a4 65 71 75 64 28 34 2c  |0-3F.gz..equd(4,|
0000bb30  72 6f 6d 73 65 6c 29 0d  67 84 0f 45 51 55 44 20  |romsel).g..EQUD |
0000bb40  61 63 63 63 6f 6e 0d 67  8e 14 a4 65 71 75 64 28  |acccon.g...equd(|
0000bb50  31 31 2c 72 6f 6d 73 65  6c 29 0d 67 98 0b 3b 20  |11,romsel).g..; |
0000bb60  34 30 2d 34 46 0d 67 a2  0e 45 51 55 44 20 6c 61  |40-4F.g..EQUD la|
0000bb70  74 63 68 0d 67 ac 10 45  51 55 44 20 72 65 67 42  |tch.g..EQUD regB|
0000bb80  5f 34 31 0d 67 b6 0e 45  51 55 44 20 64 75 6d 6d  |_41.g..EQUD dumm|
0000bb90  79 0d 67 c0 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |y.g..EQUD dummy.|
0000bba0  67 ca 19 45 51 55 44 20  77 72 69 74 65 54 31 6c  |g..EQUD writeT1l|
0000bbb0  6f 77 5f 6c 61 74 63 68  0d 67 d4 1a 45 51 55 44  |ow_latch.g..EQUD|
0000bbc0  20 77 72 69 74 65 54 31  68 69 67 68 5f 63 6f 75  | writeT1high_cou|
0000bbd0  6e 74 0d 67 de 19 45 51  55 44 20 77 72 69 74 65  |nt.g..EQUD write|
0000bbe0  54 31 6c 6f 77 5f 6c 61  74 63 68 0d 67 e8 1a 45  |T1low_latch.g..E|
0000bbf0  51 55 44 20 77 72 69 74  65 54 31 68 69 67 68 5f  |QUD writeT1high_|
0000bc00  6c 61 74 63 68 0d 67 f2  19 45 51 55 44 20 77 72  |latch.g..EQUD wr|
0000bc10  69 74 65 54 32 6c 6f 77  5f 6c 61 74 63 68 0d 67  |iteT2low_latch.g|
0000bc20  fc 1a 45 51 55 44 20 77  72 69 74 65 54 32 68 69  |..EQUD writeT2hi|
0000bc30  67 68 5f 63 6f 75 6e 74  0d 68 06 0e 45 51 55 44  |gh_count.h..EQUD|
0000bc40  20 64 75 6d 6d 79 0d 68  10 0e 45 51 55 44 20 64  | dummy.h..EQUD d|
0000bc50  75 6d 6d 79 0d 68 1a 0e  45 51 55 44 20 64 75 6d  |ummy.h..EQUD dum|
0000bc60  6d 79 0d 68 24 18 45 51  55 44 20 69 6e 74 65 72  |my.h$.EQUD inter|
0000bc70  72 75 70 74 5f 66 6c 61  67 73 0d 68 2e 19 45 51  |rupt_flags.h..EQ|
0000bc80  55 44 20 69 6e 74 65 72  72 75 70 74 5f 65 6e 61  |UD interrupt_ena|
0000bc90  62 6c 65 0d 68 38 10 45  51 55 44 20 72 65 67 42  |ble.h8.EQUD regB|
0000bca0  5f 34 46 0d 68 42 0b 3b  20 35 30 2d 35 46 0d 68  |_4F.hB.; 50-5F.h|
0000bcb0  4c 0e 45 51 55 44 20 6c  61 74 63 68 0d 68 56 10  |L.EQUD latch.hV.|
0000bcc0  45 51 55 44 20 72 65 67  42 5f 34 31 0d 68 60 0e  |EQUD regB_41.h`.|
0000bcd0  45 51 55 44 20 64 75 6d  6d 79 0d 68 6a 0e 45 51  |EQUD dummy.hj.EQ|
0000bce0  55 44 20 64 75 6d 6d 79  0d 68 74 19 45 51 55 44  |UD dummy.ht.EQUD|
0000bcf0  20 77 72 69 74 65 54 31  6c 6f 77 5f 6c 61 74 63  | writeT1low_latc|
0000bd00  68 0d 68 7e 1a 45 51 55  44 20 77 72 69 74 65 54  |h.h~.EQUD writeT|
0000bd10  31 68 69 67 68 5f 63 6f  75 6e 74 0d 68 88 19 45  |1high_count.h..E|
0000bd20  51 55 44 20 77 72 69 74  65 54 31 6c 6f 77 5f 6c  |QUD writeT1low_l|
0000bd30  61 74 63 68 0d 68 92 1a  45 51 55 44 20 77 72 69  |atch.h..EQUD wri|
0000bd40  74 65 54 31 68 69 67 68  5f 6c 61 74 63 68 0d 68  |teT1high_latch.h|
0000bd50  9c 19 45 51 55 44 20 77  72 69 74 65 54 32 6c 6f  |..EQUD writeT2lo|
0000bd60  77 5f 6c 61 74 63 68 0d  68 a6 1a 45 51 55 44 20  |w_latch.h..EQUD |
0000bd70  77 72 69 74 65 54 32 68  69 67 68 5f 63 6f 75 6e  |writeT2high_coun|
0000bd80  74 0d 68 b0 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |t.h..EQUD dummy.|
0000bd90  68 ba 0e 45 51 55 44 20  64 75 6d 6d 79 0d 68 c4  |h..EQUD dummy.h.|
0000bda0  0e 45 51 55 44 20 64 75  6d 6d 79 0d 68 ce 18 45  |.EQUD dummy.h..E|
0000bdb0  51 55 44 20 69 6e 74 65  72 72 75 70 74 5f 66 6c  |QUD interrupt_fl|
0000bdc0  61 67 73 0d 68 d8 19 45  51 55 44 20 69 6e 74 65  |ags.h..EQUD inte|
0000bdd0  72 72 75 70 74 5f 65 6e  61 62 6c 65 0d 68 e2 10  |rrupt_enable.h..|
0000bde0  45 51 55 44 20 72 65 67  42 5f 34 46 0d 68 ec 0b  |EQUD regB_4F.h..|
0000bdf0  3b 20 36 30 2d 37 46 0d  68 f6 05 5d 0d 69 00 12  |; 60-7F.h..].i..|
0000be00  e7 20 49 4f 5f 50 6f 64  75 6c 65 25 20 8c 0d 69  |. IO_Podule% ..i|
0000be10  0a 09 5b 4f 50 54 70 0d  69 14 1d a4 65 71 75 64  |..[OPTp.i...equd|
0000be20  28 26 32 30 2c 49 4f 70  6f 64 75 6c 65 5f 57 72  |(&20,IOpodule_Wr|
0000be30  69 74 65 29 0d 69 1e 05  5d 0d 69 28 05 cc 0d 69  |ite).i..].i(...i|
0000be40  32 09 5b 4f 50 54 70 0d  69 3c 0e 45 51 55 44 20  |2.[OPTp.i<.EQUD |
0000be50  64 75 6d 6d 79 0d 69 46  16 45 51 55 44 20 70 72  |dummy.iF.EQUD pr|
0000be60  69 6e 74 65 72 5f 77 72  69 74 65 0d 69 50 0e 45  |inter_write.iP.E|
0000be70  51 55 44 20 64 75 6d 6d  79 0d 69 5a 0e 45 51 55  |QUD dummy.iZ.EQU|
0000be80  44 20 64 75 6d 6d 79 0d  69 64 19 45 51 55 44 20  |D dummy.id.EQUD |
0000be90  77 72 69 74 65 54 33 6c  6f 77 5f 6c 61 74 63 68  |writeT3low_latch|
0000bea0  0d 69 6e 1a 45 51 55 44  20 77 72 69 74 65 54 33  |.in.EQUD writeT3|
0000beb0  68 69 67 68 5f 63 6f 75  6e 74 0d 69 78 19 45 51  |high_count.ix.EQ|
0000bec0  55 44 20 77 72 69 74 65  54 33 6c 6f 77 5f 6c 61  |UD writeT3low_la|
0000bed0  74 63 68 0d 69 82 1a 45  51 55 44 20 77 72 69 74  |tch.i..EQUD writ|
0000bee0  65 54 33 68 69 67 68 5f  6c 61 74 63 68 0d 69 8c  |eT3high_latch.i.|
0000bef0  19 45 51 55 44 20 77 72  69 74 65 54 34 6c 6f 77  |.EQUD writeT4low|
0000bf00  5f 6c 61 74 63 68 0d 69  96 1a 45 51 55 44 20 77  |_latch.i..EQUD w|
0000bf10  72 69 74 65 54 34 68 69  67 68 5f 63 6f 75 6e 74  |riteT4high_count|
0000bf20  0d 69 a0 0e 45 51 55 44  20 64 75 6d 6d 79 0d 69  |.i..EQUD dummy.i|
0000bf30  aa 12 45 51 55 44 20 77  72 69 74 65 41 43 52 32  |..EQUD writeACR2|
0000bf40  0d 69 b4 0e 45 51 55 44  20 64 75 6d 6d 79 0d 69  |.i..EQUD dummy.i|
0000bf50  be 19 45 51 55 44 20 69  6e 74 65 72 72 75 70 74  |..EQUD interrupt|
0000bf60  5f 66 6c 61 67 73 32 0d  69 c8 1a 45 51 55 44 20  |_flags2.i..EQUD |
0000bf70  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000bf80  32 0d 69 d2 16 45 51 55  44 20 70 72 69 6e 74 65  |2.i..EQUD printe|
0000bf90  72 5f 77 72 69 74 65 0d  69 dc 04 0d 69 e6 0e 45  |r_write.i...i..E|
0000bfa0  51 55 44 20 64 75 6d 6d  79 0d 69 f0 16 45 51 55  |QUD dummy.i..EQU|
0000bfb0  44 20 70 72 69 6e 74 65  72 5f 77 72 69 74 65 0d  |D printer_write.|
0000bfc0  69 fa 0e 45 51 55 44 20  64 75 6d 6d 79 0d 6a 04  |i..EQUD dummy.j.|
0000bfd0  0e 45 51 55 44 20 64 75  6d 6d 79 0d 6a 0e 19 45  |.EQUD dummy.j..E|
0000bfe0  51 55 44 20 77 72 69 74  65 54 33 6c 6f 77 5f 6c  |QUD writeT3low_l|
0000bff0  61 74 63 68 0d 6a 18 1a  45 51 55 44 20 77 72 69  |atch.j..EQUD wri|
0000c000  74 65 54 33 68 69 67 68  5f 63 6f 75 6e 74 0d 6a  |teT3high_count.j|
0000c010  22 19 45 51 55 44 20 77  72 69 74 65 54 33 6c 6f  |".EQUD writeT3lo|
0000c020  77 5f 6c 61 74 63 68 0d  6a 2c 1a 45 51 55 44 20  |w_latch.j,.EQUD |
0000c030  77 72 69 74 65 54 33 68  69 67 68 5f 6c 61 74 63  |writeT3high_latc|
0000c040  68 0d 6a 36 19 45 51 55  44 20 77 72 69 74 65 54  |h.j6.EQUD writeT|
0000c050  34 6c 6f 77 5f 6c 61 74  63 68 0d 6a 40 1a 45 51  |4low_latch.j@.EQ|
0000c060  55 44 20 77 72 69 74 65  54 34 68 69 67 68 5f 63  |UD writeT4high_c|
0000c070  6f 75 6e 74 0d 6a 4a 0e  45 51 55 44 20 64 75 6d  |ount.jJ.EQUD dum|
0000c080  6d 79 0d 6a 54 0e 45 51  55 44 20 64 75 6d 6d 79  |my.jT.EQUD dummy|
0000c090  0d 6a 5e 0e 45 51 55 44  20 64 75 6d 6d 79 0d 6a  |.j^.EQUD dummy.j|
0000c0a0  68 19 45 51 55 44 20 69  6e 74 65 72 72 75 70 74  |h.EQUD interrupt|
0000c0b0  5f 66 6c 61 67 73 32 0d  6a 72 1a 45 51 55 44 20  |_flags2.jr.EQUD |
0000c0c0  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000c0d0  32 0d 6a 7c 16 45 51 55  44 20 70 72 69 6e 74 65  |2.j|.EQUD printe|
0000c0e0  72 5f 77 72 69 74 65 0d  6a 86 05 5d 0d 6a 90 05  |r_write.j..].j..|
0000c0f0  cd 0d 6a 9a 04 0d 6a a4  09 5b 4f 50 54 70 0d 6a  |..j...j..[OPTp.j|
0000c100  ae 0b 3b 20 38 30 2d 42  46 0d 6a b8 14 a4 65 71  |..; 80-BF.j...eq|
0000c110  75 64 28 26 34 30 2c 64  75 6d 6d 79 29 0d 6a c2  |ud(&40,dummy).j.|
0000c120  0b 3b 20 43 30 2d 43 46  0d 6a cc 19 45 51 55 44  |.; C0-CF.j..EQUD|
0000c130  20 77 72 69 74 65 5f 41  44 43 5f 73 74 61 74 75  | write_ADC_statu|
0000c140  73 0d 6a d6 13 a4 65 71  75 64 28 31 35 2c 64 75  |s.j...equd(15,du|
0000c150  6d 6d 79 29 0d 6a e0 0b  3b 20 44 30 2d 46 46 0d  |mmy).j..; D0-FF.|
0000c160  6a ea 14 a4 65 71 75 64  28 26 33 30 2c 64 75 6d  |j...equd(&30,dum|
0000c170  6d 79 29 0d 6a f4 04 0d  6a fe 10 2e 6c 64 72 62  |my).j...j...ldrb|
0000c180  5f 46 46 70 61 67 65 0d  6b 08 15 3b 53 55 42 20  |_FFpage.k..;SUB |
0000c190  74 69 6d 65 2c 74 69 6d  65 2c 23 31 0d 6b 12 0e  |time,time,#1.k..|
0000c1a0  4d 4f 56 20 50 43 2c 52  31 34 0d 6b 1c 04 0d 6b  |MOV PC,R14.k...k|
0000c1b0  26 21 2e 6c 64 72 62 38  30 30 30 20 3b 20 67 72  |&!.ldrb8000 ; gr|
0000c1c0  65 61 74 65 72 20 74 68  61 6e 20 38 30 30 30 0d  |eater than 8000.|
0000c1d0  6b 30 04 0d 6b 3a 11 43  4d 50 20 52 31 2c 23 26  |k0..k:.CMP R1,#&|
0000c1e0  46 45 30 30 0d 6b 44 13  42 48 53 20 6c 64 72 62  |FE00.kD.BHS ldrb|
0000c1f0  5f 73 68 65 69 6c 61 0d  6b 4e 04 0d 6b 58 14 4c  |_sheila.kN..kX.L|
0000c200  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 52 31 5d 0d  |DRB R0,[mem,R1].|
0000c210  6b 62 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 6b 6c  |kb.MOV PC,R14.kl|
0000c220  04 0d 6b 76 04 0d 6b 80  15 3b 4d 4f 56 20 52 31  |..kv..k..;MOV R1|
0000c230  2c 52 31 2c 4c 53 52 23  31 36 0d 6b 8a 05 5d 0d  |,R1,LSR#16.k..].|
0000c240  6b 94 0e e7 20 6d 61 73  74 65 72 20 8c 0d 6b 9e  |k... master ..k.|
0000c250  09 5b 4f 50 54 70 0d 6b  a8 24 2e 6c 64 72 62 31  |.[OPTp.k.$.ldrb1|
0000c260  36 5f 38 30 30 30 20 3b  20 67 72 65 61 74 65 72  |6_8000 ; greater|
0000c270  20 74 68 61 6e 20 38 30  30 30 0d 6b b2 04 0d 6b  | than 8000.k...k|
0000c280  bc 17 43 4d 50 20 52 31  2c 23 26 46 45 30 30 20  |..CMP R1,#&FE00 |
0000c290  3c 3c 20 31 36 0d 6b c6  15 42 48 53 20 6c 64 72  |<< 16.k..BHS ldr|
0000c2a0  62 31 36 5f 73 68 65 69  6c 61 0d 6b d0 04 0d 6b  |b16_sheila.k...k|
0000c2b0  da 1b 4c 44 52 42 20 52  30 2c 5b 6d 65 6d 2c 52  |..LDRB R0,[mem,R|
0000c2c0  31 2c 4c 53 52 23 31 36  5d 0d 6b e4 0e 4d 4f 56  |1,LSR#16].k..MOV|
0000c2d0  20 50 43 2c 52 31 34 0d  6b ee 04 0d 6b f8 12 2e  | PC,R14.k...k...|
0000c2e0  6c 64 72 62 31 36 5f 73  63 72 65 65 6e 0d 6c 02  |ldrb16_screen.l.|
0000c2f0  17 43 4d 50 20 52 31 2c  23 26 38 30 30 30 20 3c  |.CMP R1,#&8000 <|
0000c300  3c 20 31 36 0d 6c 0c 13  42 48 53 20 6c 64 72 62  |< 16.l..BHS ldrb|
0000c310  31 36 5f 38 30 30 30 0d  6c 16 04 0d 6c 20 1a 4c  |16_8000.l...l .L|
0000c320  44 52 42 20 52 31 32 2c  5b 6d 65 6d 2c 23 41 43  |DRB R12,[mem,#AC|
0000c330  43 43 4f 4e 5d 0d 6c 2a  04 0d 6c 34 18 43 4d 50  |CCON].l*..l4.CMP|
0000c340  20 7a 70 63 2c 23 26 43  30 30 30 20 3c 3c 20 31  | zpc,#&C000 << 1|
0000c350  36 0d 6c 3e 17 4d 4f 56  4c 54 20 52 31 33 2c 52  |6.l>.MOVLT R13,R|
0000c360  31 32 2c 4c 53 52 23 31  0d 6c 48 11 4d 4f 56 47  |12,LSR#1.lH.MOVG|
0000c370  45 20 52 31 33 2c 52 31  32 0d 6c 52 18 43 4d 50  |E R13,R12.lR.CMP|
0000c380  20 7a 70 63 2c 23 26 45  30 30 30 20 3c 3c 20 31  | zpc,#&E000 << 1|
0000c390  36 0d 6c 5c 35 4d 4f 56  47 45 20 52 31 33 2c 52  |6.l\5MOVGE R13,R|
0000c3a0  31 32 2c 4c 53 52 23 31  20 20 20 20 3b 20 6e 6f  |12,LSR#1    ; no|
0000c3b0  77 20 62 69 74 20 31 20  6f 66 20 52 31 33 20 69  |w bit 1 of R13 i|
0000c3c0  73 20 77 68 61 74 0d 6c  66 2c 20 20 20 20 20 20  |s what.lf,      |
0000c3d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
0000c3e0  20 3b 20 77 65 20 6d 75  73 74 20 6c 6f 6f 6b 20  | ; we must look |
0000c3f0  61 74 0d 6c 70 04 0d 6c  7a 10 54 53 54 20 52 31  |at.lp..lz.TST R1|
0000c400  33 2c 23 25 31 30 0d 6c  84 38 53 55 42 4e 45 20  |3,#%10.l.8SUBNE |
0000c410  52 31 33 2c 6d 65 6d 2c  23 28 26 33 30 30 30 2b  |R13,mem,#(&3000+|
0000c420  26 31 30 30 30 30 29 20  3b 20 73 68 61 64 6f 77  |&10000) ; shadow|
0000c430  20 73 63 72 65 65 6e 20  6d 65 6d 6f 72 79 0d 6c  | screen memory.l|
0000c440  8e 0f 3b ec 51 20 52 31  33 2c 6d 65 6d 0d 6c 98  |..;.Q R13,mem.l.|
0000c450  1d 4c 44 52 4e 45 42 20  52 30 2c 5b 52 31 33 2c  |.LDRNEB R0,[R13,|
0000c460  52 31 2c 4c 53 52 23 31  36 5d 0d 6c a2 1d 4c 44  |R1,LSR#16].l..LD|
0000c470  52 45 51 42 20 52 30 2c  5b 6d 65 6d 2c 52 31 2c  |REQB R0,[mem,R1,|
0000c480  4c 53 52 23 31 36 5d 0d  6c ac 0e 4d 4f 56 20 50  |LSR#16].l..MOV P|
0000c490  43 2c 52 31 34 0d 6c b6  05 5d 0d 6c c0 05 cc 0d  |C,R14.l..].l....|
0000c4a0  6c ca 09 5b 4f 50 54 70  0d 6c d4 12 2e 6c 64 72  |l..[OPTp.l...ldr|
0000c4b0  62 31 36 5f 73 63 72 65  65 6e 0d 6c de 17 43 4d  |b16_screen.l..CM|
0000c4c0  50 20 52 31 2c 23 26 46  45 30 30 20 3c 3c 20 31  |P R1,#&FE00 << 1|
0000c4d0  36 0d 6c e8 15 42 48 53  20 6c 64 72 62 31 36 5f  |6.l..BHS ldrb16_|
0000c4e0  73 68 65 69 6c 61 0d 6c  f2 04 0d 6c fc 1b 4c 44  |sheila.l...l..LD|
0000c4f0  52 42 20 52 30 2c 5b 6d  65 6d 2c 52 31 2c 4c 53  |RB R0,[mem,R1,LS|
0000c500  52 23 31 36 5d 0d 6d 06  0e 4d 4f 56 20 50 43 2c  |R#16].m..MOV PC,|
0000c510  52 31 34 0d 6d 10 05 5d  0d 6d 1a 05 cd 0d 6d 24  |R14.m..].m....m$|
0000c520  04 0d 6d 2e 0e e7 20 6d  61 73 74 65 72 20 8c 0d  |..m... master ..|
0000c530  6d 38 09 5b 4f 50 54 70  0d 6d 42 04 0d 6d 4c 10  |m8.[OPTp.mB..mL.|
0000c540  2e 6c 64 72 62 5f 73 63  72 65 65 6e 0d 6d 56 21  |.ldrb_screen.mV!|
0000c550  2e 6c 64 72 62 33 30 30  30 20 3b 20 67 72 65 61  |.ldrb3000 ; grea|
0000c560  74 65 72 20 74 68 61 6e  20 33 30 30 30 0d 6d 60  |ter than 3000.m`|
0000c570  04 0d 6d 6a 11 43 4d 50  20 52 31 2c 23 26 38 30  |..mj.CMP R1,#&80|
0000c580  30 30 0d 6d 74 10 42 48  53 20 6c 64 72 62 38 30  |00.mt.BHS ldrb80|
0000c590  30 30 0d 6d 7e 04 0d 6d  88 1a 4c 44 52 42 20 52  |00.m~..m..LDRB R|
0000c5a0  31 32 2c 5b 6d 65 6d 2c  23 41 43 43 43 4f 4e 5d  |12,[mem,#ACCCON]|
0000c5b0  0d 6d 92 04 0d 6d 9c 18  43 4d 50 20 7a 70 63 2c  |.m...m..CMP zpc,|
0000c5c0  23 26 43 30 30 30 20 3c  3c 20 31 36 0d 6d a6 17  |#&C000 << 16.m..|
0000c5d0  4d 4f 56 4c 54 20 52 31  33 2c 52 31 32 2c 4c 53  |MOVLT R13,R12,LS|
0000c5e0  52 23 31 0d 6d b0 11 4d  4f 56 47 45 20 52 31 33  |R#1.m..MOVGE R13|
0000c5f0  2c 52 31 32 0d 6d ba 18  43 4d 50 20 7a 70 63 2c  |,R12.m..CMP zpc,|
0000c600  23 26 45 30 30 30 20 3c  3c 20 31 36 0d 6d c4 35  |#&E000 << 16.m.5|
0000c610  4d 4f 56 47 45 20 52 31  33 2c 52 31 32 2c 4c 53  |MOVGE R13,R12,LS|
0000c620  52 23 31 20 20 20 20 3b  20 6e 6f 77 20 62 69 74  |R#1    ; now bit|
0000c630  20 31 20 6f 66 20 52 31  33 20 69 73 20 77 68 61  | 1 of R13 is wha|
0000c640  74 0d 6d ce 2c 20 20 20  20 20 20 20 20 20 20 20  |t.m.,           |
0000c650  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 77 65  |            ; we|
0000c660  20 6d 75 73 74 20 6c 6f  6f 6b 20 61 74 0d 6d d8  | must look at.m.|
0000c670  04 0d 6d e2 10 54 53 54  20 52 31 33 2c 23 25 31  |..m..TST R13,#%1|
0000c680  30 0d 6d ec 38 53 55 42  4e 45 20 52 31 33 2c 6d  |0.m.8SUBNE R13,m|
0000c690  65 6d 2c 23 28 26 33 30  30 30 2b 26 31 30 30 30  |em,#(&3000+&1000|
0000c6a0  30 29 20 3b 20 73 68 61  64 6f 77 20 73 63 72 65  |0) ; shadow scre|
0000c6b0  65 6e 20 6d 65 6d 6f 72  79 0d 6d f6 0f 3b ec 51  |en memory.m..;.Q|
0000c6c0  20 52 31 33 2c 6d 65 6d  0d 6e 00 16 4c 44 52 4e  | R13,mem.n..LDRN|
0000c6d0  45 42 20 52 30 2c 5b 52  31 33 2c 52 31 5d 0d 6e  |EB R0,[R13,R1].n|
0000c6e0  0a 16 4c 44 52 45 51 42  20 52 30 2c 5b 6d 65 6d  |..LDREQB R0,[mem|
0000c6f0  2c 52 31 5d 0d 6e 14 0e  4d 4f 56 20 50 43 2c 52  |,R1].n..MOV PC,R|
0000c700  31 34 0d 6e 1e 05 5d 0d  6e 28 05 cc 0d 6e 32 09  |14.n..].n(...n2.|
0000c710  5b 4f 50 54 70 0d 6e 3c  10 2e 6c 64 72 62 5f 73  |[OPTp.n<..ldrb_s|
0000c720  63 72 65 65 6e 0d 6e 46  21 2e 6c 64 72 62 33 30  |creen.nF!.ldrb30|
0000c730  30 30 20 3b 20 67 72 65  61 74 65 72 20 74 68 61  |00 ; greater tha|
0000c740  6e 20 33 30 30 30 0d 6e  50 11 43 4d 50 20 52 31  |n 3000.nP.CMP R1|
0000c750  2c 23 26 46 45 30 30 0d  6e 5a 13 42 48 53 20 6c  |,#&FE00.nZ.BHS l|
0000c760  64 72 62 5f 73 68 65 69  6c 61 0d 6e 64 14 4c 44  |drb_sheila.nd.LD|
0000c770  52 42 20 52 30 2c 5b 6d  65 6d 2c 52 31 5d 0d 6e  |RB R0,[mem,R1].n|
0000c780  6e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 6e 78 05  |n.MOV PC,R14.nx.|
0000c790  5d 0d 6e 82 05 cd 0d 6e  8c 04 0d 6e 96 09 5b 4f  |].n....n...n..[O|
0000c7a0  50 54 70 0d 6e a0 04 0d  6e aa 12 2e 6c 64 72 62  |PTp.n...n...ldrb|
0000c7b0  31 36 5f 73 68 65 69 6c  61 0d 6e b4 15 4d 4f 56  |16_sheila.n..MOV|
0000c7c0  20 52 31 32 2c 52 31 2c  4c 53 52 23 31 36 0d 6e  | R12,R1,LSR#16.n|
0000c7d0  be 12 42 20 6c 64 72 62  5f 73 68 65 69 6c 61 32  |..B ldrb_sheila2|
0000c7e0  0d 6e c8 04 0d 6e d2 10  2e 6c 64 72 62 5f 73 68  |.n...n...ldrb_sh|
0000c7f0  65 69 6c 61 0d 6e dc 0e  4d 4f 56 20 52 31 32 2c  |eila.n..MOV R12,|
0000c800  52 31 0d 6e e6 04 0d 6e  f0 11 2e 6c 64 72 62 5f  |R1.n...n...ldrb_|
0000c810  73 68 65 69 6c 61 32 0d  6e fa 15 4c 44 52 42 20  |sheila2.n..LDRB |
0000c820  52 30 2c 5b 6d 65 6d 2c  52 31 32 5d 0d 6f 04 04  |R0,[mem,R12].o..|
0000c830  0d 6f 0e 16 53 55 42 53  20 52 32 2c 52 31 32 2c  |.o..SUBS R2,R12,|
0000c840  23 26 46 45 30 30 0d 6f  18 10 4d 4f 56 4c 54 20  |#&FE00.o..MOVLT |
0000c850  50 43 2c 52 31 34 0d 6f  22 14 53 55 42 53 20 52  |PC,R14.o".SUBS R|
0000c860  32 2c 52 32 2c 23 26 31  30 30 0d 6f 2c 13 42 47  |2,R2,#&100.o,.BG|
0000c870  45 20 6c 64 72 62 5f 46  46 70 61 67 65 0d 6f 36  |E ldrb_FFpage.o6|
0000c880  04 0d 6f 40 27 53 55 42  20 52 32 2c 6d 65 6d 2c  |..o@'SUB R2,mem,|
0000c890  23 26 31 30 30 30 30 3a  4c 44 52 42 20 52 30 2c  |#&10000:LDRB R0,|
0000c8a0  5b 52 32 2c 52 31 32 5d  0d 6f 4a 04 0d 6f 54 14  |[R2,R12].oJ..oT.|
0000c8b0  53 55 42 20 74 69 6d 65  2c 74 69 6d 65 2c 23 31  |SUB time,time,#1|
0000c8c0  0d 6f 5e 04 0d 6f 68 11  80 20 52 32 2c 52 31 32  |.o^..oh.. R2,R12|
0000c8d0  2c 23 26 46 46 0d 6f 72  1a 3b 41 44 52 20 52 31  |,#&FF.or.;ADR R1|
0000c8e0  2c 73 68 65 69 6c 61 5f  72 65 61 64 74 61 62 0d  |,sheila_readtab.|
0000c8f0  6f 7c 18 4c 44 52 20 50  43 2c 5b 50 43 2c 52 32  |o|.LDR PC,[PC,R2|
0000c900  2c 4c 53 4c 23 32 5d 0d  6f 86 21 45 51 55 44 20  |,LSL#2].o.!EQUD |
0000c910  30 20 3b 20 70 61 64 64  69 6e 67 20 66 6f 72 20  |0 ; padding for |
0000c920  70 69 70 65 6c 69 6e 65  0d 6f 90 13 2e 73 68 65  |pipeline.o...she|
0000c930  69 6c 61 5f 72 65 61 64  74 61 62 0d 6f 9a 09 3b  |ila_readtab.o..;|
0000c940  20 30 2d 46 0d 6f a4 12  a4 65 71 75 64 28 38 2c  | 0-F.o...equd(8,|
0000c950  64 75 6d 6d 79 29 0d 6f  ae 11 45 51 55 44 20 72  |dummy).o..EQUD r|
0000c960  65 61 64 46 45 30 38 0d  6f b8 11 45 51 55 44 20  |eadFE08.o..EQUD |
0000c970  72 65 61 64 46 45 30 39  0d 6f c2 12 a4 65 71 75  |readFE09.o...equ|
0000c980  64 28 36 2c 64 75 6d 6d  79 29 0d 6f cc 0b 3b 20  |d(6,dummy).o..; |
0000c990  31 30 2d 32 46 0d 6f d6  11 45 51 55 44 20 72 65  |10-2F.o..EQUD re|
0000c9a0  61 64 46 45 31 30 0d 6f  e0 14 a4 65 71 75 64 28  |adFE10.o...equd(|
0000c9b0  26 31 46 2c 64 75 6d 6d  79 29 0d 6f ea 0b 3b 20  |&1F,dummy).o..; |
0000c9c0  33 30 2d 33 46 0d 6f f4  1a a4 65 71 75 64 28 34  |30-3F.o...equd(4|
0000c9d0  2c 72 65 74 75 72 6e 5f  52 4f 4d 53 45 4c 29 0d  |,return_ROMSEL).|
0000c9e0  6f fe 1a a4 65 71 75 64  28 34 2c 72 65 74 75 72  |o...equd(4,retur|
0000c9f0  6e 5f 41 43 43 43 4f 4e  29 0d 70 08 12 a4 65 71  |n_ACCCON).p...eq|
0000ca00  75 64 28 38 2c 64 75 6d  6d 79 29 0d 70 12 0b 3b  |ud(8,dummy).p..;|
0000ca10  20 34 30 2d 34 46 0d 70  1c 0f 45 51 55 44 20 6c  | 40-4F.p..EQUD l|
0000ca20  64 72 62 34 30 0d 70 26  0f 45 51 55 44 20 6c 64  |drb40.p&.EQUD ld|
0000ca30  72 62 34 31 0d 70 30 0e  45 51 55 44 20 64 75 6d  |rb41.p0.EQUD dum|
0000ca40  6d 79 0d 70 3a 0e 45 51  55 44 20 64 75 6d 6d 79  |my.p:.EQUD dummy|
0000ca50  0d 70 44 18 45 51 55 44  20 72 65 61 64 54 31 6c  |.pD.EQUD readT1l|
0000ca60  6f 77 5f 63 6f 75 6e 74  0d 70 4e 19 45 51 55 44  |ow_count.pN.EQUD|
0000ca70  20 72 65 61 64 54 31 68  69 67 68 5f 63 6f 75 6e  | readT1high_coun|
0000ca80  74 0d 70 58 18 45 51 55  44 20 72 65 61 64 54 31  |t.pX.EQUD readT1|
0000ca90  6c 6f 77 5f 6c 61 74 63  68 0d 70 62 19 45 51 55  |low_latch.pb.EQU|
0000caa0  44 20 72 65 61 64 54 31  68 69 67 68 5f 6c 61 74  |D readT1high_lat|
0000cab0  63 68 0d 70 6c 18 45 51  55 44 20 72 65 61 64 54  |ch.pl.EQUD readT|
0000cac0  32 6c 6f 77 5f 63 6f 75  6e 74 0d 70 76 19 45 51  |2low_count.pv.EQ|
0000cad0  55 44 20 72 65 61 64 54  32 68 69 67 68 5f 63 6f  |UD readT2high_co|
0000cae0  75 6e 74 0d 70 80 0e 45  51 55 44 20 64 75 6d 6d  |unt.p..EQUD dumm|
0000caf0  79 0d 70 8a 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |y.p..EQUD dummy.|
0000cb00  70 94 0e 45 51 55 44 20  64 75 6d 6d 79 0d 70 9e  |p..EQUD dummy.p.|
0000cb10  11 45 51 55 44 20 72 65  61 64 5f 69 66 72 0d 70  |.EQUD read_ifr.p|
0000cb20  a8 11 45 51 55 44 20 72  65 61 64 5f 69 65 72 0d  |..EQUD read_ier.|
0000cb30  70 b2 0f 45 51 55 44 20  6c 64 72 62 34 46 0d 70  |p..EQUD ldrb4F.p|
0000cb40  bc 0b 3b 20 35 30 2d 35  46 0d 70 c6 0f 45 51 55  |..; 50-5F.p..EQU|
0000cb50  44 20 6c 64 72 62 34 30  0d 70 d0 0f 45 51 55 44  |D ldrb40.p..EQUD|
0000cb60  20 6c 64 72 62 34 31 0d  70 da 0e 45 51 55 44 20  | ldrb41.p..EQUD |
0000cb70  64 75 6d 6d 79 0d 70 e4  0e 45 51 55 44 20 64 75  |dummy.p..EQUD du|
0000cb80  6d 6d 79 0d 70 ee 18 45  51 55 44 20 72 65 61 64  |mmy.p..EQUD read|
0000cb90  54 31 6c 6f 77 5f 63 6f  75 6e 74 0d 70 f8 19 45  |T1low_count.p..E|
0000cba0  51 55 44 20 72 65 61 64  54 31 68 69 67 68 5f 63  |QUD readT1high_c|
0000cbb0  6f 75 6e 74 0d 71 02 18  45 51 55 44 20 72 65 61  |ount.q..EQUD rea|
0000cbc0  64 54 31 6c 6f 77 5f 6c  61 74 63 68 0d 71 0c 19  |dT1low_latch.q..|
0000cbd0  45 51 55 44 20 72 65 61  64 54 31 68 69 67 68 5f  |EQUD readT1high_|
0000cbe0  6c 61 74 63 68 0d 71 16  18 45 51 55 44 20 72 65  |latch.q..EQUD re|
0000cbf0  61 64 54 32 6c 6f 77 5f  63 6f 75 6e 74 0d 71 20  |adT2low_count.q |
0000cc00  19 45 51 55 44 20 72 65  61 64 54 32 68 69 67 68  |.EQUD readT2high|
0000cc10  5f 63 6f 75 6e 74 0d 71  2a 0e 45 51 55 44 20 64  |_count.q*.EQUD d|
0000cc20  75 6d 6d 79 0d 71 34 0e  45 51 55 44 20 64 75 6d  |ummy.q4.EQUD dum|
0000cc30  6d 79 0d 71 3e 0e 45 51  55 44 20 64 75 6d 6d 79  |my.q>.EQUD dummy|
0000cc40  0d 71 48 11 45 51 55 44  20 72 65 61 64 5f 69 66  |.qH.EQUD read_if|
0000cc50  72 0d 71 52 11 45 51 55  44 20 72 65 61 64 5f 69  |r.qR.EQUD read_i|
0000cc60  65 72 0d 71 5c 0f 45 51  55 44 20 6c 64 72 62 34  |er.q\.EQUD ldrb4|
0000cc70  46 0d 71 66 0b 3b 20 36  30 2d 36 46 0d 71 70 05  |F.qf.; 60-6F.qp.|
0000cc80  5d 0d 71 7a 12 e7 20 49  4f 5f 50 6f 64 75 6c 65  |].qz.. IO_Podule|
0000cc90  25 20 8c 0d 71 84 09 5b  4f 50 54 70 0d 71 8e 1c  |% ..q..[OPTp.q..|
0000cca0  a4 65 71 75 64 28 26 32  30 2c 49 4f 70 6f 64 75  |.equd(&20,IOpodu|
0000ccb0  6c 65 5f 52 65 61 64 29  0d 71 98 05 5d 0d 71 a2  |le_Read).q..].q.|
0000ccc0  05 cc 0d 71 ac 09 5b 4f  50 54 70 0d 71 b6 0e 45  |...q..[OPTp.q..E|
0000ccd0  51 55 44 20 64 75 6d 6d  79 0d 71 c0 0e 45 51 55  |QUD dummy.q..EQU|
0000cce0  44 20 64 75 6d 6d 79 0d  71 ca 0e 45 51 55 44 20  |D dummy.q..EQUD |
0000ccf0  64 75 6d 6d 79 0d 71 d4  0e 45 51 55 44 20 64 75  |dummy.q..EQUD du|
0000cd00  6d 6d 79 0d 71 de 18 45  51 55 44 20 72 65 61 64  |mmy.q..EQUD read|
0000cd10  54 33 6c 6f 77 5f 63 6f  75 6e 74 0d 71 e8 19 45  |T3low_count.q..E|
0000cd20  51 55 44 20 72 65 61 64  54 33 68 69 67 68 5f 63  |QUD readT3high_c|
0000cd30  6f 75 6e 74 0d 71 f2 18  45 51 55 44 20 72 65 61  |ount.q..EQUD rea|
0000cd40  64 54 33 6c 6f 77 5f 6c  61 74 63 68 0d 71 fc 19  |dT3low_latch.q..|
0000cd50  45 51 55 44 20 72 65 61  64 54 33 68 69 67 68 5f  |EQUD readT3high_|
0000cd60  6c 61 74 63 68 0d 72 06  18 45 51 55 44 20 72 65  |latch.r..EQUD re|
0000cd70  61 64 54 34 6c 6f 77 5f  63 6f 75 6e 74 0d 72 10  |adT4low_count.r.|
0000cd80  19 45 51 55 44 20 72 65  61 64 54 34 68 69 67 68  |.EQUD readT4high|
0000cd90  5f 63 6f 75 6e 74 0d 72  1a 0e 45 51 55 44 20 64  |_count.r..EQUD d|
0000cda0  75 6d 6d 79 0d 72 24 0e  45 51 55 44 20 64 75 6d  |ummy.r$.EQUD dum|
0000cdb0  6d 79 0d 72 2e 0e 45 51  55 44 20 64 75 6d 6d 79  |my.r..EQUD dummy|
0000cdc0  0d 72 38 12 45 51 55 44  20 72 65 61 64 5f 69 66  |.r8.EQUD read_if|
0000cdd0  72 32 0d 72 42 12 45 51  55 44 20 72 65 61 64 5f  |r2.rB.EQUD read_|
0000cde0  69 65 72 32 0d 72 4c 0e  45 51 55 44 20 64 75 6d  |ier2.rL.EQUD dum|
0000cdf0  6d 79 0d 72 56 04 0d 72  60 0e 45 51 55 44 20 64  |my.rV..r`.EQUD d|
0000ce00  75 6d 6d 79 0d 72 6a 0e  45 51 55 44 20 64 75 6d  |ummy.rj.EQUD dum|
0000ce10  6d 79 0d 72 74 0e 45 51  55 44 20 64 75 6d 6d 79  |my.rt.EQUD dummy|
0000ce20  0d 72 7e 0e 45 51 55 44  20 64 75 6d 6d 79 0d 72  |.r~.EQUD dummy.r|
0000ce30  88 18 45 51 55 44 20 72  65 61 64 54 33 6c 6f 77  |..EQUD readT3low|
0000ce40  5f 63 6f 75 6e 74 0d 72  92 19 45 51 55 44 20 72  |_count.r..EQUD r|
0000ce50  65 61 64 54 33 68 69 67  68 5f 63 6f 75 6e 74 0d  |eadT3high_count.|
0000ce60  72 9c 18 45 51 55 44 20  72 65 61 64 54 33 6c 6f  |r..EQUD readT3lo|
0000ce70  77 5f 6c 61 74 63 68 0d  72 a6 19 45 51 55 44 20  |w_latch.r..EQUD |
0000ce80  72 65 61 64 54 33 68 69  67 68 5f 6c 61 74 63 68  |readT3high_latch|
0000ce90  0d 72 b0 18 45 51 55 44  20 72 65 61 64 54 34 6c  |.r..EQUD readT4l|
0000cea0  6f 77 5f 63 6f 75 6e 74  0d 72 ba 19 45 51 55 44  |ow_count.r..EQUD|
0000ceb0  20 72 65 61 64 54 34 68  69 67 68 5f 63 6f 75 6e  | readT4high_coun|
0000cec0  74 0d 72 c4 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |t.r..EQUD dummy.|
0000ced0  72 ce 0e 45 51 55 44 20  64 75 6d 6d 79 0d 72 d8  |r..EQUD dummy.r.|
0000cee0  0e 45 51 55 44 20 64 75  6d 6d 79 0d 72 e2 12 45  |.EQUD dummy.r..E|
0000cef0  51 55 44 20 72 65 61 64  5f 69 66 72 32 0d 72 ec  |QUD read_ifr2.r.|
0000cf00  12 45 51 55 44 20 72 65  61 64 5f 69 65 72 32 0d  |.EQUD read_ier2.|
0000cf10  72 f6 0e 45 51 55 44 20  64 75 6d 6d 79 0d 73 00  |r..EQUD dummy.s.|
0000cf20  05 5d 0d 73 0a 05 cd 0d  73 14 04 0d 73 1e 09 5b  |.].s....s...s..[|
0000cf30  4f 50 54 70 0d 73 28 0b  3b 20 38 30 2d 46 46 0d  |OPTp.s(.; 80-FF.|
0000cf40  73 32 14 a4 65 71 75 64  28 26 38 30 2c 64 75 6d  |s2..equd(&80,dum|
0000cf50  6d 79 29 0d 73 3c 04 0d  73 46 0f a4 73 6f 75 6e  |my).s<..sF..soun|
0000cf60  64 5f 6d 69 73 63 0d 73  50 04 0d 73 5a 0c 2e 6f  |d_misc.sP..sZ..o|
0000cf70  70 63 6f 64 65 37 0d 73  64 11 53 57 49 20 26 31  |pcode7.sd.SWI &1|
0000cf80  30 30 2b 97 22 4f 22 0d  73 6e 11 53 57 49 20 26  |00+."O".sn.SWI &|
0000cf90  31 30 30 2b 97 22 70 22  0d 73 78 11 53 57 49 20  |100+."p".sx.SWI |
0000cfa0  26 31 30 30 2b 97 22 37  22 0d 73 82 11 53 57 49  |&100+."7".s..SWI|
0000cfb0  20 26 31 30 30 2b 97 22  20 22 0d 73 8c 0f a4 70  | &100+." ".s...p|
0000cfc0  72 69 6e 74 28 7a 70 63  29 0d 73 96 0d 42 20 6f  |rint(zpc).s..B o|
0000cfd0  70 63 6f 64 65 37 0d 73  a0 04 0d 73 aa 25 a4 61  |pcode7.s...s.%.a|
0000cfe0  6c 69 67 6e 31 36 20 3b  20 66 69 74 20 69 6e 74  |lign16 ; fit int|
0000cff0  6f 20 63 61 63 68 65 20  62 65 74 74 65 72 3f 0d  |o cache better?.|
0000d000  73 b4 04 0d 73 be 0c a4  6f 70 63 6f 64 65 73 0d  |s...s...opcodes.|
0000d010  73 c8 04 0d 73 d2 11 2e  70 61 74 63 68 5f 73 63  |s...s...patch_sc|
0000d020  72 65 65 6e 0d 73 dc 0e  4d 4f 56 20 50 43 2c 52  |reen.s..MOV PC,R|
0000d030  31 34 0d 73 e6 10 2e 70  61 74 63 68 5f 70 69 78  |14.s...patch_pix|
0000d040  65 6c 0d 73 f0 0e 4d 4f  56 20 50 43 2c 52 31 34  |el.s..MOV PC,R14|
0000d050  0d 73 fa 04 0d 74 04 08  2e 65 6e 64 0d 74 0e 05  |.s...t...end.t..|
0000d060  5d 0d 74 18 05 ed 0d 74  22 38 ff 22 4c 6f 61 64  |].t....t"8."Load|
0000d070  20 3c 36 35 30 32 45 6d  24 44 69 72 3e 2e 53 52  | <6502Em$Dir>.SR|
0000d080  43 2e 72 65 76 74 61 62  6c 65 20 22 2b c3 7e 28  |C.revtable "+.~(|
0000d090  63 6f 64 65 2b 6d 6f 64  65 30 74 61 62 29 0d 74  |code+mode0tab).t|
0000d0a0  2c 38 ff 22 4c 6f 61 64  20 3c 36 35 30 32 45 6d  |,8."Load <6502Em|
0000d0b0  24 44 69 72 3e 2e 53 52  43 2e 6d 6f 64 65 31 74  |$Dir>.SRC.mode1t|
0000d0c0  61 62 20 22 2b c3 7e 28  63 6f 64 65 2b 6d 6f 64  |ab "+.~(code+mod|
0000d0d0  65 31 74 61 62 29 0d 74  36 39 ff 22 4c 6f 61 64  |e1tab).t69."Load|
0000d0e0  20 3c 36 35 30 32 45 6d  24 44 69 72 3e 2e 53 52  | <6502Em$Dir>.SR|
0000d0f0  43 2e 48 6d 6f 64 65 32  74 61 62 20 22 2b c3 7e  |C.Hmode2tab "+.~|
0000d100  28 63 6f 64 65 2b 6d 6f  64 65 32 74 61 62 29 0d  |(code+mode2tab).|
0000d110  74 40 39 ff 22 4c 6f 61  64 20 3c 36 35 30 32 45  |t@9."Load <6502E|
0000d120  6d 24 44 69 72 3e 2e 53  52 43 2e 48 6d 6f 64 65  |m$Dir>.SRC.Hmode|
0000d130  34 74 61 62 20 22 2b c3  7e 28 63 6f 64 65 2b 6d  |4tab "+.~(code+m|
0000d140  6f 64 65 34 74 61 62 29  0d 74 4a 39 ff 22 4c 6f  |ode4tab).tJ9."Lo|
0000d150  61 64 20 3c 36 35 30 32  45 6d 24 44 69 72 3e 2e  |ad <6502Em$Dir>.|
0000d160  53 52 43 2e 48 6d 6f 64  65 35 74 61 62 20 22 2b  |SRC.Hmode5tab "+|
0000d170  c3 7e 28 63 6f 64 65 2b  6d 6f 64 65 35 74 61 62  |.~(code+mode5tab|
0000d180  29 0d 74 54 04 0d 74 5e  05 e1 0d 74 68 04 0d 74  |).tT..t^...th..t|
0000d190  72 06 44 45 0d 74 7c 06  dd 46 0d 74 86 04 0d 74  |r.DE.t|..F.t...t|
0000d1a0  90 04 0d 74 9a 10 dd a4  6c 64 72 62 32 28 52 2c  |...t....ldrb2(R,|
0000d1b0  53 29 0d 74 a4 15 e7 20  52 3c 3e 30 20 84 20 53  |S).t... R<>0 . S|
0000d1c0  3c 3e 31 20 8c 20 fa 0d  74 ae 0e e7 20 6d 61 73  |<>1 . ..t... mas|
0000d1d0  74 65 72 20 8c 0d 74 b8  09 5b 4f 50 54 70 0d 74  |ter ..t..[OPTp.t|
0000d1e0  c2 13 3b 4c 44 52 42 20  52 2c 5b 6d 65 6d 2c 53  |..;LDRB R,[mem,S|
0000d1f0  5d 0d 74 cc 11 3b 43 4d  50 20 53 2c 23 26 46 45  |].t..;CMP S,#&FE|
0000d200  30 30 0d 74 d6 15 3b 42  4c 48 53 20 6c 64 72 62  |00.t..;BLHS ldrb|
0000d210  5f 73 68 65 69 6c 61 0d  74 e0 10 43 4d 50 20 53  |_sheila.t..CMP S|
0000d220  2c 23 26 33 30 30 30 0d  74 ea 14 4c 44 52 4c 4f  |,#&3000.t..LDRLO|
0000d230  42 20 52 2c 5b 6d 65 6d  2c 53 5d 0d 74 f4 14 42  |B R,[mem,S].t..B|
0000d240  4c 48 53 20 6c 64 72 62  5f 73 63 72 65 65 6e 0d  |LHS ldrb_screen.|
0000d250  74 fe 05 5d 0d 75 08 05  cc 0d 75 12 09 5b 4f 50  |t..].u....u..[OP|
0000d260  54 70 0d 75 1c 12 4c 44  52 42 20 52 2c 5b 6d 65  |Tp.u..LDRB R,[me|
0000d270  6d 2c 53 5d 0d 75 26 10  43 4d 50 20 53 2c 23 26  |m,S].u&.CMP S,#&|
0000d280  46 45 30 30 0d 75 30 14  42 4c 48 53 20 6c 64 72  |FE00.u0.BLHS ldr|
0000d290  62 5f 73 68 65 69 6c 61  0d 75 3a 05 5d 0d 75 44  |b_sheila.u:.].uD|
0000d2a0  05 cd 0d 75 4e 07 3d 22  22 0d 75 58 04 0d 75 62  |...uN.="".uX..ub|
0000d2b0  11 dd a4 6c 64 72 62 31  36 28 52 2c 53 29 0d 75  |...ldrb16(R,S).u|
0000d2c0  6c 15 e7 20 52 3c 3e 30  20 84 20 53 3c 3e 31 20  |l.. R<>0 . S<>1 |
0000d2d0  8c 20 fa 0d 75 76 0e e7  20 6d 61 73 74 65 72 20  |. ..uv.. master |
0000d2e0  8c 0d 75 80 09 5b 4f 50  54 70 0d 75 8a 1a 3b 4c  |..u..[OPTp.u..;L|
0000d2f0  44 52 42 20 52 2c 5b 6d  65 6d 2c 53 2c 4c 53 52  |DRB R,[mem,S,LSR|
0000d300  23 31 36 5d 0d 75 94 17  3b 43 4d 50 20 53 2c 23  |#16].u..;CMP S,#|
0000d310  26 46 45 30 30 20 3c 3c  20 31 36 0d 75 9e 17 3b  |&FE00 << 16.u..;|
0000d320  42 4c 48 53 20 6c 64 72  62 31 36 5f 73 68 65 69  |BLHS ldrb16_shei|
0000d330  6c 61 0d 75 a8 16 43 4d  50 20 53 2c 23 26 33 30  |la.u..CMP S,#&30|
0000d340  30 30 20 3c 3c 20 31 36  0d 75 b2 1b 4c 44 52 4c  |00 << 16.u..LDRL|
0000d350  4f 42 20 52 2c 5b 6d 65  6d 2c 53 2c 4c 53 52 23  |OB R,[mem,S,LSR#|
0000d360  31 36 5d 0d 75 bc 16 42  4c 48 53 20 6c 64 72 62  |16].u..BLHS ldrb|
0000d370  31 36 5f 73 63 72 65 65  6e 0d 75 c6 05 5d 0d 75  |16_screen.u..].u|
0000d380  d0 05 cc 0d 75 da 09 5b  4f 50 54 70 0d 75 e4 19  |....u..[OPTp.u..|
0000d390  4c 44 52 42 20 52 2c 5b  6d 65 6d 2c 53 2c 4c 53  |LDRB R,[mem,S,LS|
0000d3a0  52 23 31 36 5d 0d 75 ee  16 43 4d 50 20 53 2c 23  |R#16].u..CMP S,#|
0000d3b0  26 46 45 30 30 20 3c 3c  20 31 36 0d 75 f8 16 42  |&FE00 << 16.u..B|
0000d3c0  4c 48 53 20 6c 64 72 62  31 36 5f 73 68 65 69 6c  |LHS ldrb16_sheil|
0000d3d0  61 0d 76 02 05 5d 0d 76  0c 05 cd 0d 76 16 07 3d  |a.v..].v....v..=|
0000d3e0  22 22 0d 76 20 04 0d 76  2a 0f dd a4 73 74 72 62  |"".v ..v*...strb|
0000d3f0  28 52 2c 53 29 0d 76 34  15 e7 20 52 3c 3e 30 20  |(R,S).v4.. R<>0 |
0000d400  84 20 53 3c 3e 31 20 8c  20 85 0d 76 3e 09 5b 4f  |. S<>1 . ..v>.[O|
0000d410  50 54 70 0d 76 48 1e 43  4d 50 20 53 2c 46 2c 4c  |PTp.vH.CMP S,F,L|
0000d420  53 52 23 31 36 20 3b 20  77 72 61 70 5f 61 64 64  |SR#16 ; wrap_add|
0000d430  72 0d 76 52 11 3b 43 4d  50 20 53 2c 23 26 33 30  |r.vR.;CMP S,#&30|
0000d440  30 30 0d 76 5c 14 53 54  52 4c 54 42 20 52 2c 5b  |00.v\.STRLTB R,[|
0000d450  6d 65 6d 2c 53 5d 0d 76  66 0d 42 4c 47 45 20 73  |mem,S].vf.BLGE s|
0000d460  74 72 62 0d 76 70 05 5d  0d 76 7a 07 3d 22 22 0d  |trb.vp.].vz.="".|
0000d470  76 84 04 0d 76 8e 11 dd  a4 73 74 72 62 31 36 28  |v...v....strb16(|
0000d480  52 2c 53 29 0d 76 98 15  e7 20 52 3c 3e 30 20 84  |R,S).v... R<>0 .|
0000d490  20 53 3c 3e 31 20 8c 20  85 0d 76 a2 09 5b 4f 50  | S<>1 . ..v..[OP|
0000d4a0  54 70 0d 76 ac 17 3b 43  4d 50 20 53 2c 23 26 43  |Tp.v..;CMP S,#&C|
0000d4b0  30 30 30 20 3c 3c 20 31  36 0d 76 b6 1c 3b 53 54  |000 << 16.v..;ST|
0000d4c0  52 4c 4f 42 20 52 2c 5b  6d 65 6d 2c 53 2c 4c 53  |RLOB R,[mem,S,LS|
0000d4d0  52 23 31 36 5d 0d 76 c0  12 4d 4f 56 20 53 2c 53  |R#16].v..MOV S,S|
0000d4e0  2c 4c 53 52 23 31 36 0d  76 ca 1e 43 4d 50 20 53  |,LSR#16.v..CMP S|
0000d4f0  2c 46 2c 4c 53 52 23 31  36 20 3b 20 77 72 61 70  |,F,LSR#16 ; wrap|
0000d500  5f 61 64 64 72 0d 76 d4  11 3b 43 4d 50 20 53 2c  |_addr.v..;CMP S,|
0000d510  23 26 33 30 30 30 0d 76  de 14 53 54 52 4c 54 42  |#&3000.v..STRLTB|
0000d520  20 52 2c 5b 6d 65 6d 2c  53 5d 0d 76 e8 12 42 4c  | R,[mem,S].v..BL|
0000d530  47 45 20 73 74 72 62 20  3b 20 31 36 0d 76 f2 05  |GE strb ; 16.v..|
0000d540  5d 0d 76 fc 07 3d 22 22  0d 77 06 04 0d 77 10 0e  |].v..="".w...w..|
0000d550  dd a4 73 68 6f 77 72 65  67 73 0d 77 1a 09 5b 4f  |..showregs.w..[O|
0000d560  50 54 70 0d 77 24 0f a4  70 72 69 6e 74 28 7a 70  |PTp.w$..print(zp|
0000d570  63 29 0d 77 2e 0d a4 70  72 69 6e 74 28 41 29 0d  |c).w...print(A).|
0000d580  77 38 0d a4 70 72 69 6e  74 28 58 29 0d 77 42 0d  |w8..print(X).wB.|
0000d590  a4 70 72 69 6e 74 28 59  29 0d 77 4c 0e a4 70 72  |.print(Y).wL..pr|
0000d5a0  69 6e 74 28 53 50 29 0d  77 56 0d a4 70 72 69 6e  |int(SP).wV..prin|
0000d5b0  74 28 46 29 0d 77 60 16  41 44 44 20 52 31 32 2c  |t(F).w`.ADD R12,|
0000d5c0  6d 65 6d 2c 23 26 44 46  30 30 0d 77 6a 17 4c 44  |mem,#&DF00.wj.LD|
0000d5d0  52 42 20 52 31 32 2c 5b  52 31 32 2c 23 26 44 41  |RB R12,[R12,#&DA|
0000d5e0  5d 0d 77 74 16 4d 4f 56  20 52 31 32 2c 52 31 32  |].wt.MOV R12,R12|
0000d5f0  2c 4c 53 4c 23 32 34 0d  77 7e 0f a4 70 72 69 6e  |,LSL#24.w~..prin|
0000d600  74 32 28 31 32 29 0d 77  88 0c 53 57 49 20 26 31  |t2(12).w..SWI &1|
0000d610  30 41 0d 77 92 15 3b 53  57 49 20 22 4f 53 5f 4e  |0A.w..;SWI "OS_N|
0000d620  65 77 4c 69 6e 65 22 0d  77 9c 05 5d 0d 77 a6 07  |ewLine".w..].w..|
0000d630  3d 22 22 0d 77 b0 04 0d  77 ba 0e dd a4 70 72 69  |="".w...w....pri|
0000d640  6e 74 28 52 29 0d 77 c4  0a c8 8e 20 52 20 ca 0d  |nt(R).w.... R ..|
0000d650  77 ce 19 c9 20 7a 70 63  20 3a 20 41 24 3d a4 70  |w... zpc : A$=.p|
0000d660  72 69 6e 74 34 28 52 29  0d 77 d8 2e c9 20 46 20  |rint4(R).w... F |
0000d670  20 20 3a 20 5b 4f 50 54  70 3a 4d 4f 56 20 52 32  |  : [OPTp:MOV R2|
0000d680  2c 46 2c 4c 53 4c 23 32  34 3a a4 70 72 69 6e 74  |,F,LSL#24:.print|
0000d690  32 28 32 29 3a 5d 0d 77  e2 05 7f 0d 77 ec 11 41  |2(2):].w....w..A|
0000d6a0  24 3d a4 70 72 69 6e 74  32 28 52 29 0d 77 f6 05  |$=.print2(R).w..|
0000d6b0  cb 0d 78 00 07 3d 22 22  0d 78 0a 04 0d 78 14 19  |..x..="".x...x..|
0000d6c0  c9 20 41 20 20 20 3a 20  41 24 3d a4 70 72 69 6e  |. A   : A$=.prin|
0000d6d0  74 32 28 52 29 0d 78 1e  19 c9 20 58 20 20 20 3a  |t2(R).x... X   :|
0000d6e0  20 41 24 3d a4 70 72 69  6e 74 32 28 52 29 0d 78  | A$=.print2(R).x|
0000d6f0  28 19 c9 20 59 20 20 20  3a 20 41 24 3d a4 70 72  |(.. Y   : A$=.pr|
0000d700  69 6e 74 32 28 52 29 0d  78 32 2d c9 20 53 50 20  |int2(R).x2-. SP |
0000d710  20 3a 20 5b 4f 50 54 70  3a 53 57 49 20 26 31 30  | : [OPTp:SWI &10|
0000d720  30 2b 97 22 31 22 3a a4  70 72 69 6e 74 32 28 53  |0+."1":.print2(S|
0000d730  50 29 3a 5d 0d 78 3c 1a  c9 20 46 20 20 20 3a 20  |P):].x<.. F   : |
0000d740  41 24 3d a4 70 72 69 6e  74 66 6c 61 67 73 0d 78  |A$=.printflags.x|
0000d750  46 05 cb 0d 78 50 07 3d  22 22 0d 78 5a 04 0d 78  |F...xP.="".xZ..x|
0000d760  64 10 dd a4 70 72 69 6e  74 66 6c 61 67 73 0d 78  |d...printflags.x|
0000d770  6e 09 5b 4f 50 54 70 0d  78 78 34 54 53 54 20 46  |n.[OPTp.xx4TST F|
0000d780  2c 23 25 31 3c 3c 37 20  3a 20 53 57 49 45 51 20  |,#%1<<7 : SWIEQ |
0000d790  26 31 30 30 2b 97 22 6e  22 20 3a 20 53 57 49 4e  |&100+."n" : SWIN|
0000d7a0  45 20 26 31 30 30 2b 97  22 4e 22 0d 78 82 34 54  |E &100+."N".x.4T|
0000d7b0  53 54 20 46 2c 23 25 31  3c 3c 36 20 3a 20 53 57  |ST F,#%1<<6 : SW|
0000d7c0  49 45 51 20 26 31 30 30  2b 97 22 76 22 20 3a 20  |IEQ &100+."v" : |
0000d7d0  53 57 49 4e 45 20 26 31  30 30 2b 97 22 56 22 0d  |SWINE &100+."V".|
0000d7e0  78 8c 34 54 53 54 20 46  2c 23 25 31 3c 3c 35 20  |x.4TST F,#%1<<5 |
0000d7f0  3a 20 53 57 49 45 51 20  26 31 30 30 2b 97 22 30  |: SWIEQ &100+."0|
0000d800  22 20 3a 20 53 57 49 4e  45 20 26 31 30 30 2b 97  |" : SWINE &100+.|
0000d810  22 31 22 0d 78 96 34 54  53 54 20 46 2c 23 25 31  |"1".x.4TST F,#%1|
0000d820  3c 3c 34 20 3a 20 53 57  49 45 51 20 26 31 30 30  |<<4 : SWIEQ &100|
0000d830  2b 97 22 62 22 20 3a 20  53 57 49 4e 45 20 26 31  |+."b" : SWINE &1|
0000d840  30 30 2b 97 22 42 22 0d  78 a0 34 54 53 54 20 46  |00+."B".x.4TST F|
0000d850  2c 23 25 31 3c 3c 33 20  3a 20 53 57 49 45 51 20  |,#%1<<3 : SWIEQ |
0000d860  26 31 30 30 2b 97 22 64  22 20 3a 20 53 57 49 4e  |&100+."d" : SWIN|
0000d870  45 20 26 31 30 30 2b 97  22 44 22 0d 78 aa 34 54  |E &100+."D".x.4T|
0000d880  53 54 20 46 2c 23 25 31  3c 3c 32 20 3a 20 53 57  |ST F,#%1<<2 : SW|
0000d890  49 45 51 20 26 31 30 30  2b 97 22 69 22 20 3a 20  |IEQ &100+."i" : |
0000d8a0  53 57 49 4e 45 20 26 31  30 30 2b 97 22 49 22 0d  |SWINE &100+."I".|
0000d8b0  78 b4 34 54 53 54 20 46  2c 23 25 31 3c 3c 31 20  |x.4TST F,#%1<<1 |
0000d8c0  3a 20 53 57 49 45 51 20  26 31 30 30 2b 97 22 7a  |: SWIEQ &100+."z|
0000d8d0  22 20 3a 20 53 57 49 4e  45 20 26 31 30 30 2b 97  |" : SWINE &100+.|
0000d8e0  22 5a 22 0d 78 be 34 54  53 54 20 46 2c 23 25 31  |"Z".x.4TST F,#%1|
0000d8f0  3c 3c 30 20 3a 20 53 57  49 45 51 20 26 31 30 30  |<<0 : SWIEQ &100|
0000d900  2b 97 22 63 22 20 3a 20  53 57 49 4e 45 20 26 31  |+."c" : SWINE &1|
0000d910  30 30 2b 97 22 43 22 0d  78 c8 0c 53 57 49 20 26  |00+."C".x..SWI &|
0000d920  31 32 30 0d 78 d2 05 5d  0d 78 dc 07 3d 22 22 0d  |120.x..].x..="".|
0000d930  78 e6 04 0d 78 f0 0f dd  a4 70 72 69 6e 74 32 28  |x...x....print2(|
0000d940  52 29 0d 78 fa 07 ea 49  25 0d 79 04 09 5b 4f 50  |R).x...I%.y..[OP|
0000d950  54 70 0d 79 0e 0c 4d 4f  56 20 52 31 2c 52 0d 79  |Tp.y..MOV R1,R.y|
0000d960  18 05 5d 0d 79 22 0d e3  49 25 3d 30 20 b8 20 31  |..].y"..I%=0 . 1|
0000d970  0d 79 2c 0a 5b 4f 50 54  20 70 0d 79 36 14 4d 4f  |.y,.[OPT p.y6.MO|
0000d980  56 20 52 31 2c 52 31 2c  52 4f 52 23 32 38 0d 79  |V R1,R1,ROR#28.y|
0000d990  40 0f 80 20 52 30 2c 52  31 2c 23 26 46 0d 79 4a  |@.. R0,R1,#&F.yJ|
0000d9a0  0e 43 4d 50 20 52 30 2c  23 31 30 0d 79 54 12 41  |.CMP R0,#10.yT.A|
0000d9b0  44 44 47 45 20 52 30 2c  52 30 2c 23 37 0d 79 5e  |DDGE R0,R0,#7.y^|
0000d9c0  11 41 44 44 20 52 30 2c  52 30 2c 23 34 38 0d 79  |.ADD R0,R0,#48.y|
0000d9d0  68 13 53 57 49 20 22 4f  53 5f 57 72 69 74 65 43  |h.SWI "OS_WriteC|
0000d9e0  22 0d 79 72 05 5d 0d 79  7c 05 ed 0d 79 86 09 5b  |".yr.].y|...y..[|
0000d9f0  4f 50 54 70 0d 79 90 0c  53 57 49 20 26 31 32 30  |OPTp.y..SWI &120|
0000da00  0d 79 9a 05 5d 0d 79 a4  07 3d 22 22 0d 79 ae 04  |.y..].y..="".y..|
0000da10  0d 79 b8 0f dd a4 70 72  69 6e 74 34 28 52 29 0d  |.y....print4(R).|
0000da20  79 c2 07 ea 49 25 0d 79  cc 09 5b 4f 50 54 70 0d  |y...I%.y..[OPTp.|
0000da30  79 d6 0c 4d 4f 56 20 52  31 2c 52 0d 79 e0 05 5d  |y..MOV R1,R.y..]|
0000da40  0d 79 ea 0d e3 49 25 3d  30 20 b8 20 33 0d 79 f4  |.y...I%=0 . 3.y.|
0000da50  0a 5b 4f 50 54 20 70 0d  79 fe 14 4d 4f 56 20 52  |.[OPT p.y..MOV R|
0000da60  31 2c 52 31 2c 52 4f 52  23 32 38 0d 7a 08 0f 80  |1,R1,ROR#28.z...|
0000da70  20 52 30 2c 52 31 2c 23  26 46 0d 7a 12 0e 43 4d  | R0,R1,#&F.z..CM|
0000da80  50 20 52 30 2c 23 31 30  0d 7a 1c 12 41 44 44 47  |P R0,#10.z..ADDG|
0000da90  45 20 52 30 2c 52 30 2c  23 37 0d 7a 26 11 41 44  |E R0,R0,#7.z&.AD|
0000daa0  44 20 52 30 2c 52 30 2c  23 34 38 0d 7a 30 13 53  |D R0,R0,#48.z0.S|
0000dab0  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 7a  |WI "OS_WriteC".z|
0000dac0  3a 05 5d 0d 7a 44 05 ed  0d 7a 4e 09 5b 4f 50 54  |:.].zD...zN.[OPT|
0000dad0  70 0d 7a 58 0c 53 57 49  20 26 31 32 30 0d 7a 62  |p.zX.SWI &120.zb|
0000dae0  05 5d 0d 7a 6c 07 3d 22  22 0d 7a 76 04 0d 7a 80  |.].zl.="".zv..z.|
0000daf0  10 dd a4 70 72 69 6e 74  33 32 28 52 29 0d 7a 8a  |...print32(R).z.|
0000db00  07 ea 49 25 0d 7a 94 09  5b 4f 50 54 70 0d 7a 9e  |..I%.z..[OPTp.z.|
0000db10  0c 4d 4f 56 20 52 31 2c  52 0d 7a a8 05 5d 0d 7a  |.MOV R1,R.z..].z|
0000db20  b2 0e e3 49 25 3d 30 20  b8 20 33 31 0d 7a bc 0a  |...I%=0 . 31.z..|
0000db30  5b 4f 50 54 20 70 0d 7a  c6 14 4d 4f 56 20 52 31  |[OPT p.z..MOV R1|
0000db40  2c 52 31 2c 52 4f 52 23  32 38 0d 7a d0 0f 80 20  |,R1,ROR#28.z... |
0000db50  52 30 2c 52 31 2c 23 26  46 0d 7a da 0e 43 4d 50  |R0,R1,#&F.z..CMP|
0000db60  20 52 30 2c 23 31 30 0d  7a e4 12 41 44 44 47 45  | R0,#10.z..ADDGE|
0000db70  20 52 30 2c 52 30 2c 23  37 0d 7a ee 11 41 44 44  | R0,R0,#7.z..ADD|
0000db80  20 52 30 2c 52 30 2c 23  34 38 0d 7a f8 13 53 57  | R0,R0,#48.z..SW|
0000db90  49 20 22 4f 53 5f 57 72  69 74 65 43 22 0d 7b 02  |I "OS_WriteC".{.|
0000dba0  05 5d 0d 7b 0c 05 ed 0d  7b 16 09 5b 4f 50 54 70  |.].{....{..[OPTp|
0000dbb0  0d 7b 20 0c 53 57 49 20  26 31 32 30 0d 7b 2a 05  |.{ .SWI &120.{*.|
0000dbc0  5d 0d 7b 34 07 3d 22 22  0d 7b 3e 04 0d 7b 48 10  |].{4.="".{>..{H.|
0000dbd0  dd a4 70 72 69 6e 74 73  28 41 24 29 0d 7b 52 09  |..prints(A$).{R.|
0000dbe0  5b 4f 50 54 70 0d 7b 5c  13 53 57 49 20 22 4f 53  |[OPTp.{\.SWI "OS|
0000dbf0  5f 57 72 69 74 65 53 22  0d 7b 66 0b 45 51 55 53  |_WriteS".{f.EQUS|
0000dc00  20 41 24 0d 7b 70 0b 45  51 55 42 20 31 30 0d 7b  | A$.{p.EQUB 10.{|
0000dc10  7a 0b 45 51 55 42 20 31  33 0d 7b 84 0a 45 51 55  |z.EQUB 13.{..EQU|
0000dc20  42 20 30 0d 7b 8e 09 41  4c 49 47 4e 0d 7b 98 05  |B 0.{..ALIGN.{..|
0000dc30  5d 0d 7b a2 07 3d 22 22  0d 7b ac 04 0d 7b b6 0f  |].{..="".{...{..|
0000dc40  dd a4 75 6e 64 6f 63 28  41 25 29 0d 7b c0 15 e7  |..undoc(A%).{...|
0000dc50  20 6f 70 63 6f 64 65 25  3c 3e 41 25 20 8c 20 fa  | opcode%<>A% . .|
0000dc60  0d 7b ca 09 5b 4f 50 54  70 0d 7b d4 11 3b 54 53  |.{..[OPTp.{..;TS|
0000dc70  54 20 46 2c 23 25 31 30  30 30 0d 7b de 14 3b 53  |T F,#%1000.{..;S|
0000dc80  57 49 45 51 20 26 31 30  30 2b 97 22 64 22 0d 7b  |WIEQ &100+."d".{|
0000dc90  e8 14 3b 53 57 49 4e 45  20 26 31 30 30 2b 97 22  |..;SWINE &100+."|
0000dca0  44 22 0d 7b f2 04 0d 7b  fc 21 3b 53 57 49 20 26  |D".{...{.!;SWI &|
0000dcb0  31 30 30 2b 97 28 c0 c2  22 30 22 2b c3 7e 41 25  |100+.(.."0"+.~A%|
0000dcc0  2c 32 29 2c 31 29 29 0d  7c 06 19 3b 53 57 49 20  |,2),1)).|..;SWI |
0000dcd0  26 31 30 30 2b 97 28 c2  c3 7e 41 25 2c 31 29 29  |&100+.(..~A%,1))|
0000dce0  0d 7c 10 12 3b 53 57 49  20 26 31 30 30 2b 97 22  |.|..;SWI &100+."|
0000dcf0  20 22 0d 7c 1a 10 3b a4  70 72 69 6e 74 28 7a 70  | ".|..;.print(zp|
0000dd00  63 29 0d 7c 24 21 3b 53  57 49 20 26 31 30 30 2b  |c).|$!;SWI &100+|
0000dd10  97 22 20 22 3a 3b 53 57  49 20 26 31 30 30 2b 97  |." ":;SWI &100+.|
0000dd20  22 20 22 0d 7c 2e 04 0d  7c 38 20 3b 4d 4f 56 20  |" ".|...|8 ;MOV |
0000dd30  52 30 2c 23 31 35 20 3a  20 3b 53 57 49 20 22 4f  |R0,#15 : ;SWI "O|
0000dd40  53 5f 42 79 74 65 22 0d  7c 42 0a 3b 53 57 49 20  |S_Byte".|B.;SWI |
0000dd50  34 0d 7c 4c 05 5d 0d 7c  56 07 3d 22 22 0d 7c 60  |4.|L.].|V.="".|`|
0000dd60  04 0d 7c 6a 11 dd a4 65  71 75 64 28 41 25 2c 42  |..|j...equd(A%,B|
0000dd70  25 29 0d 7c 74 07 ea 49  25 0d 7c 7e 0e e3 49 25  |%).|t..I%.|~..I%|
0000dd80  3d 31 20 b8 20 41 25 0d  7c 88 09 5b 4f 50 54 70  |=1 . A%.|..[OPTp|
0000dd90  0d 7c 92 0b 45 51 55 44  20 42 25 0d 7c 9c 05 5d  |.|..EQUD B%.|..]|
0000dda0  0d 7c a6 05 ed 0d 7c b0  07 3d 22 22 0d 7c ba 04  |.|....|..="".|..|
0000ddb0  0d 7c c4 12 dd a4 64 6f  5f 69 6e 74 65 72 72 75  |.|....do_interru|
0000ddc0  70 74 0d 7c ce 09 5b 4f  50 54 70 0d 7c d8 15 4d  |pt.|..[OPTp.|..M|
0000ddd0  4f 56 20 52 30 2c 7a 70  63 2c 4c 53 52 23 32 34  |OV R0,zpc,LSR#24|
0000dde0  0d 7c e2 0c a4 70 75 73  68 28 30 29 0d 7c ec 15  |.|...push(0).|..|
0000ddf0  4d 4f 56 20 52 30 2c 7a  70 63 2c 4c 53 52 23 31  |MOV R0,zpc,LSR#1|
0000de00  36 0d 7c f6 0c a4 70 75  73 68 28 30 29 0d 7d 00  |6.|...push(0).}.|
0000de10  24 42 49 43 20 46 2c 46  2c 23 25 31 30 30 30 30  |$BIC F,F,#%10000|
0000de20  20 3b 20 63 6c 65 61 72  20 42 52 4b 20 66 6c 61  | ; clear BRK fla|
0000de30  67 0d 7d 0a 0c a4 70 75  73 68 28 46 29 0d 7d 14  |g.}...push(F).}.|
0000de40  19 84 52 20 46 2c 46 2c  23 25 31 30 30 20 3b 20  |..R F,F,#%100 ; |
0000de50  21 21 21 21 21 21 0d 7d  1e 22 4d 4f 56 20 52 30  |!!!!!!.}."MOV R0|
0000de60  2c 23 26 46 46 30 30 20  3a 20 41 44 44 20 52 30  |,#&FF00 : ADD R0|
0000de70  2c 52 30 2c 23 26 46 45  0d 7d 28 14 4c 44 52 20  |,R0,#&FE.}(.LDR |
0000de80  7a 70 63 2c 5b 6d 65 6d  2c 52 30 5d 0d 7d 32 16  |zpc,[mem,R0].}2.|
0000de90  4d 4f 56 20 7a 70 63 2c  7a 70 63 2c 4c 53 4c 23  |MOV zpc,zpc,LSL#|
0000dea0  31 36 0d 7d 3c 05 5d 0d  7d 46 07 3d 22 22 0d 7d  |16.}<.].}F.="".}|
0000deb0  50 04 0d 7d 5a 17 dd a4  64 69 76 6d 6f 64 28 41  |P..}Z...divmod(A|
0000dec0  2c 42 2c 43 2c 44 2c 45  29 0d 7d 64 0b 64 69 76  |,B,C,D,E).}d.div|
0000ded0  25 2b 3d 31 0d 7d 6e 09  5b 4f 50 54 70 0d 7d 78  |%+=1.}n.[OPTp.}x|
0000dee0  0c 4d 4f 56 20 43 2c 23  31 0d 7d 82 0c 4d 4f 56  |.MOV C,#1.}..MOV|
0000def0  20 44 2c 23 30 0d 7d 8c  0b 4d 4f 56 20 45 2c 42  | D,#0.}..MOV E,B|
0000df00  0d 7d 96 13 2e 64 69 76  6c 6f 6f 70 31 28 64 69  |.}...divloop1(di|
0000df10  76 25 29 0d 7d a0 11 4d  4f 56 20 42 2c 42 2c 4c  |v%).}..MOV B,B,L|
0000df20  53 4c 23 31 0d 7d aa 11  4d 4f 56 20 43 2c 43 2c  |SL#1.}..MOV C,C,|
0000df30  4c 53 4c 23 31 0d 7d b4  0b 43 4d 50 20 42 2c 41  |LSL#1.}..CMP B,A|
0000df40  0d 7d be 16 42 4c 4f 20  64 69 76 6c 6f 6f 70 31  |.}..BLO divloop1|
0000df50  28 64 69 76 25 29 0d 7d  c8 04 0d 7d d2 13 2e 64  |(div%).}...}...d|
0000df60  69 76 6c 6f 6f 70 32 28  64 69 76 25 29 0d 7d dc  |ivloop2(div%).}.|
0000df70  1f 43 4d 50 20 42 2c 41  20 3a 20 42 4c 53 20 64  |.CMP B,A : BLS d|
0000df80  69 76 6a 75 6d 70 28 64  69 76 25 29 0d 7d e6 1f  |ivjump(div%).}..|
0000df90  43 4d 50 20 42 2c 45 20  3a 20 42 4c 53 20 64 69  |CMP B,E : BLS di|
0000dfa0  76 6a 75 6d 70 28 64 69  76 25 29 0d 7d f0 11 4d  |vjump(div%).}..M|
0000dfb0  4f 56 20 42 2c 42 2c 4c  53 52 23 31 0d 7d fa 11  |OV B,B,LSR#1.}..|
0000dfc0  4d 4f 56 20 43 2c 43 2c  4c 53 52 23 31 0d 7e 04  |MOV C,C,LSR#1.~.|
0000dfd0  14 42 20 64 69 76 6c 6f  6f 70 32 28 64 69 76 25  |.B divloop2(div%|
0000dfe0  29 0d 7e 0e 12 2e 64 69  76 6a 75 6d 70 28 64 69  |).~...divjump(di|
0000dff0  76 25 29 0d 7e 18 0b 43  4d 50 20 42 2c 41 0d 7e  |v%).~..CMP B,A.~|
0000e000  22 0f 53 55 42 4c 53 20  41 2c 41 2c 42 0d 7e 2c  |".SUBLS A,A,B.~,|
0000e010  0f 41 44 44 4c 53 20 44  2c 44 2c 43 0d 7e 36 0b  |.ADDLS D,D,C.~6.|
0000e020  43 4d 50 20 42 2c 45 0d  7e 40 16 42 48 49 20 64  |CMP B,E.~@.BHI d|
0000e030  69 76 6c 6f 6f 70 32 28  64 69 76 25 29 0d 7e 4a  |ivloop2(div%).~J|
0000e040  05 5d 0d 7e 54 07 3d 22  22 0d 7e 5e 04 0d 7e 68  |.].~T.="".~^..~h|
0000e050  0c dd a4 73 68 61 64 6f  77 0d 7e 72 0e e7 20 6d  |...shadow.~r.. m|
0000e060  61 73 74 65 72 20 8c 0d  7e 7c 09 5b 4f 50 54 70  |aster ..~|.[OPTp|
0000e070  0d 7e 86 19 4c 44 52 42  20 52 32 2c 5b 6d 65 6d  |.~..LDRB R2,[mem|
0000e080  2c 23 41 43 43 43 4f 4e  5d 0d 7e 90 15 3b 82 20  |,#ACCCON].~..;. |
0000e090  52 32 2c 52 32 2c 52 32  2c 4c 53 52 23 32 0d 7e  |R2,R2,R2,LSR#2.~|
0000e0a0  9a 0e 54 53 54 20 52 32  2c 23 25 31 0d 7e a4 19  |..TST R2,#%1.~..|
0000e0b0  53 55 42 4e 45 20 52 31  33 2c 6d 65 6d 2c 23 26  |SUBNE R13,mem,#&|
0000e0c0  31 33 30 30 30 0d 7e ae  0e ec 51 20 52 31 33 2c  |13000.~...Q R13,|
0000e0d0  6d 65 6d 0d 7e b8 05 5d  0d 7e c2 05 cc 0d 7e cc  |mem.~..].~....~.|
0000e0e0  09 5b 4f 50 54 70 0d 7e  d6 0f 4d 4f 56 20 52 31  |.[OPTp.~..MOV R1|
0000e0f0  33 2c 6d 65 6d 0d 7e e0  05 5d 0d 7e ea 05 cd 0d  |3,mem.~..].~....|
0000e100  7e f4 07 3d 22 22 0d 7e  fe 15 dd f2 63 6c 65 61  |~..="".~....clea|
0000e110  72 6d 65 6d 28 53 25 2c  45 25 29 0d 7f 08 0d 50  |rmem(S%,E%)....P|
0000e120  25 3d 62 75 66 66 65 72  0d 7f 12 09 5b 4f 50 54  |%=buffer....[OPT|
0000e130  32 0d 7f 1c 14 45 51 55  44 20 53 25 20 3b 20 6d  |2....EQUD S% ; m|
0000e140  65 6d 6f 72 79 0d 7f 26  1a 45 51 55 44 20 45 25  |emory..&.EQUD E%|
0000e150  20 3b 20 6d 65 6d 6f 72  79 2b 26 38 30 30 30 0d  | ; memory+&8000.|
0000e160  7f 30 0a 2e 63 6c 65 61  72 0d 7f 3a 0d 4d 4f 56  |.0..clear..:.MOV|
0000e170  20 52 30 2c 23 30 0d 7f  44 11 4c 44 52 20 52 31  | R0,#0..D.LDR R1|
0000e180  2c 62 75 66 66 65 72 0d  7f 4e 13 4c 44 52 20 52  |,buffer..N.LDR R|
0000e190  32 2c 62 75 66 66 65 72  2b 34 0d 7f 58 09 2e 6c  |2,buffer+4..X..l|
0000e1a0  6f 6f 70 0d 7f 62 12 53  54 52 20 52 30 2c 5b 52  |oop..b.STR R0,[R|
0000e1b0  31 5d 2c 23 34 0d 7f 6c  0d 43 4d 50 20 52 31 2c  |1],#4..l.CMP R1,|
0000e1c0  52 32 0d 7f 76 0c 42 4e  45 20 6c 6f 6f 70 0d 7f  |R2..v.BNE loop..|
0000e1d0  80 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 7f 8a 05  |..MOV PC,R14....|
0000e1e0  5d 0d 7f 94 0b d6 20 63  6c 65 61 72 0d 7f 9e 05  |]..... clear....|
0000e1f0  e1 0d 7f a8 04 0d 7f b2  0c dd a4 66 65 74 63 68  |...........fetch|
0000e200  32 0d 7f bc 09 5b 4f 50  54 70 0d 7f c6 1c 4c 44  |2....[OPTp....LD|
0000e210  52 42 20 52 32 2c 5b 6d  65 6d 2c 7a 70 63 2c 4c  |RB R2,[mem,zpc,L|
0000e220  53 52 23 31 36 5d 0d 7f  d0 19 41 44 44 20 50 43  |SR#16]....ADD PC|
0000e230  2c 74 61 62 6c 65 2c 52  32 2c 4c 53 4c 23 38 0d  |,table,R2,LSL#8.|
0000e240  7f da 05 5d 0d 7f e4 07  3d 22 22 0d 7f ee 04 0d  |...]....="".....|
0000e250  7f f8 13 dd a4 66 65 74  63 68 33 28 4e 25 2c 54  |.....fetch3(N%,T|
0000e260  25 29 0d 80 02 2b e7 20  4e 25 3c 3e 30 20 8c 20  |%)...+. N%<>0 . |
0000e270  5b 4f 50 54 70 3a 41 44  44 20 7a 70 63 2c 7a 70  |[OPTp:ADD zpc,zp|
0000e280  63 2c 23 4e 25 20 3c 3c  20 31 36 3a 5d 0d 80 0c  |c,#N% << 16:]...|
0000e290  09 5b 4f 50 54 70 0d 80  16 0e a4 73 68 6f 77 72  |.[OPTp.....showr|
0000e2a0  65 67 73 32 0d 80 20 16  53 55 42 53 20 74 69 6d  |egs2.. .SUBS tim|
0000e2b0  65 2c 74 69 6d 65 2c 23  54 25 0d 80 2a 1e 4c 44  |e,time,#T%..*.LD|
0000e2c0  52 50 4c 42 20 52 32 2c  5b 6d 65 6d 2c 7a 70 63  |RPLB R2,[mem,zpc|
0000e2d0  2c 4c 53 52 23 31 36 5d  0d 80 34 1b 41 44 44 50  |,LSR#16]..4.ADDP|
0000e2e0  4c 20 50 43 2c 74 61 62  6c 65 2c 52 32 2c 4c 53  |L PC,table,R2,LS|
0000e2f0  4c 23 38 0d 80 3e 0c 42  20 66 65 74 63 68 32 0d  |L#8..>.B fetch2.|
0000e300  80 48 05 5d 0d 80 52 07  3d 22 22 0d 80 5c 04 0d  |.H.]..R.=""..\..|
0000e310  80 66 12 dd a4 66 65 74  63 68 28 4e 25 2c 54 25  |.f...fetch(N%,T%|
0000e320  29 0d 80 70 2b e7 20 4e  25 3c 3e 30 20 8c 20 5b  |)..p+. N%<>0 . [|
0000e330  4f 50 54 70 3a 41 44 44  20 7a 70 63 2c 7a 70 63  |OPTp:ADD zpc,zpc|
0000e340  2c 23 4e 25 20 3c 3c 20  31 36 3a 5d 0d 80 7a 09  |,#N% << 16:]..z.|
0000e350  5b 4f 50 54 70 0d 80 84  0e a4 73 68 6f 77 72 65  |[OPTp.....showre|
0000e360  67 73 32 0d 80 8e 16 53  55 42 53 20 74 69 6d 65  |gs2....SUBS time|
0000e370  2c 74 69 6d 65 2c 23 54  25 0d 80 98 1e 4c 44 52  |,time,#T%....LDR|
0000e380  50 4c 42 20 52 32 2c 5b  6d 65 6d 2c 7a 70 63 2c  |PLB R2,[mem,zpc,|
0000e390  4c 53 52 23 31 36 5d 0d  80 a2 1b 41 44 44 50 4c  |LSR#16]....ADDPL|
0000e3a0  20 50 43 2c 74 61 62 6c  65 2c 52 32 2c 4c 53 4c  | PC,table,R2,LSL|
0000e3b0  23 38 0d 80 ac 0c 42 20  66 65 74 63 68 32 0d 80  |#8....B fetch2..|
0000e3c0  b6 05 5d 0d 80 c0 0e 6f  70 63 6f 64 65 25 2b 3d  |..]....opcode%+=|
0000e3d0  31 0d 80 ca 13 e7 20 62  63 64 5f 6c 6f 6f 70 25  |1..... bcd_loop%|
0000e3e0  3d 30 20 8c 0d 80 d4 1d  e7 20 6f 70 63 6f 64 65  |=0 ...... opcode|
0000e3f0  28 6f 70 63 6f 64 65 25  2d 31 29 3d 30 20 8c 20  |(opcode%-1)=0 . |
0000e400  fa 0d 80 de 22 e7 20 6f  70 63 6f 64 65 28 6f 70  |....". opcode(op|
0000e410  63 6f 64 65 25 29 3c 3e  30 20 80 20 70 3d 30 20  |code%)<>0 . p=0 |
0000e420  8c 20 fa 0d 80 e8 2b e7  20 50 25 2d 6f 70 63 6f  |. ....+. P%-opco|
0000e430  64 65 28 30 29 3e 6f 70  63 6f 64 65 25 2a 34 2a  |de(0)>opcode%*4*|
0000e440  36 34 20 8c 20 f1 7e 6f  70 63 6f 64 65 25 0d 80  |64 . .~opcode%..|
0000e450  f2 1d 50 25 3d 6f 70 63  6f 64 65 28 30 29 2b 6f  |..P%=opcode(0)+o|
0000e460  70 63 6f 64 65 25 2a 34  2a 36 34 0d 80 fc 0e 4f  |pcode%*4*64....O|
0000e470  25 3d 63 6f 64 65 2b 50  25 0d 81 06 05 cc 0d 81  |%=code+P%.......|
0000e480  10 1a 50 25 3d 62 63 64  28 30 29 2b 6f 70 63 6f  |..P%=bcd(0)+opco|
0000e490  64 65 25 2a 34 2a 36 34  0d 81 1a 0e 4f 25 3d 63  |de%*4*64....O%=c|
0000e4a0  6f 64 65 2b 50 25 0d 81  24 05 cd 0d 81 2e 07 3d  |ode+P%..$......=|
0000e4b0  22 22 0d 81 38 0f dd a4  62 63 64 28 41 25 29 20  |""..8...bcd(A%) |
0000e4c0  3a 0d 81 42 24 e7 20 50  25 3e 6f 70 63 6f 64 65  |:..B$. P%>opcode|
0000e4d0  28 30 29 2b 28 41 25 2b  32 35 36 29 2a 34 2a 36  |(0)+(A%+256)*4*6|
0000e4e0  34 20 8c 20 fa 0d 81 4c  31 50 25 3d 6f 70 63 6f  |4 . ...L1P%=opco|
0000e4f0  64 65 28 30 29 2b 28 41  25 2b 32 35 36 29 2a 34  |de(0)+(A%+256)*4|
0000e500  2a 36 34 20 3a 20 4f 25  3d 63 6f 64 65 2b 50 25  |*64 : O%=code+P%|
0000e510  20 3a 20 3d 22 22 0d 81  56 04 0d 81 60 0d dd a4  | : =""..V...`...|
0000e520  61 6c 69 67 6e 31 36 0d  81 6a 13 c8 95 20 28 50  |align16..j... (P|
0000e530  25 20 80 20 31 35 29 3c  3e 30 0d 81 74 11 50 25  |% . 15)<>0..t.P%|
0000e540  2b 3d 31 20 3a 20 4f 25  2b 3d 31 0d 81 7e 05 ce  |+=1 : O%+=1..~..|
0000e550  0d 81 88 07 3d 22 22 0d  81 92 0c dd 20 f2 65 72  |....=""..... .er|
0000e560  72 6f 72 0d 81 9c 15 f6  3a f1 20 22 20 61 74 20  |ror.....:. " at |
0000e570  6c 69 6e 65 20 22 3b 9e  0d 81 a6 05 e0 0d 81 b0  |line ";.........|
0000e580  04 0d 81 ba 0f dd a4 73  68 6f 77 72 65 67 73 32  |.......showregs2|
0000e590  0d 81 c4 09 5b 4f 50 54  70 0d 81 ce 11 3b 42 4c  |....[OPTp....;BL|
0000e5a0  20 73 68 6f 77 5f 72 65  67 73 0d 81 d8 05 5d 0d  | show_regs....].|
0000e5b0  81 e2 07 3d 22 22 0d ff                           |...=""..|
0000e5b8