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

!6502Em/src/6502Em130M

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

� > 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. (master)
d
npagetable=&97000
x
�IO_Podule%=�
�
�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.OpcodesNew"
�#ț "<6502Em$Dir>.Src.ScreenNew"
�"ț "<6502Em$Dir>.Src.HWScroll"
�
�electron%=�
�master=�
�PROCassemble

�PRINT(end-start)/1024
"B�OSCLI "Save <6502Em$Dir>.Code "+STR$~code+" "+STR$~(end+code)
,+�OSCLI "SetType <6502Em$Dir>.Code Data"
6
@master=�
J
�assemble
T�(end-start)/1024
^8� "Save <6502Em$Dir>.CodeM "+�~code+" "+�~(end+code)
h'� "SetType <6502Em$Dir>.CodeM Data"
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
0
:A=4
DX=5
NY=6
XF=7
bSP=8
l	mem=3
v
time=9
�
zpc=10
�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
4T3R=-&100+48
>T4=-&100+52
HT4R=-&100+56
Rscreen=-&100+60
\screenR=-&100+64
fmin=-&100+68
psound_timer=-&100+72
zifr=-&100+76
�ier=-&100+77
�ifr2=-&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
8lastmode=-&100+178
Bfe10=-&100+179
Ltape_count=-&100+180
Vkey_addr=-&100+184
` screenstart_tamper=-&100+188
j"screenstart_previous=-&100+192
tspeedR=-&100+196
~
�(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
2(.trace2                       EQUD 0
<+.init_addr                    EQUD init
F7.crt_addr                     EQUD 0 ; was crt_regs
P1.T1_addr                      EQUD 0 ; was T1
Z..ifr_addr                     EQUD 0 ; ifr
d5.column_counter_addr          EQUD column_counter
n1.ROMSEL_addr                  EQUD 0 ; ROMSEL
x2.Palette_addr                 EQUD 0 ; Palette
�5.speed_addr                   EQUD screen_count+4
�0.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
6ADD R6,R6,R0
@MOV R3,#255
J.init_loop
T;LDR R4,[R1,R3,LSL#2]
^;ADD R4,R4,R0
h;STR R4,[R1,R3,LSL#2]
r;LDR R4,[R2,R3,LSL#2]
|;ADD R4,R4,R0
�;STR R4,[R2,R3,LSL#2]
�LDR R4,[R5,R3,LSL#2]
�ADD R4,R4,R0
�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
0;ADD R0,R0,R1
:;SWI "6502_Init"
D
NBL blank_cursor
X
b"MOV R0,#&9C00 : ADD R0,R0,#&40
lSTR R0,[mem,#screenR]
v
�SWI "6502_Getkeyaddr"
�STR 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
4LDR F,[mem,#f]
>LDR zpc,[mem,#pc_store]
H
RBL recalc_wrap
\LDRB R0,[mem,#patch_on]
f� R0,R0,#%11111
pBIC F,F,#&FF00
z�R F,F,R0,LSL#8
�
�;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
	.
	8.reset_bcdflag
	BADR R1,0
	LTST F,#%1000
	VLDREQ table,opco_addr
	`LDRNE table,bcd_addr
	jADD table,table,R1
	tMOV PC,R14
	~
	�.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
(
2.show_regs
<
F;SWI "6502_Checkkdata"
PLDR R0,[mem,#key_addr]
ZLDRB R0,[R0,#-4]
d
n
xCMP R0,#&1F ; Insert
��Q R1,#1
�STREQ 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
,
6;LDRB R0,trace
@;CMP R0,#1
J;MOVNE PC,14
T
^
�showregs
hMOV PC,R14
r
|
.read_ifr
�LDRB 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
0�RNE R0,R0,#&80
:
DMOV PC,R14
N
X
.read_ier
bLDRB R0,[mem,#ier]
l�R R0,R0,#&80
vMOV PC,R14
�
�.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



.IOpodule_Read

� R0,R2,#&F

 SWI "6502_ReadSheila"

*MOV PC,R14

4

>.ldrb41

H

RSUB R12,mem,#512 ; sheila

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

fLDRB R2,[mem,#ifr]

p� R13,R1,#%1110

zTEQ R13,   #%0010

�TEQNE R13, #%0110

�BICEQ R2,R2,#%11

�BICNE R2,R2,#%10

�STRB R2,[mem,#ifr]

�

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

�MOV 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
8STRB R1,[mem,#ifr2]
BLDR R0,[mem,#T4]
LLDR R1,[mem,#min]
VSUB R0,R0,R1,LSL#15
`ADD R0,R0,time,LSL#15
jTST R0,#1 << 15 ; ???
tSUBNE time,time,#1
~MOV R0,R0,LSR#16
�� R0,R0,#&FF
�MOV PC,R14
�
�.readT4high_count
�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
�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
2LDR R0,[mem,#T3]
<LDR R1,[mem,#min]
FSUB R0,R0,R1,LSL#15
PADD R0,R0,time,LSL#15
ZTST R0,#1 << 15 ; ???
dSUBNE time,time,#1
nMOV R0,R0,LSR#16
x� R0,R0,#&FF
�MOV PC,R14
�
�.readT3high_count
�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#24
�MOV PC,R14
�
�.readT3low_latch
LDRB R0,[mem,#T3R+2]
MOV PC,R14

".readT3high_latch
,LDRB R0,[mem,#T3R+3]
6MOV PC,R14
@
J.ACRtemp
T
EQUD 0
^
h.writeACR2
r;MOV R0,#0
|;STRB R0,[mem,#T3mode]
�SUB R0,mem,#512
�LDRB R1,[R0,#&60]
��R R1,R1,#&80
�STRB R1,[R0,#&60]
�;MOV R0,#1
�;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
&
0+CMP R0,time,LSL#15 ; fix Exile's speech
:
DBHI skip_T3adjust
NLDRB R2,[mem,#ier2]
X
bTST R2,#%01000000
lMOVNE time,R0,LSR#15
v
�.skip_T3adjust
�LDR R1,[mem,#min]
�ADD R0,R0,R1,LSL#15
�SUB R0,R0,time,LSL#15
�STR R0,[mem,#T3]
�LDRB R1,[mem,#ifr2]
�BIC 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]
4
>LDRB R12,[mem,#crt_regs+9]
HCMP R12,#3
R�Q PC,R14 ; fortress fudge
\
f%MOV R0,#1 : STRB R0,[mem,#T3mode]
pMOV PC,R14
z
�.writeT3high_latch
�STRB R0,[mem,#T3R+3]
�MOV PC,R14
�
�.writeT4low_latch
�STRB R0,[mem,#T4R+2]
�MOV 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]
8LDRB R1,[mem,#ifr2]
BBICS R1,R1, #%001 << 5
LSTRB R1,[mem,#ifr2]
V%MOV R0,#1 : STRB R0,[mem,#T4mode]
`MOV PC,R14
j
t.readT2low_count
~LDRB R1,[mem,#ifr]
�BIC R1,R1, #%101 << 5
�0STRB R1,[mem,#ifr] ; clear T2 interrupt flag
�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#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
2TST R0,#1 << 15 ; ???
<SUBNE time,time,#1
FMOV R0,R0,LSR#24
PMOV PC,R14
Z
d.readT1low_count
nLDRB R1,[mem,#ifr]
xBIC R1,R1, #%1 << 6
�0STRB R1,[mem,#ifr] ; clear T1 interrupt flag
�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#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
6MOV R0,R0,LSR#24
@MOV PC,R14
J
T.readT1low_latch
^LDRB R0,[mem,#T1R+2]
hMOV PC,R14
r
|.readT1high_latch
�LDRB R0,[mem,#T1R+3]
�MOV PC,R14
�
�.writeT1low_latch
�STRB R0,[mem,#T1R+2]
�MOV 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
00STRB R1,[mem,#ifr] ; clear T1 interrupt flag
:SUB R0,mem,#512 ; sheila
DLDRB R1,[R0,#&40]
NBIC R1,R1,#&80
XSTRB R1,[R0,#&40]
b%MOV R0,#1 : STRB R0,[mem,#T1mode]
lMOV PC,R14
v
�.writeT1high_latch
�STRB R0,[mem,#T1R+3]
�MOV PC,R14
�
�.writeT2low_latch
�STRB R0,[mem,#T2R+2]
�MOV 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]
4BICS R1,R1, #%101 << 5
>0STRB R1,[mem,#ifr] ; clear T2 interrupt flag
H%MOV R0,#1 : STRB R0,[mem,#T2mode]
RMOV PC,R14
\
f;.T1mode
p;EQUD 1
z;.T2mode
�;EQUD 0
�;.T3mode
�;EQUD 1
�;.T4mode
�;EQUD 0
�;.T1
�;EQUD &1234 << 16
�	;.T1R
�;EQUD 20000 << 16
�;.T2
�;EQUD 98765 << 16
�	;.T2R
�;EQUD 255   << 16
;.T3
;EQUD 6777  << 16
	;.T3R
$;EQUD 6777  << 16
.;.T4
8;EQUD 7380  << 16
B	;.T4R
L;EQUD 255   << 16
V;.screen
`
;EQUD 432
j
;.screenR
t;EQUD 40000
~	;.min
�
;EQUD 200
�;.sound_timer
�;EQUD 0
�
�
�.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)
(
2
<
F.fetch2
P
ZLDR R0,[mem,#min]
dSUB R0,R0,time
nLDR R1,[mem,#sound_timer]
xSUB R1,R1,R0
�STR R1,[mem,#sound_timer]
�
�
�MOV R0,#0 : STR R0,keychk
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
�LDR R1,[mem,#screen]
�SUBS R1,R1,R0
�STRGT R1,[mem,#screen]
�BLLE vsync
�
�LDR R0,[mem,#min]
�SUB R0,R0,time ; ***
LDR R1,speed
SUBS R1,R1,R0
STRGT R1,speed
"BLLE speed_control
,
6; LDR R0,[mem,#T1mode]
@; TST R0,#%1
J; BEQ skip_timer1
T
^LDR R0,[mem,#min]
hSUB R0,R0,time ; ***
rLDR R1,[mem,#T1]
|SUBS R1,R1,R0,LSL#15
�STRGT R1,[mem,#T1]
�BLLE timer1
�.skip_timer1
�
�; LDR R0,[mem,#T2mode]
�; 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]
0; TST R0,#%1
:; BEQ skip_timer3
D
NLDR R0,[mem,#min]
XSUB R0,R0,time ; ***
bLDR R1,[mem,#T3]
lSUBS R1,R1,R0,LSL#15
vSTRGT R1,[mem,#T3]
�BLLE timer3
�.skip_timer3
�
�; LDR R0,[mem,#T4mode]
�; TST R0,#%1
�; MVNEQ R1,#0 ; -1
�; 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]
4SUB R0,R0,time
>LDR R1,[mem,#tape_count]
HSUBS R1,R1,R0
RSTRGT R1,[mem,#tape_count]
\BLLE tape_fetch
f
pLDRB R1,[mem,#ifr]
zLDRB R2,[mem,#ifr2]
�%LDRB R12,[mem,#ier] : � R1,R1,R12
�%LDRB R12,[mem,#ier2]: � R2,R2,R12
�%;BIC R1,R1,#&80 : ;BIC R2,R2,#&80
�
�
�;LDRB R0,[mem,#ier]
�.;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
8�EQS R2,R2,#%01111111
BBEQ skip_do_interrupt
L;CMP R13,#1
V;BNE skip_do_interrupt
`
j.do_interrupt
t�do_interrupt
~
�.skip_do_interrupt
�
�;BL keyboard �D � CLI!!!
�BL keys2
�.skip_keys
�LDR time,[mem,#T1]
�MOV time,time,LSR#15
�LDR R1,[mem,#screen]
�CMP R1,#0 : �Q R1,time
�CMP R1,time
�MOVLT time,R1
�LDRB R1,[mem,#T2mode]

CMP R1,#0

BEQ skipT2
LDR R1,[mem,#T2]

(;RJW
2MOVS R1,R1,LSR#15
<�Q R1,time
FCMP R1,time
PMOVLT time,R1
Z.skipT2
dLDR R1,[mem,#T3]
nMOVS R1,R1,LSR#15
x
�	; RJW
��Q R1,time
�CMP R1,time
�MOVLT time,R1
�LDRB R1,[mem,#T4mode]
�
CMP R1,#0
�BEQ 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]
6�fetch2
@
J.interrupt
T
^TST F,#%100
hMOVNE PC,R14
r
|LDRB R1,[mem,#ifr]
�LDRB R2,[mem,#ifr2]
�%LDRB R12,[mem,#ier] : � R1,R1,R12
�%LDRB R12,[mem,#ier2]: � R2,R2,R12
�
��S R1,R1,#%01111111
��EQS R2,R2,#%01111111
�
�Q PC,R14
�
��do_interrupt
�
�MOV PC,R14
�
�.F10temp
 
EQUD 0
 
 .F10
 &SWI "6502_Getkdata"
 0STR R14,F10temp
 :MOV R0,#255
 DSTRB R0,[mem,#lastmode]
 NBL updatescreen
 XBL force_update_pal
 Y
BL cursor
 bLDR PC,F10temp
 l
 v;.fetch3
 �
.keys2
 �;SWI "6502_Checkkdata"
 �LDR R0,[mem,#key_addr]
 �LDRB R0,[R0,#-4]
 �
 �
 �CMP R0,#&1F ; Insert
 ��Q R1,#1
 �STREQ R1,trace2
 �CMP R0,#10 ; F10
 �BEQ F10
 �CMP R0,#11 ; F11
 �CMPNE R0,#12 ; F12
!CMPNE R0,#15 ; break
!BEQ raw_exit2
!MOV PC,R14
! 
!*
.keyboard
!4MOV R0,#1 : STR R0,keychk
!>
!H
!R;SWI "6502_Checkkdata"
!\LDR R0,[mem,#key_addr]
!fLDRB R0,[R0,#-4]
!pCMP R0,#&FF : �Q PC,R14
!z
!�
!�SWI "6502_Getkdata"
!�;CMP R0,#&FF : ;�Q PC,R14
!�CMP R0,#&1F ; Insert
!��Q R1,#1
!�STREQ R1,trace2
!�CMP R0,#10 ; F10
!�BEQ F10
!�CMP R0,#15
!�CMPNE R0,#12
!�CMPNE R0,#11 ; F11
!�BEQ raw_exit
!�
";CMP R0,#0 ; escape
";LDREQB R0,[mem,#&FF]
";�REQ R0,R0,#&80
"$;STREQB R0,[mem,#&FF]
".LDRB R0,[R1,R0]
"8CMP R0,#&FF
"B;BEQ not_keyboard
"L
�Q PC,R14
"V
"`;B not_keyboard
"jCMP R0,#10 ; shift, ctrl
"tMOVLT PC,R14
"~LDRB R1,[mem,#ifr]
"�-�R R1,R1,#%1 ; interrupt is from keyboard
"�STRB R1,[mem,#ifr]
"�LDRB R0,[mem,#ier]
"�TST R0,#%1
"�
�Q PC,R14
"��do_interrupt
"�MOV PC,R14
"�
"�
"�;.no_interrupt
"�;LDRB R0,trace2
"�;CMP R0,#0
#;BEQ notrace2
#
;�showregs
#;.notrace2
#;�fetch2
#(
#2.define_cursor
#<$MOV R1,#0 : STRB R1,cursor_state
#F.define_cursor2
#PLDRB R1,cursor_state
#ZCMP R1,#0:MOVNE PC,R14
#d
#n-LDRB R1,[mem,#crt_regs+10] ; cursor start
#x
#�� R12,R1,#%100000
#�TST R12,#%1100000
#�BEQ blank_cursor
#�
#�+LDRB R2,[mem,#crt_regs+11] ; cursor end
#�� R1,R1,#31
#�� 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
$6
$@
MOV R0,#1
$JMOV R0,R0,LSL R13
$TTSTEQ R12,#%100000
$^�Q R0,#8 ; mode 2
$h
�Q R13,#3
$rSTRB R0,cursor_width
$|
$�TST R12,#%10 ; teletext
$�MVNNE R12,#7
$�
�Q R12,#1
$�
$�ADD R2,R2,R12
$�STRB 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
%&
%0MOV R0,#21
%:ADR R1,cursor_block
%DSWI "OS_Word"
%NMOVS PC,R14
%X
%b.blank_cursor
%l$MOV R1,#1 : STRB R1,cursor_state
%v.blank_cursor2
%�
%�ADR R1,cursor_block
%�ADR R0,blank_data
%�STR R0,cursor_block+6
%�MOV R0,#21
%�SWI "OS_Word"
%�MOV PC,R14
%�
%�.cursor_state
%�
EQUD 0
%�
%�.cursor_flash
%�
EQUD 0
&.flash_state
&
EQUD 0
&
& ;.not_keyboard
&*
EQUW 0
&4.cursor_block
&>
EQUB 0
&HEQUB 2 ; shape number
&R.cursor_width
&\EQUB 2 ; width in bytes
&f.cursor_height
&pEQUB 9 ; height in pixels
&z
EQUB 0
&�
EQUB 0
&�EQUD 0 ; address of data
&�
&�
&�	ALIGN
&�.blank_data
&�
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
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
'�
EQUD 0
(.cursor_data
(
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
)EQUD &FFFFFFFF
)EQUD &FFFFFFFF
)EQUD &FFFFFFFF
)"EQUD &FFFFFFFF
),EQUD &FFFFFFFF
)6EQUD &FFFFFFFF
)@EQUD &FFFFFFFF
)J
)T.cursor7
)^
)hLDRB R0,[mem,#crt_regs+14]
)rLDRB R1,[mem,#crt_regs+15]
)|ADD R0,R1,R0,LSL#8
)�
)�0LDRB R1,[mem,#crt_regs+12] : ;� R1,R1,#%1111
)�LDRB R2,[mem,#crt_regs+13]
)�ADD R2,R2,R1,LSL#8
)�SUBS R0,R0,R2
)�MOVMI 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
*0; We know that R0<1000
*:; R0 = R0 � 40
*D; R2 = R0 � 40
*N;�divmod(0,12,1,2,13)
*X!MOV R2,#((25<<5)+(25<<3))<<16
*bCMP R0,#640
*lSUBGE R0,R0,#640
*v$SUBGE R2,R2,#((1<<9)+(1<<7))<<16
*�CMP R0,#320
*�SUBGE R0,R0,#320
*�$SUBGE R2,R2,#((1<<8)+(1<<6))<<16
*�CMP R0,#160
*�SUBGE R0,R0,#160
*�$SUBGE R2,R2,#((1<<7)+(1<<5))<<16
*�CMP 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
+4(SWI "OS_Word" ; set pointer position
+>;MOV PC,R14
+?B define_cursor2
+H
+R;B cursor_cont
+\
+f.padding_to_align_osword
+pEQUB 0 : EQUB 0 : EQUB 0
+z.osword21_5_block
+�
EQUB 5
+�.osword21_5_block1
+�
EQUD 0
+�
+�0� R0,R0,#&20 : ADD R0,R0,#&74 : � R0,R0,#&FF
+�
+�
+�.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
,8BEQ blank_cursor
,B
,LTST R0,#%10 ; teletext
,VBNE cursor7
,`
,jLDRB R0,[mem,#crt_regs+14]
,tLDRB R1,[mem,#crt_regs+15]
,~ADD R0,R1,R0,LSL#8
,�
,�/LDRB R1,[mem,#crt_regs+12] : � R1,R1,#%1111
,�LDRB R2,[mem,#crt_regs+13]
,�ADD R2,R2,R1,LSL#8
,�SUBS R0,R0,R2
,�MOVMI 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
-2
-<; We know R0<32*R12
-F; R0 = R0 � R12
-P; R2 = R0 � R12
-ZMOV R2,#32<<21
-dCMP R0,R12,LSL#4
-nSUBGE R0,R0,R12,LSL#4
-xSUBGE R2,R2,#16<<21
-�CMP R0,R12,LSL#3
-�SUBGE R0,R0,R12,LSL#3
-�SUBGE R2,R2,#8<<21
-�CMP R0,R12,LSL#2
-�SUBGE R0,R0,R12,LSL#2
-�SUBGE R2,R2,#4<<21
-�CMP 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
.6STR R0,osword21_5_block1
.@ADR R1,osword21_5_block
.JMOV R0,#21
.T(SWI "OS_Word" ; set pointer position
.^;MOV PC,R14
._B define_cursor2
.h
.r.mono_time
.|
EQUD 0
.�
.speed
.�
EQUD 0
.�
.�.speed_control
.�LDR R0,[mem,#speedR]
.�ADD R1,R1,R0
.�STR R1,speed
.�
.�LDR R1,mono_time
.�.mono_loop
.�SWI "OS_ReadMonotonicTime"
.�MOV R0,R0,LSR#1
.�
CMP R0,R1
/BEQ mono_loop
/STR R0,mono_time
/
/&MOV PC,R14
/0
/:
/D
/N
.vsync
/XSTR R14,vsyncR14
/b
/l
/vLDR R0,[mem,#screenR]
/�ADD R1,R1,R0
/�STR R1,[mem,#screen]
/�
/�LDRB R0,ldrb40_tamper
/�"CMP R0,#1 : BLEQ ldrb40_update
/�
/�;BL trace_on
/�
/�;LDRB R1,screen_count
/�;SUBS R1,R1,#1
/�;LDRMIB R1,screen_count+4
/�;STRB R1,screen_count
/�LDR R0,[mem,#tamper]
0
CMP R0,#0
0
0BEQ no_tamper
0 
MOV R0,#0
0*STR R0,[mem,#tamper]
04;SWI "6502_UpdateScreen"
0>BL recalc_wrap
0HBL updatescreen
0RTST F,#1 << 10 ; cursor on?
0\BLNE define_cursor
0fBLNE cursor
0p.no_tamper
0zLDRB R0,[mem,#pal_tamper]
0�
CMP R0,#0
0�BLNE update_pal
0�
0�
0�LDR R0,[mem,#cursor_tamper]
0�
CMP R0,#0
0�BLNE cursor
0�
0�
0�
0�SUB R0,mem,#512 ; sheila
0�LDRB R1,[R0,#&20]
0�TST R1,#%10 ; teletext?
1;SWINE "6502_UpdateScreen"
1BLNE updatescreen
1ADD R0,R0,#&4D
1$;LDRB R1,[R0]
1.;LDRB R2,[R0,#1]
18LDRB R1,[mem,#ifr]
1BLDRB R2,[mem,#ier]
1L+�R R1,R1,#%10 ; interrupt is from vsync
1V-TST R2,#%10 ; is vsync interrupt enabled?
1`�RNE R1,R1,#&80
1j;STRB R1,[R0]
1tSTRB R1,[mem,#ifr]
1~;BEQ no_interrupt
1�;�fetch2
1�
1�;TST F,#1 << 9
1�;BEQ skip_exact
1�
1�;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
2
2
.skip_exact
2
2TST F,#1 << 10 ; cursor on?
2(LDREQ PC,vsyncR14
22
2<LDRB R1,cursor_state
2F
CMP R1,#0
2PLDRNE PC,vsyncR14
2Z
2dLDRB R1,[mem,#crt_regs+10]
2n/TST R1,#%1000000 ; cursor blinking enabled?
2xLDREQ PC,vsyncR14
2�
2�LDRB R0,cursor_flash
2�SUBS R0,R0,#1
2�STRB R0,cursor_flash
2�LDRGE PC,vsyncR14
2�
2�TST 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
3� R0,R0,#1
3STRB R0,flash_state
3!CMP R0,#0 : BEQ blank_cursor2
3"B define_cursor2
3,
36;LDR PC,vsyncR14
3@
.vsyncR14
3J
EQUD 0
3T
3^.ldrb40
3h
3rLDRB R2,ldrb40_value
3|BIC R0,R0,#%110000
3��R R0,R0,R2
3�
MOV R1,#1
3�STRB R1,ldrb40_tamper
3�MOV PC,R14
3�
3�.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" ; joy 0
4BVS ldrb40_mouse
4� R1,R0,#&10000
4
MOV R0,#1
4&)SWI &63F40 ; "XJoystick_Read" ; joy 1
40MOVVS R0,#0
4:� R0,R0,#&10000
4DADD R1,R1,R0,LSL#1
4N� R1,R1,#&30000
4XMOV R1,R1,LSR#(16-4)
4b
4l� R2,R1,#%110000
4v
4�;ADD R13,mem,#&FE00
4�;LDRB R0,[R13,#&40]
4�;BIC R0,R0,#%110000
4�STRB R2,ldrb40_value
4�;�R R0,R0,R2
4�
4�MOV PC,R14
4�
4�.ldrb40_tamper
4�
EQUD 0
4�.ldrb40_value
4�
EQUD 0
4�
5.ldrb40_mouse
5MOV R13,R3
5SWI "OS_Mouse"
5 MOV R3,R13
5*
54MOV R2,R2,LSR#1
5>RSB R2,R2,#3
5HMOV R2,R2,LSL#4
5R;ADD R13,mem,#&FE00
5\;LDRB R0,[R13,#&40]
5f;BIC R0,R0,#%110000
5pSTRB R2,ldrb40_value
5z;�R R0,R0,R2
5�
5�MOV PC,R14
5�
5�.write_ADC_status
5�
5�TST F,#1<<9 ; joystick
5�
�Q PC,R14
5�
5�
5�BIC R12,R0,#%11110000
5�
5�MOV R0,R0,LSR#1
5�!� R0,R0,#%1 ; joystick number
6!SWI &63F40 ; "XJoystick_Read"
6BVS write_ADC_mouse
6
6$
6.(TST R12,#%1  ; left/right or up/down
68�Q R0,R0,LSR#8
6BADD R0,R0,#127
6L� R0,R0,#&FF
6VRSBEQ R0,R0,#255
6`
6jMOV R1,R0,LSR#2
6t� R1,R1,#%110000
6~�R R12,R12,R1
6��R R12,R12,#%1000000
6�
6�SUB R1,mem,#512 ; sheila
6�
6�STRB R12,[R1,#&C0]
6�STRB 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]
7
7
MOV PC,R14
7
7.write_ADC_mouse
7(
72MOV R13,R3
7<SWI "OS_Mouse"
7FMOV R3,R13
7P
7ZMOV R2,#1024
7dSUB R2,R2,#1
7nSUBS R0,R2,R0
7xMOVLT R0,#0
7�
7�;CMP R0,#1024
7�;MOVGE R0,#1024
7�;SUBGE R0,R0,#1
7�
7�(TST R12,#%1  ; left/right or up/down
7�MOVNE R0,R1
7�
7�MOV R1,R0,LSL#4
7�� R1,R1,#%110000
7��R R12,R12,R1
7��R R12,R12,#%1000000
7�
8SUB R1,mem,#512 ; sheila
8
8STRB R12,[R1,#&C0]
8"STRB R12,[R1,#&18]
8,
86MOV R12,R0,LSR#2
8@STRB R12,[R1,#&C1]
8JSTRB R12,[R1,#&19]
8TMOV R12,R0,LSL#6
8^STRB R12,[R1,#&C2]
8hSTRB R12,[R1,#&1A]
8r
8|MOV PC,R14
8�
8�
8�.timer1
8�LDR R0,[mem,#T1R]
8�ADD R1,R1,R0
8�ADD 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
9STREQB R2,[mem,#T1mode]
9
9TST R1,#%10000000
9&LDRNEB R2,[R0,#&40] ; FE40
90�NE R2,R2,#&80
9:STRNEB R2,[R0,#&40] ; FE40
9D
9NLDRB R1,[mem,#ifr]
9X3�R R1,R1,#%01000000 ; interrupt is from timer 1
9bSTRB R1,[mem,#ifr]
9l
9vMOV PC,R14
9�
9�.timer2
9�LDRB R0,[mem,#T2mode]
9�
CMP R0,#0
9�
�Q PC,R14
9�
MOV R0,#0
9�STRB R0,[mem,#T2mode]
9�
9�LDRB R1,[mem,#ifr]
9��R R1,R1,#%00100000
9�STRB R1,[mem,#ifr]
9�
9�MOV PC,R14
:
:.timer3
:LDR R0,[mem,#T3R]
: ADD R1,R1,R0
:*STR R1,[mem,#T3]
:4
:>SUB R0,mem,#512 ; sheila
:H
:RLDRB R1,[R0,#&6B]
:\TST R1,#%01000000
:fBNE T3mode_skip2
:p
:zLDRB R1,[mem,#T3mode]
:�
CMP R1,#1
:�;SWINE &100+�"1"
:�;SWIEQ &100+�"0"
:�BNE T3mode_skip
:�
:�.T3mode_skip2
:�LDRB 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"
;.
;8.T3mode_skip
;B
MOV R2,#0
;LSTRB R2,[mem,#T3mode]
;V
;`;LDRB R1,[R0,#&6B] ; FE6B
;j;TST R1,#%10000000
;t;LDRB R2,[R0,#&60] ; FE60
;~;�NE R2,R2,#&80
;�;�REQ R2,R2,#&80
;�;STRB R2,[R0,#&60] ; FE60
;�
;�LDRB R1,[R0,#&6B] ; FE6B
;�� R1,R1,#&C0
;�TST 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
<2
EQUD 0
<<
<F.timer4
<PLDRB R1,[mem,#T4mode]
<Z
CMP R1,#0
<d
�Q PC,R14
<n
MOV R0,#0
<xSTRB R0,[mem,#T4mode]
<�
<�
<�LDRB R1,[mem,#ifr2]
<�3�R R1,R1,#%00100000 ; interrupt is from timer 4
<�STRB R1,[mem,#ifr2]
<�
<�MOV 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
=6LDR R0,[mem,R0]
=@MOV zpc,R0,LSL#16
=J'BIC F,F,#%1000 ; clear Decimal mode
=T)�R F,F,#%100  ; set interrupt disable
=^�fetch2
=h
=r
=|	.exit
=�
MOV R0,#0
=�.raw_exit2
=�SWI "6502_Getkdata"
=�
.raw_exit
=�STR time,[mem,#min]
=�STR A,[mem,#a]
=�STR X,[mem,#x]
=�STR Y,[mem,#y]
=�STR SP,[mem,#sp]
=�STR F,[mem,#f]
=�STR zpc,[mem,#pc_store]
=�LDR R13,return_addr
=�LDMFD R13!,{R1-R12,PC}
>;MOV PC,R14
>
>
>&.fe08_read
>0
EQUB 0
>:.fe08_write
>D
EQUB 0
>N	.fe09
>X
EQUB 0
>b
;.fe10
>l;EQUB 0
>v	ALIGN
>�.tbuffer
>�
EQUD 0
>�
>�.tape_fetch
>�;LDR R0,[mem,#tapeR]
>�0;MOV R0,#&3400 ; 2000000/(1200/8)~=1200 baud
>�MOV 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
?*
?4LDRB R1,[mem,#tape_handle]
?>
CMP R1,#0
?H
�Q PC,R14
?R
?\
.tape_get
?fSWI "XOS_BGet"
?pMOVVS R1,#0
?z STRVSB R1,[mem,#tape_handle]
?�MOVVS PC,R14
?�
?�BCC tape_skip10
?�
?�
MOV R0,#1
?�
MOV R2,#0
?�)SWI "XOS_Args" ; rewind tape to start
?�MOVVS R1,#0
?� STRVSB R1,[mem,#tape_handle]
?�MOVVS PC,R14
?�
?�.tape_skip10
?�
@CMP R0,#&FF
@BNE not_FF
@SWIEQ "XOS_BGet"
@$CMP R0,#&FF
@.BEQ not_FF
@8
@BLDRB R1,fe08_read
@LBIC R1,R1,#%100
@V� R0,R0,#%100
@`�R R1,R1,R0
@j;�R R1,R1,#&80 ; ??
@tSTRB R1,fe08_read
@~
@�
CMP R0,#0
@�
@�;MOV R0,#&10000
@�;STR R0,[mem,#tape_count]
@�
@�;B do_interrupt
@�
�Q PC,R14
@�
@��R R1,R1,#&80
@�STRB R1,fe08_read
@�B do_interrupt
@�
A.not_FF
A
STRB R0,fe09
A
A
A(LDRB R0,fe08_write
A2.TST R0,#&80 ; receive interrupt enable bit
A<
�Q PC,R14
AF
APLDRB R0,fe08_read
AZ�R R0,R0,#&81
AdSTRB R0,fe08_read
An
AxB do_interrupt
A�;MOV PC,R14
A�
A�
.readFE08
A�;LDRB R1,tbuffer
A�;LDRB R0,[mem,#&C2]
A�;CMP R0,#1
A�LDRB R0,fe08_read
A�;CMPEQ R1,#�"*"
A�;�REQ R0,R0,#%100
A�;BICNE R0,R0,#%100
A�MOV PC,R14
A�
A�
.readFE09
BLDRB R0,fe08_read
BBIC R0,R0,#&81
BSTRB R0,fe08_read
B"LDRB R0,fe09
B,MOV PC,R14
B6
B@.writeFE08
BJSTRB R0,fe08_write
BTMOV PC,R14
B^
Bh.writeFE09
BrMOV PC,R14
B|
B�
.readFE10
B�MOV R0,#&A2
B�MOV PC,R14
B�
B�.writeFE10
B�STRB R0,[mem,#fe10]
B�MOV PC,R14
B�
B�
.dummy
B�MOV PC,R14
B�
B�;.ROMSEL
B�;EQUD 0
C
C;.rom ; ROM paged in
C;EQUD 0
C&
C0#;.ROMRAM ; which banks are RAM?
C:);EQUD 0 : ;EQUD 0 : ;EQUD 0 : ;EQUD 0
CD
CN;.ACCCON
CX;EQUD 0
Cb
Cl
Cv.swap_main_shadow
C�
C� STMFD mem,{R0-R2,R4-R11,R14}
C�ADD R14,mem,#&3000
C�SUB R13,mem,#&10000
C�MOV R12,#&5000
C�.swap_loop
C�LDMIA 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�
DLDMIA R13,{R6-R10}
D;LDR R6,[R13,#0]
D;LDR R7,[R13,#4]
D ;LDR R8,[R13,#8]
D*;LDR R9,[R13,#12]
D4;LDR R10,[R13,#16]
D>
DHSTMIA R13!,{R0-R2,R4-R5}
DR;STR R0,[R13,#0]
D\;STR R1,[R13,#4]
Df;STR R2,[R13,#8]
Dp;STR R4,[R13,#12]
Dz;STR R5,[R13,#16]
D�
D�STMIA R14!,{R6-R10}
D�;STR R6,[R14,#0]
D�;STR R7,[R14,#4]
D�;STR R8,[R14,#8]
D�;STR R9,[R14,#12]
D�;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�
E LDMEA mem,{R0-R2,R4-R11,R14}
EB swap_exit
E
E$
E.(.strb_rom_ret2 ; between C000 � E000
E8LDRB R2,[mem,#ACCCON]
EBTST R2,#%1000
EL
�Q PC,R14
EV;STRNEB R0,[mem,R1]
E`MOV R2,#pagetable
EjLDRB R2,[R2,R1,LSR#12]
EtSTRB R0,[R1,R2,LSL#12]
E~MOV PC,R14
E�
E�.acccon
E�]
E�"� �master � [OPTp:MOV PC,R14:]
E�	[OPTp
E�LDRB R1,[mem,#ACCCON]
E�STRB R0,[mem,#ACCCON]
E�� R2,R0,R1
E�
E�,TST R2,#%1 ; main/shadow to be displayed
E�STRNEB R2,[mem,#tamper]
E�
FMOV R12,#pagetable
F

F
F.;TST R2,#%100 ; main/shadow to be paged in
F(;;;;;BNE swap_main_shadow
F2;�Q R13,#&A0
F<;MOVNE R13,#&8D
FF;STRB R13,[R12,#3]
FP;STRB R13,[R12,#4]
FZ;STRB R13,[R12,#5]
Fd;STRB R13,[R12,#6]
Fn;STRB R13,[R12,#7]
Fx
F�
F�.swap_exit
F�
F�(;�S R2,R2,#%1000 ; filing system RAM
F�
F�TST R0,#%1000
F��Q R13,#&A0
F�MOVNE R13,#&95-&C
F�STRB R13,[R12,#&C]
F�STRB R13,[R12,#&D]
F�MOV PC,R14
F�
F�
G
�Q PC,R14
G
GSTMFD mem,{R0-R2,R4-R9,R14}
G"
G,TST R1,#%1000
G6BEQ os_out
G@;BNE os_in
GJ
GT.os_in ; RJW
G^LDR R12,roms_addr
Gh.ADD R12,R12,#16*16*1024 ; 17th ROM = OS3.2
GrMOV R13,#&2000
G|SUB R2,mem,#&B000
G�ADD mem,mem,#&C000
G�.os_in_loop
G�(LDMIA mem, {R0,R1,R4,R5,R6,R7,R8,R9}
G�(STMIA R2!, {R0,R1,R4,R5,R6,R7,R8,R9}
G�(LDMIA R12!,{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_in_loop
G�SUB mem,mem,#&E000
G�LDMEA mem,{R0-R2,R4-R9,PC}
G�
G�.os_out ; RJW
G�MOV R13,#&2000
HSUB R2,mem,#&B000
HADD mem,mem,#&C000
H.os_out_loop
H&'LDMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R9}
H0*STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R9}
H:SUBS R13,R13,#4*8
HDBGT os_out_loop
HNSUB mem,mem,#&E000
HXLDMEA mem,{R0-R2,R4-R9,PC}
Hb
Hl&.strb8000      ; greater than 8000
Hv]
H�� master �
H�	[OPTp
H�CMP R1,#&E000
H�BGE strb_rom_ret
H�CMP R1,#&C000
H�BGE strb_rom_ret2
H�CMP R1,#&9000
H�BGE strb_rom
H�]
H��
H�	[OPTp
H�CMP R1,#&C000
H�BGE strb_rom_ret
I]
I�
I	[OPTp
I 
I*LDRB R12,[mem,#rom]
I4TST R12,#&80
I>%BEQ strb_rom ; ie not private RAM
IH
IR;STRB R0,[mem,R1]
I\MOV R2,#pagetable
IfLDRB R2,[R2,R1,LSR#12]
Ip(STRB R0,[R1,R2,LSL#12] ; private RAM
IzMOV PC,R14
I�
I�
.strb_rom
I�SUB R12,mem,#-ROMRAM
I�LDRB R13,[mem,#rom]
I�� R13,R13,#%1111
I�LDRB R13,[R12,R13]
I�CMP R13,#0
I�MOVNE PC,R14
I�;STREQB R0,[mem,R1]
I�MOV R2,#pagetable
I�LDRB R2,[R2,R1,LSR#12]
I�STRB R0,[R1,R2,LSL#12]
I�MOV PC,R14
J;B strb_rom_ret
J
J.romsel
J$LDRB R12,[mem,#ROMSEL_ON]
J.CMP R12,#0
J8MOVNE PC,R14
JB
JL� R0,R0,#%10001111
JVSTRB R0,[mem,#rom]
J`
JjMOV R12,#pagetable
Jt
J~#MOV R1,R0,LSL#2 ; multiply by 4
J�ADD R1,R1,#&44 ; &4C-8
J�STRB R1,[R12,#&8]
J�STRB R1,[R12,#&9]
J�STRB R1,[R12,#&A]
J�STRB R1,[R12,#&B]
J�
J�TST R0,#%10000000
J�+;�Q R13,#&A0 ; this will need to change
J�MOVNE R13,#&95
J�;STRB R13,[R12,#&8]
J�STRNEB R13,[R12,#&8]
J�
KMOV PC,R14
K

KLDRB R1,[mem,#rom]
K
K(]
K2� �master �
K<	[OPTp
KF� R0,R0,#%1111
KPDCMP R0,R1 : �Q PC,R14 ; WAR (used to) need this commented out!?!
KZB romsel_next
Kd]
Kn�
Kx	[OPTp
K�
K�� R0,R0,#%10001111
K�
K�DCMP R0,R1 : �Q PC,R14 ; WAR (used to) need this commented out!?!
K�
K�;� R2,R0,R1
K�*;�S R2,R2,#%10000000 ; private RAM bit
K�&;BEQ romsel_next ; bit not changed
K�
K�;TST R1,#%10000000
K�*;BNE private_out ; map out private RAM
K�);BEQ private_in  ; map in private RAM
K�
L
L.romsel_next
LLDR R12,roms_addr
L"� R2,R0,#&F ; socket number
L,LDRB R1,[mem,#rom]
L6� R1,R1,#&F
L@STRB R0,[mem,#rom]
LJSUB R13,mem,#-ROMRAM
LTLDRB R13,[R13,R1]
L^1CMP R13,#0 ; is the bank being paged out RAM?
LhBNE romsel2
Lr
L|/;TST R0,#%10000000 ; private RAM mapped in?
L�;�Q R13,#&8000
L�;MOVNE R13,#&9000
L�MOV R13,#&8000
L�� R0,R0,#&F
L�
L�ADD R2,R12,R1,LSL#14
L�;ADDNE R2,R2,#&1000
L�&ADD R12,R12,R0,LSL#14 ; R0*16*1024
L�;ADDNE R12,R12,#&1000
L�ADR R1,romsel_loop_temp
L�STMIA R1,{R0,R4-R8,R14}
L�ADD mem,mem,R13
L�RSB R13,R13,#&C000
M.romsel_loop
M(LDMIA mem,{R0,R1,R4,R5,R6,R7,R8,R14}
M(STMIA R2!,{R0,R1,R4,R5,R6,R7,R8,R14}
M&)LDMIA R12!,{R0,R1,R4,R5,R6,R7,R8,R14}
M0+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
M:SUBS R13,R13,#4*8
MDBNE romsel_loop
MNSUB mem,mem,#&C000
MXADR R1,romsel_loop_temp
MbLDMIA R1,{R0,R4-R8,PC}
Ml.romsel_loop_temp
MvEQUD 0:EQUD 0:EQUD 0:EQUD 0
M�EQUD 0:EQUD 0:EQUD 0:EQUD 0
M�
M�.romsel_empty
M�ADD R13,R2,R2,LSL#8
M�ADD R13,R13,R13,LSL#16
M�ADD R0,mem,#&8000
M�STR R13,[R0,#0]
M�STR R13,[R0,#4]
M�STR R13,[R0,#8]
M�STR R13,[R0,#12]
M�MOV PC,R14
M�
M�.romsel2
N
NSUB R13,mem,#-ROMRAM
NLDRB R13,[R13,R2]
N 3CMP R13,#2 ; is the bank being paged out empty?
N*BEQ romsel_empty
N4
N>/;TST R0,#%10000000 ; private RAM mapped in?
NH;�Q R13,#&8000
NR;MOVNE R13,#&9000
N\MOV R13,#&8000
Nf� R0,R0,#&F
Np
Nz
N�&ADD R12,R12,R0,LSL#14 ; R0*16*1024
N�;ADDNE R12,R12,#&1000
N�ADD mem,mem,R13
N�RSB R13,R13,#&C000
N�ADR R1,romsel_loop_temp
N�STMIA R1,{R0,R4-R8,R14}
N�.romsel2_loop
N�+LDMIA  R12 !,{R0,R1,R4,R5,R6,R7,R8,R14}
N�+STMIA (mem)!,{R0,R1,R4,R5,R6,R7,R8,R14}
N�;LDR R1,[R12],#4
N�=;STR R1,[mem],#4 ; store byte from ROM in main memory map
N�SUBS R13,R13,#4*8
N�BNE romsel2_loop
OSUB mem,mem,#&C000
OADR R1,romsel_loop_temp
OLDMIA R1,{R0,R4-R8,PC}
O$
O..private_in ; RJW
O8STMFD mem,{R0-R2,R4-R10}
OBLDR R2,roms_addr
OL� R1,R1,#&F
OV$ADD R2,R2,R1,LSL#14 ; R1*16*1024
O`SUB R12,mem,#&B000-&8000
OjMOV R13,#&1000
OtADD mem,mem,#&8000
O~.priv_in_loop
O�+LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
O�+STMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
O�+LDMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
O�+STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
O�SUBS R13,13,#4*8
O�BNE priv_in_loop
O�SUB mem,mem,#&9000
O�LDMEA mem,{R0-R2,R4-R10}
O�B romsel_next
O�
O�.private_out ; RJW
O�STMFD mem,{R0-R2,R4-R10}
PLDR R2,roms_addr
P
LDRB R1,[mem,#rom]
P� R1,R0,#&F
P$ADD R2,R2,R1,LSL#14 ; R1*16*1024
P(SUB R12,mem,#&B000-&8000
P2MOV R13,#&1000
P<ADD mem,mem,#&8000
PF.priv_out_loop
PP+LDMIA (mem), {R1,R4,R5,R6,R7,R8,R9,R10}
PZ+STMIA R12!,  {R1,R4,R5,R6,R7,R8,R9,R10}
Pd+LDMIA R2!,   {R1,R4,R5,R6,R7,R8,R9,R10}
Pn+STMIA (mem)!,{R1,R4,R5,R6,R7,R8,R9,R10}
PxSUBS R13,R13,#4*8
P�BNE priv_out_loop
P�SUB mem,mem,#&9000
P�LDMEA mem,{R0-R2,R4-R10}
P�B romsel_next
P�
P�.crt
P�SUB R1,mem,#512 ; sheila
P�LDRB R12,[R1,#0]
P�� R12,R12,#%11111
P�CMP R12,#17
P�MOVHI PC,R14
P�;ADR R13,crt_regs
P�SUB R13,mem,#-crt_regs
QLDRB R1,[R13,R12]
Q%CMP R1,R0 : �Q PC,R14 ; no change
QSTRB R0,[R13,R12]
Q"ADD PC,PC,R12,LSL#2
Q,$MOV R0,R0 ; padding for pipeline
Q6)MOV PC,R14                    ; reg 0
Q@)B new_horizvert               ; reg 1
QJ)MOV PC,R14                    ; reg 2
QT)MOV PC,R14                    ; reg 3
Q^)MOV PC,R14                    ; reg 4
Qh)MOV PC,R14                    ; reg 5
Qr)B new_horizvert               ; reg 6
Q|)MOV PC,R14                    ; reg 7
Q�)MOV PC,R14                    ; reg 8
Q�)MOV PC,R14                    ; reg 9
Q�*B cursor_start                ; reg 10
Q�*B cursor_end                  ; reg 11
Q�*B crt12                       ; reg 12
Q�*B crt13                       ; reg 13
Q�*B cursor_changed              ; reg 14
Q�*B cursor_changed              ; reg 15
Q�*MOV PC,R14                    ; reg 16
Q�*MOV PC,R14                    ; reg 17
Q�
Q�
Q�
RJCMP R12,#14 : CMPNE R12,#15 : �Q R0,#1 : STREQ R0,[mem,#cursor_tamper]
R"CMP R12,#10 : BEQ cursor_start
R CMP R12,#11 : BEQ cursor_end
R&(CMP R12,#12 : BEQ crt12 : .crt12cont
R0CMP R12,#12
R:CMPNE R12,#13
RDCMPNE R12,#1
RNCMPNE R12,#6
RXMOVNE PC,R14
RbMOV R13,#1
RlSTR R13,[mem,#tamper]
RvCMP R12,#1
R�CMPNE R12,#6
R�BEQ new_horizvert
R�;CMP R12,#13
R�;SWIEQ "6502_UpdateScreen"
R�CMP R12,#12
R�CMPNE R12,#13
R�MOVNE PC,R14
R�B recalc_wrap
R�
R�.cursor_changed
R�
MOV R0,#1
R� STRB R0,[mem,#cursor_tamper]
R�MOV PC,R14
S
S.new_horizvert
SMOV R13,#1
S STR R13,[mem,#tamper]
S*SUB R12,R1,R0
S4CMP R12,#2
S>MOVLE PC,R14
SH+MOV R12,#255 : STRB R12,[mem,#lastmode]
SRMOV PC,R14
S\
Sf
.crt12
SpCMP R0,#%0110
SzMOVLT R0,#%110
S�STRB R0,[R13,R12]
S�;B crt12cont
S�
.crt13
S�
S�TST F,#1<<11
S�;]
S�;� � HWScroll �
S�
;[OPTp
S�
�Q R13,#1
S�=STREQ R13,[mem,#tamper]   ; don't want this for HW Scroll
S�BEQ recalc_wrap
S�;]
S�;�
T
T
;[OPTp
T; HW scroll
T$LDR R12,updatepixelV
T.ADR R13,dohardware_scroll
T8CMP R12,R13
TBSTRNE R13,updatepixelV
TL
TVB recalc_wrap
T`
Tj.dohardware_scroll
Tt'; Here we do the hardware scrolling
T~STR R14,yuk
T�BL dohardwarescroll
T�BL poke_updatepixelV
T�LDR R14,yuk
T�); Then we go do the update as normal.
T�4;LDR PC,dohardware_scrollV ; old contents of upV
T�LDR PC,updatepixelV
T�
T�.yuk
T�
EQUD 0
T�
T�;.dohardware_scrollV
T�;EQUD 0
U
U
.dohardwarescroll
U�dohardwarescroll
U
U(;.screenwidthchanged
U2;MOV PC,R14
U<
UF .hardware_scroll_stack_space
UP]:P%+=256:O%+=256:[OPT p
UZ$.hardware_scroll_stack_space_top
Ud]
Un
Ux�
U�
U�	[OPTp
U�"; end of hardware scroll stuff
U�
U�.cursor_start
U�\LDRB R1,[mem,#cursor_on]
U�\CMP R1,#0:\MOVNE PC,R14
U�TST F,#1 << 10 ; cursor on?
U�
�Q PC,R14
U�LDRB R1,[mem,#crt_regs+11]
U�� R1,R1,#%11111
U�� R2,R0,#%11111
U�
CMP R2,R1
VBGT blank_cursor
V
V� R0,R0,#%100000
V"TST R0,#%1100000
V,BEQ blank_cursor
V6B define_cursor
V@
VJ.cursor_end
VT\LDRB R1,[mem,#cursor_on]
V^\CMP R1,#0:\MOVNE PC,R14
VhTST F,#1 << 10 ; cursor on?
Vr
�Q PC,R14
V|� R1,R0,#%11111
V�LDRB R2,[mem,#crt_regs+10]
V�� R2,R2,#%11111
V�
CMP R2,R1
V�BGT blank_cursor
V�B define_cursor
V�;MOV PC,R14
V�
V�	.link
V�
EQUD 0
V�
V�.caps_lock
V�� R0,R0,#%1000
V�MOV R1,R0,LSL#1
WMOV R0,#202
WMOV R2,#%11101111
WSWI "OS_Byte"
W&MOV R0,#118
W0SWI "OS_Byte"
W:MOV PC,R14
WD
WN
.latch
WX;�R R0,R0,#%110000
Wb';STRB R0,[mem,R1] ; no fire buttons
Wl�S R2,R0,#%111
Wv
W�;RJW
W�;CMP R2,#0
W�TSTEQ F,#1<<12 ; sound on?
W�BEQ sound_latch
W�
CMP R2,#3
W�BEQ latch_keyb
W�
CMP R2,#6
W�BEQ caps_lock
W�LDRB R12,[mem,#crt_regs+19]
W�
CMP R2,#4
W��EQ R13,R0,#%1000
W�BICEQ R12,R12,#%1
W��REQ R12,R12,R13,LSR#3
X
CMP R2,#5
X�EQ R13,R0,#%1000
XBICEQ R12,R12,#%10
X �REQ R12,R12,R13,LSR#2
X*STRB R12,[mem,#crt_regs+19]
X4
X>.recalc_wrap
XHLDRB R12,[mem,#crt_regs+19]
XR�S R12,R12,#%11
X\MOVNE R13,#&5800
Xf�Q R13,#&4000
XpCMP R12,#%10
Xz�Q R13,#&3000
X�CMP R12,#%01
X��Q R13,#&6000
X�
X�LDRB R12,[mem,#crt_regs+13]
X�LDRB R2,[mem,#crt_regs+12]
X�� R2,R2,#%1111
X�ADD R12,R12,R2,LSL#8
X�
X�CMP R13,R12,LSL#3
X�MOVGT R13,R12,LSL#3
X�
X�SUB R12,mem,#512 ; sheila
X�LDRB R12,[R12,#&20]
Y
YTST R12,#%10 ; teletext?
YMOVNE R13,#&7C00
Y$
Y.;� F,F,#&FF
Y8BIC F,F,#&FF000000
YBBIC F,F,#&FF0000
YL�R F,F,R13,LSL#16
YV;STR R13,wrap_addr
Y`MOV PC,R14
Yj
Yt
Y~.latch_keyb
Y�
Y�� R2,R0,#%1000
Y�STRB R2,key_write_ena
Y�CMP R2,#%1000
Y�MOVNE PC,R14
Y�
MOV R2,#0
Y�STRB R2,column_counter
Y�MOV PC,R14
Y�
Y�.printer_write
Y�SWI &102
Y�SWI &101
ZSWI "OS_WriteC"
Z
MOV R0,#152 : MOV R1,#3
Z(SWI "OS_Byte" ; check printer buffer
ZBCS printer_on
Z(MOV R0,#21 : MOV R1,#3
Z2 SWI "OS_Byte" ; flush buffer
Z<.printer_on
ZFSWI &103
ZPLDRB R0,[mem,#ifr2]
ZZ�R R0,R0,#%10
ZdSTRB R0,[mem,#ifr2]
ZnMOV PC,R14
Zx
Z�.regB_41
Z�
Z�SUB R12,mem,#512 ; sheila
Z�LDRB R1,[R12,#&C] ; PCR
Z�LDRB R2,[mem,#ifr]
Z�� R13,R1,#%1110
Z�TEQ R13,   #%0010
Z�TEQNE R13, #%0110
Z�BICEQ R2,R2,#%11
Z�BICNE R2,R2,#%10
Z�STRB R2,[mem,#ifr]
Z�.regB_4F
Z�SUB R12,mem,#512 ; sheila
[
[=STRB R0,sound_data            ; keep a copy in sound_data
[
["*LDRB R2,[R12,#&43] ; R2=data direction
[,� R1,R0,R2
[6;MOV R1,R0
[@@�S R0,R1,#%01110000 : MOVNE R0,#0 : STRNEB R0,column_counter
[J;� R1,R1,#&FF
[T;SWI "6502_Getkeyaddr"
[^LDR R0,[mem,#key_addr]
[h!LDRB R2,[R0] ; shift pressed?
[r
CMP R2,#0
[|ADDNE R0,R0,#256
[�
[�� R2,R1,#&F
[�)CMP R2,#&F ; column counter disabled?
[�BEQ disable_column_counter
[�LDRB R2,column_counter
[�CMP R2,#&F
[�BEQ check_row
[�
[�;BIC R1,R1,#&80
[�LDRB R0,[R0,R1]
[�$;� R0,R0,R1,LSR#7 ; ************
[�;� R0,R0,#1
[�;CMP R0,#0 : ;�Q R1,#0
\�R R0,R1,R0,LSL#7
\;MOV R0,R1,LSL#7
\;MOV R0,R1
\&;ADD R0,R1,R1,LSL#7
\0
\:;MOV R0,#&81
\D;MOV R2,#&FF
\N;SWI "OS_Byte"
\X;CMP R0,#98 ; space
\b;CMP R1,#&FF
\l;�Q R0,#&80
\v;MOVNE R0,#0
\�STRB R0,[R12,#&4F]
\�STRB R0,[R12,#&41]
\�MOV PC,R14
\�
\�.column_counter
\�
EQUD 0
\�.key_write_ena
\�
EQUD 0
\�
\�.disable_column_counter
\�STRB R2,column_counter
\�.check_row
\�� R1,R1,#%00001111
]MOV R13,#0
];SWI "6502_Getkeyaddr"
]LDR R0,[mem,#key_addr]
] !LDRB R2,[R0] ; shift pressed?
]*
CMP R2,#0
]4ADDNE R0,R0,#256
]>
]H
.row_loop
]RLDRB R2,[R0,R1]
]\�R R13,R13,R2
]fADD R1,R1,#%10000
]pTST R1,#%1110000
]zBNE row_loop
]��S R12,R13,#%1
]�LDRNEB R13,[mem,#ifr]
]��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
]�
]�.IOpodule_Write
^� R2,R2,#&F
^SWI "6502_WriteSheila"
^MOV PC,R14
^$
^..interrupt_flags
^8LDRB R2,[mem,#ifr]
^BBIC R2,R2,R0
^LSTRB R2,[mem,#ifr]
^VMOV PC,R14
^`
^j
^t.interrupt_enable
^~LDRB R1,[mem,#ier]
^�TST R0,#&80
^�BICEQ R1,R1,R0
^��RNE R1,R1,R0
^��R R1,R1,#&80 ; &81
^�STRB R1,[mem,#ier]
^�;TST time,#%1
^�;SUBNE time,time,#1
^�MOV PC,R14
^�
^�.interrupt_flags2
^�LDRB R2,[mem,#ifr2]
^�BIC R2,R2,R0
_STRB R2,[mem,#ifr2]
_
MOV PC,R14
_
_
_(.interrupt_enable2
_2LDRB R1,[mem,#ier2]
_<TST R0,#&80
_FBICEQ R1,R1,R0
_P�RNE R1,R1,R0
_Z�R R1,R1,#&80 ; &81
_dSTRB R1,[mem,#ier2]
_nMOV PC,R14
_x
_�
.flash
_�;LDRB R1,elite
_�;CMP R1,#0
_�;BNE skip_fe20
_�TST F,#1 << 8 ; patch on?
_�BNE skip_fe20
_�LDRB R12,[mem,#fe20]
_�� R1,R12,#%11100
_�� 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]
`6
`@.skip_fe20
`JLDRB R12,[mem,#fe20]
`TSTRB R0,[mem,#fe20]
`^TST R0,#%1
`h�Q R0,#9
`rMOVNE R0,#10
`|
MOV R1,#0
`�SWI "OS_Byte"
`�-B poke_updatepixelV ; includes MOV PC,R14
`�;MOV PC,R14
`�
`�
;.fe20
`�;EQUD 0
`�
`�;.crt_regs
`�;EQUD 0
`�;EQUD 0
`�;EQUD 0
`�;EQUD 0
`�;EQUD 0
a
a@; include the sound code here contained in the Sound library
a�sound_latch
a&
a0
a:�screen
aD
aN]
aX(� HWScroll � [OPTp:�hardwarescroll:]
ab	[OPTp
al
av
a�.FFpage
a�;SUB time,time,#1
a�MOV PC,R14
a�
a�.update_pal
a�LDRB R1,[mem,#Palette]
a�
CMP R1,#0
a�MOVNE PC,R14
a�.force_update_pal
a�STR R14,[mem,#Palette+4]
a�SUB R13,mem,#-pal_regs
a�LDRB R0,[R13,#0]
a�
BL do_pal
bLDRB R0,[R13,#1]
b
BL do_pal
bLDRB R0,[R13,#2]
b 
BL do_pal
b*LDRB R0,[R13,#3]
b4
BL do_pal
b>LDRB R0,[R13,#4]
bH
BL do_pal
bRLDRB R0,[R13,#5]
b\
BL do_pal
bfLDRB R0,[R13,#6]
bp
BL do_pal
bzLDRB R0,[R13,#7]
b�
BL do_pal
b�LDRB R0,[R13,#8]
b�
BL do_pal
b�LDRB R0,[R13,#9]
b�
BL do_pal
b�LDRB R0,[R13,#10]
b�
BL do_pal
b�LDRB R0,[R13,#11]
b�
BL do_pal
b�LDRB R0,[R13,#12]
b�
BL do_pal
b�LDRB R0,[R13,#13]
b�
BL do_pal
cLDRB R0,[R13,#14]
c
BL do_pal
cLDRB R0,[R13,#15]
c$
BL do_pal
c.)MOV R14,#0:STRB R14,[mem,#pal_tamper]
c8LDR PC,[mem,#Palette+4]
cB
cL
cV.palette
c`SUB R12,mem,#-pal_regs
cjSTRB R0,[R12,R0,LSR#4]
ct
c~LDRB R1,[mem,#Palette]
c�
CMP R1,#0
c�MOVNE PC,R14
c�
c�)MOV R1,#255:STRB R1,[mem,#pal_tamper]
c�MOV PC,R14
c�
c�.do_pal
c�LDRB R1,[mem,#fe20]
c�TST R1,#%10
c�MOVNE PC,R14 ; mode 7
c�� R1,R1,#%11100
c�"CMP R1,#%11100 : BEQ twocolpal
d"CMP R1,#%01000 : BEQ twocolpal
d
#CMP R1,#%11000 : BEQ fourcolpal
d#CMP R1,#%00100 : BEQ fourcolpal
d
d(
d2.sixteencolpal
d<� R1,R0,#&F
dFMOV R0,R0,LSR#4
dP� R1,R1,#7
dZ
dd;CMP R0,#0 ; for Exile
dn;SWINE ETC ETC
dx
d�SWI &100+19
d�SWI "OS_WriteC"
d�
MOV R0,R1
d�SWI "OS_WriteC"
d�SWI &100
d�SWI &100
d�SWI &100
d�MOV PC,R14
d�
d�.twocolpal
d�� R1,R0,#&F
d�MOV R0,R0,LSR#7
d�� R1,R1,#7
e
CMP R0,#1
e�Q R0,#3 ; mode 4 fix
eSWI &100+19
e"SWI "OS_WriteC"
e,
MOV R0,R1
e6SWI "OS_WriteC"
e@SWI &100
eJSWI &100
eTSWI &100
e^MOV PC,R14
eh
er.fourcolpal
e|� R1,R0,#&F
e�� R0,R0,  #%10100000
e�TST R0,     #%10000000
e��RNE R0,R0,#%01000000
e�BICNE R0,R0,#%10000000
e�MOV R0,R0,LSR#5
e�� R1,R1,#7
e�SWI &100+19
e�SWI "OS_WriteC"
e�
MOV R0,R1
e�SWI "OS_WriteC"
e�SWI &100
e�SWI &100
e�SWI &100
fMOV PC,R14
f
f.osbput
f&MOV R0,A,LSR#24
f0MOV R1,Y,LSR#24
f:SWI "XOS_BPut"
fDBVS swi_error
fNB opcode(&60) ; rts
fX
fb.osbget
flMOV R0,A,LSR#24
fvMOV R1,Y,LSR#24
f�SWI "XOS_BGet"
f�BVS swi_error
f�MOV A,R0,LSL#24
f��setupC
f�B opcode(&60) ; rts
f�
f�.swi_error
f�ADD mem,mem,#&100
f�ADD mem,mem,#&002
f�MOV R1,#0 ; BRK
f�STRB R1,[mem,#-2]
f�LDRB R1,[R0] ; error no
f�STRB R1,[mem,#-1]
gADD R0,R0,#4
gMOV R14,#0
g
g .swi_err_loop
g*LDRB R13,[R0,R14]
g4CMP R13,#0
g>;MOV R13,#�"A"
gHSTRB R13,[mem,R14]
gRADD R14,R14,#1
g\�Q R14,#255
gfCMP R14,#253
gpBLE swi_err_loop
gz
g�MOV zpc,#&100 << 16
g�SUB mem,mem,#&100
g�SUB mem,mem,#&002
g��fetch2
g�
g�.return_ROMSEL
g�LDRB R0,[mem,#rom]
g�MOV PC,R14
g�
g�.return_ACCCON
g�LDRB R0,[mem,#ACCCON]
g�MOV PC,R14
g�
h
h
h.strb_rom_ret
h$
h..sheila
h8SUBS R2,R1,#&FE00
hBMOVLT PC,R14
hLSUBS R2,R2,#&100
hVMOVGE PC,R14
h`;BGE FFpage
hj
htTST time,#%1
h~SUBNE time,time,#1
h�SUBEQ time,time,#2
h�
h�;STRB R0,[mem,R1]
h�&SUB R2,mem,#&10000:STRB R0,[R2,R1]
h�
h�� R2,R1,#&FF
h�;ADR R1,sheila_writetab
h�LDR PC,[PC,R2,LSL#2]
h�!EQUD 0 ; padding for pipeline
h�.sheila_writetab
h�	; 0-F
h�EQUD dummy
iEQUD crt
i
EQUD dummy
iEQUD crt
iEQUD dummy
i(EQUD crt
i2EQUD dummy
i<EQUD crt
iFEQUD writeFE08
iPEQUD writeFE09
iZ�equd(6,dummy)
id; 10-17
inEQUD writeFE10
ix�equd(7,dummy)
i�; 18-1F
i�EQUD write_ADC_status
i��equd(7,dummy)
i�; 20-2F
i�EQUD flash
i�EQUD palette
i��equd(14,dummy)
i�; 30-3F
i��equd(4,romsel)
i�EQUD acccon
i��equd(11,romsel)
i�; 40-4F
i�EQUD latch
jEQUD regB_41
jEQUD dummy
jEQUD dummy
j"EQUD writeT1low_latch
j,EQUD writeT1high_count
j6EQUD writeT1low_latch
j@EQUD writeT1high_latch
jJEQUD writeT2low_latch
jTEQUD writeT2high_count
j^EQUD dummy
jhEQUD dummy
jrEQUD dummy
j|EQUD interrupt_flags
j�EQUD interrupt_enable
j�EQUD regB_4F
j�; 50-5F
j�EQUD latch
j�EQUD regB_41
j�EQUD dummy
j�EQUD dummy
j�EQUD writeT1low_latch
j�EQUD writeT1high_count
j�EQUD writeT1low_latch
j�EQUD writeT1high_latch
j�EQUD writeT2low_latch
j�EQUD writeT2high_count
kEQUD dummy
kEQUD dummy
kEQUD dummy
k&EQUD interrupt_flags
k0EQUD interrupt_enable
k:EQUD regB_4F
kD; 60-7F
kN]
kX� IO_Podule% �
kb	[OPTp
kl�equd(&20,IOpodule_Write)
kv]
k��
k�	[OPTp
k�EQUD dummy
k�EQUD printer_write
k�EQUD dummy
k�EQUD dummy
k�EQUD writeT3low_latch
k�EQUD writeT3high_count
k�EQUD writeT3low_latch
k�EQUD writeT3high_latch
k�EQUD writeT4low_latch
k�EQUD writeT4high_count
k�EQUD dummy
lEQUD writeACR2
lEQUD dummy
lEQUD interrupt_flags2
l EQUD interrupt_enable2
l*EQUD printer_write
l4
l>EQUD dummy
lHEQUD printer_write
lREQUD dummy
l\EQUD dummy
lfEQUD writeT3low_latch
lpEQUD writeT3high_count
lzEQUD writeT3low_latch
l�EQUD writeT3high_latch
l�EQUD writeT4low_latch
l�EQUD writeT4high_count
l�EQUD dummy
l�EQUD dummy
l�EQUD dummy
l�EQUD interrupt_flags2
l�EQUD interrupt_enable2
l�EQUD printer_write
l�]
l��
l�
l�	[OPTp
m; 80-BF
m�equd(&40,dummy)
m; C0-CF
m$EQUD write_ADC_status
m.�equd(15,dummy)
m8; D0-FF
mB�equd(&30,dummy)
mL
mV.ldrb_FFpage
m`;SUB time,time,#1
mjMOV PC,R14
mt
m~!.ldrb8000 ; greater than 8000
m�
m�CMP R1,#&FE00
m�BHS ldrb_sheila
m�
m�;LDRB R0,[mem,R1]
m�MOV R0,#pagetable
m�LDRB R0,[R0,R1,LSR#12]
m�LDRB R0,[R1,R0,LSL#12]
m�MOV PC,R14
m�
m�
m�;MOV R1,R1,LSR#16
n]
n
� master �
n	[OPTp
n$.ldrb16_8000 ; greater than 8000
n(
n2CMP R1,#&FE00 << 16
n<BHS ldrb16_sheila
nF
nP;LDRB R0,[mem,R1,LSR#16]
nZMOV R0,#pagetable
ndLDRB R0,[R0,R1,LSR#28]
nnMOV R0,R0,LSL#12
nxLDRB R0,[R0,R1,LSR#16]
n�
n�MOV PC,R14
n�
n�.ldrb16_screen
n�CMP R1,#&8000 << 16
n�BHS ldrb16_8000
n�
n�LDRB R12,[mem,#ACCCON]
n�
n�CMP zpc,#&C000 << 16
n�MOVLT R13,R12,LSR#1
n�MOVGE R13,R12
n�CMP zpc,#&E000 << 16
o5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
o,                       ; we must look at
o
o";CMP zpc,#&C000 << 16
o,;MOVLT R13,#0
o6;�GE R13,R12,R12,LSR#1
o@;CMP zpc,#&E000 << 16
oJ,;MOVGE R13,#0 ; now look at bit 1 of R13
oT
o^;TST R13,#%10
oh9;SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
or;LDRNEB R0,[R13,R1,LSR#16]
o|;LDREQB R0,[mem,R1,LSR#16]
o�;MOV PC,R14
o�
o�MOV R2,#pagetable
o�LDRB R2,[R2,R1,LSR#28]
o�TST R13,#%10
o�MOVNE R2,#&8D
o�MOV R2,R2,LSL#12
o�LDRB R0,[R2,R1,LSR#16]
o�MOV PC,R14
o�]
o��
o�	[OPTp
o�.ldrb16_screen
pCMP R1,#&FE00 << 16
pBHS ldrb16_sheila
p
p&LDRB R0,[mem,R1,LSR#16]
p0MOV PC,R14
p:]
pD�
pN
pX� master �
pb	[OPTp
pl
pv.ldrb_screen
p�!.ldrb3000 ; greater than 3000
p�
p�CMP R1,#&8000
p�BHS ldrb8000
p�
p�LDRB R12,[mem,#ACCCON]
p�
p�CMP zpc,#&C000 << 16
p�MOVLT R13,R12,LSR#1
p�MOVGE R13,R12
p�CMP zpc,#&E000 << 16
p�5MOVGE R13,R12,LSR#1    ; now bit 1 of R13 is what
p�,                       ; we must look at
q
q;CMP zpc,#&C000 << 16
q;MOVLT R13,#0
q ;�GE R13,R12,R12,LSR#1
q*;CMP zpc,#&E000 << 16
q4,;MOVGE R13,#0 ; now look at bit 1 of R13
q>
qH;TST R13,#%10
qR9;SUBNE R13,mem,#(&3000+&10000) ; shadow screen memory
q\;LDRNEB R0,[R13,R1]
qf;LDREQB R0,[mem,R1]
qp;MOV PC,R14
qz
q�MOV R2,#pagetable
q�LDRB R2,[R2,R1,LSR#12]
q�TST R13,#%10
q�MOVNE R2,#&8D
q�LDRB R0,[R1,R2,LSL#12]
q�MOV PC,R14
q�]
q��
q�	[OPTp
q�.ldrb_screen
q�!.ldrb3000 ; greater than 3000
q�CMP R1,#&FE00
q�BHS ldrb_sheila
rLDRB R0,[mem,R1]
rMOV PC,R14
r]
r$�
r.
r8	[OPTp
rB
rL.ldrb16_sheila
rVMOV R12,R1,LSR#16
r`B ldrb_sheila2
rj
rt.ldrb_sheila
r~MOV R12,R1
r�
r�.ldrb_sheila2
r�;LDRB R0,[mem,R12]
r�MOV R0,#pagetable
r�LDRB R0,[R0,R12,LSR#12]
r�LDRB R0,[R12,R0,LSL#12]
r�
r�SUBS R2,R12,#&FE00
r�MOVLT PC,R14
r�SUBS R2,R2,#&100
r�BGE ldrb_FFpage
r�
s'SUB R2,mem,#&10000:LDRB R0,[R2,R12]
s

sSUB time,time,#1
s
s(� R2,R12,#&FF
s2;ADR R1,sheila_readtab
s<LDR PC,[PC,R2,LSL#2]
sF!EQUD 0 ; padding for pipeline
sP.sheila_readtab
sZ	; 0-F
sd�equd(8,dummy)
snEQUD readFE08
sxEQUD readFE09
s��equd(6,dummy)
s�; 10-2F
s�EQUD readFE10
s��equd(&1F,dummy)
s�; 30-3F
s��equd(4,return_ROMSEL)
s��equd(4,return_ACCCON)
s��equd(8,dummy)
s�; 40-4F
s�EQUD ldrb40
s�EQUD ldrb41
s�EQUD dummy
s�EQUD dummy
tEQUD readT1low_count
tEQUD readT1high_count
tEQUD readT1low_latch
t"EQUD readT1high_latch
t,EQUD readT2low_count
t6EQUD readT2high_count
t@EQUD dummy
tJEQUD dummy
tTEQUD dummy
t^EQUD read_ifr
thEQUD read_ier
trEQUD ldrb4F
t|; 50-5F
t�EQUD ldrb40
t�EQUD ldrb41
t�EQUD dummy
t�EQUD dummy
t�EQUD readT1low_count
t�EQUD readT1high_count
t�EQUD readT1low_latch
t�EQUD readT1high_latch
t�EQUD readT2low_count
t�EQUD readT2high_count
t�EQUD dummy
t�EQUD dummy
t�EQUD dummy
uEQUD read_ifr
uEQUD read_ier
uEQUD ldrb4F
u&; 60-6F
u0]
u:� IO_Podule% �
uD	[OPTp
uN�equd(&20,IOpodule_Read)
uX]
ub�
ul	[OPTp
uvEQUD dummy
u�EQUD dummy
u�EQUD dummy
u�EQUD dummy
u�EQUD readT3low_count
u�EQUD readT3high_count
u�EQUD readT3low_latch
u�EQUD readT3high_latch
u�EQUD readT4low_count
u�EQUD readT4high_count
u�EQUD dummy
u�EQUD dummy
u�EQUD dummy
u�EQUD read_ifr2
vEQUD read_ier2
vEQUD dummy
v
v EQUD dummy
v*EQUD dummy
v4EQUD dummy
v>EQUD dummy
vHEQUD readT3low_count
vREQUD readT3high_count
v\EQUD readT3low_latch
vfEQUD readT3high_latch
vpEQUD readT4low_count
vzEQUD readT4high_count
v�EQUD dummy
v�EQUD dummy
v�EQUD dummy
v�EQUD read_ifr2
v�EQUD read_ier2
v�EQUD dummy
v�]
v��
v�
v�	[OPTp
v�; 80-FF
v��equd(&80,dummy)
v�
w�sound_misc
w
w.opcode7
w$SWI &100+�"O"
w.SWI &100+�"p"
w8SWI &100+�"7"
wBSWI &100+�" "
wL�print(zpc)
wV
B opcode7
w`
wj%�align16 ; fit into cache better?
wt
w~�opcodes
w�
w�.patch_screen
w�MOV PC,R14
w�.patch_pixel
w�MOV PC,R14
w�
w�.end
w�]
w��
w�8�"Load <6502Em$Dir>.SRC.revtable "+�~(code+mode0tab)
w�8�"Load <6502Em$Dir>.SRC.mode1tab "+�~(code+mode1tab)
w�9�"Load <6502Em$Dir>.SRC.Hmode2tab "+�~(code+mode2tab)
x9�"Load <6502Em$Dir>.SRC.Hmode4tab "+�~(code+mode4tab)
x
9�"Load <6502Em$Dir>.SRC.Hmode5tab "+�~(code+mode5tab)
x
x�
x(
x2DE
x<�F
xF
xP
xZݤldrb2(R,S)
xd� R<>0 � S<>1 � �
xn� master �
xx	[OPTp
x�CMP S,#&3000
x�;LDRLOB R,[mem,S]
x�MOVLO R,#pagetable
x�LDRLOB R,[R,S,LSR#12]
x�LDRLOB R,[S,R,LSL#12]
x�BLHS ldrb_screen
x�]
x��
x�	[OPTp
x�LDRB R,[mem,S]
x�CMP S,#&FE00
x�BLHS ldrb_sheila
x�]
y�
y=""
y
y"ݤldrb16(R,S)
y,� R<>0 � S<>1 � �
y6� master �
y@	[OPTp
yJCMP S,#&3000 << 16
yT;LDRLOB R,[mem,S,LSR#16]
y^MOVLO R,#pagetable
yhLDRLOB R,[R,S,LSR#28]
yrMOVLO R,R,LSL#12
y|LDRLOB R,[R,S,LSR#16]
y�BLHS ldrb16_screen
y�]
y��
y�	[OPTp
y�LDRB R,[mem,S,LSR#16]
y�CMP S,#&FE00 << 16
y�BLHS ldrb16_sheila
y�]
y��
y�=""
y�
y�ݤstrb(R,S)
y�� R<>0 � S<>1 � �
z	[OPTp
zCMP S,F,LSR#16 ; wrap_addr
z;STRLTB R,[mem,S]
z&MOVLT R2,#pagetable
z0LDRLTB R2,[R2,S,LSR#12]
z:STRLTB R,[S,R2,LSL#12]
zD
BLGE strb
zN]
zX=""
zb
zlݤstrb16(R,S)
zv� R<>0 � S<>1 � �
z�	[OPTp
z�MOV S,S,LSR#16
z��strb(R,S)
z�]
z�=""
z�
z�ݤshowregs
z�	[OPTp
z��print(zpc)
z�
�print(A)
z�
�print(X)
z�
�print(Y)
z��print(SP)
{
�print(F)
{ADD R12,mem,#&DF00
{LDRB R12,[R12,#&DA]
{ MOV R12,R12,LSL#24
{*�print2(12)
{4SWI &10A
{>;SWI "OS_NewLine"
{H]
{R=""
{\
{fݤprint(R)
{p
Ȏ R �
{z� zpc : A$=�print4(R)
{�.� F   : [OPTp:MOV R2,F,LSL#24:�print2(2):]
{�
{�A$=�print2(R)
{��
{�=""
{�
{�� A   : A$=�print2(R)
{�� X   : A$=�print2(R)
{�� Y   : A$=�print2(R)
{�-� SP  : [OPTp:SWI &100+�"1":�print2(SP):]
{�� F   : A$=�printflags
{��
{�=""
|
|ݤprintflags
|	[OPTp
|$4TST F,#%1<<7 : SWIEQ &100+�"n" : SWINE &100+�"N"
|.4TST F,#%1<<6 : SWIEQ &100+�"v" : SWINE &100+�"V"
|84TST F,#%1<<5 : SWIEQ &100+�"0" : SWINE &100+�"1"
|B4TST F,#%1<<4 : SWIEQ &100+�"b" : SWINE &100+�"B"
|L4TST F,#%1<<3 : SWIEQ &100+�"d" : SWINE &100+�"D"
|V4TST F,#%1<<2 : SWIEQ &100+�"i" : SWINE &100+�"I"
|`4TST F,#%1<<1 : SWIEQ &100+�"z" : SWINE &100+�"Z"
|j4TST F,#%1<<0 : SWIEQ &100+�"c" : SWINE &100+�"C"
|tSWI &120
|~]
|�=""
|�
|�ݤprint2(R)
|��I%
|�	[OPTp
|�MOV R1,R
|�]
|�
�I%=0 � 1
|�
[OPT p
|�MOV R1,R1,ROR#28
|�� R0,R1,#&F
|�CMP R0,#10
}ADDGE R0,R0,#7
}
ADD R0,R0,#48
}SWI "OS_WriteC"
}]
}(�
}2	[OPTp
}<SWI &120
}F]
}P=""
}Z
}dݤprint4(R)
}n�I%
}x	[OPTp
}�MOV R1,R
}�]
}�
�I%=0 � 3
}�
[OPT p
}�MOV R1,R1,ROR#28
}�� R0,R1,#&F
}�CMP R0,#10
}�ADDGE R0,R0,#7
}�ADD R0,R0,#48
}�SWI "OS_WriteC"
}�]
}��
}�	[OPTp
~SWI &120
~]
~=""
~"
~,ݤprint32(R)
~6�I%
~@	[OPTp
~JMOV R1,R
~T]
~^�I%=0 � 31
~h
[OPT p
~rMOV R1,R1,ROR#28
~|� R0,R1,#&F
~�CMP R0,#10
~�ADDGE R0,R0,#7
~�ADD R0,R0,#48
~�SWI "OS_WriteC"
~�]
~��
~�	[OPTp
~�SWI &120
~�]
~�=""
~�
~�ݤprints(A$)
~�	[OPTp
SWI "OS_WriteS"
EQUS A$
EQUB 10
&EQUB 13
0
EQUB 0
:	ALIGN
D]
N=""
X
bݤundoc(A%)
l� opcode%<>A% � �
v	[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+�" "
�
� ;MOV R0,#15 : ;SWI "OS_Byte"
�
;SWI 4
�]
�=""
�
�ݤequd(A%,B%)
� �I%
�*�I%=1 � A%
�4	[OPTp
�>EQUD B%
�H]
�R�
�\=""
�f
�pݤdo_interrupt
�z	[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]
��MOV zpc,zpc,LSL#16
��]
��=""
��
�ݤdivmod(A,B,C,D,E)
�div%+=1
�	[OPTp
�$MOV C,#1
�.MOV D,#0
�8MOV E,B
�B.divloop1(div%)
�LMOV B,B,LSL#1
�VMOV C,C,LSL#1
�`CMP B,A
�jBLO divloop1(div%)
�t
�~.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
��CMP B,E
��BHI divloop2(div%)
��]
�=""
�

�ݤshadow
�� master �
�(	[OPTp
�2LDRB R2,[mem,#ACCCON]
�<;� R2,R2,R2,LSR#2
�FTST R2,#%1
�PSUBNE R13,mem,#&13000
�Z�Q R13,mem
�d]
�n�
�x	[OPTp
��MOV R13,mem
��]
���
��=""
����clearmem(S%,E%)
��
P%=buffer
��	[OPT2
��EQUD S% ; memory
��EQUD E% ; memory+&8000
��
.clear
��
MOV R0,#0
��LDR R1,buffer
��LDR R2,buffer+4
�	.loop
�STR R0,[R1],#4
�
CMP R1,R2
�"BNE loop
�,MOV PC,R14
�6]
�@� clear
�J�
�T
�^ݤfetch2
�h	[OPTp
�r;LDRB R2,[mem,zpc,LSR#16]
�|;ADD PC,table,R2,LSL#8
��MOV R2,#pagetable
��LDRB R2,[R2,zpc,LSR#28]
��MOV R2,R2,LSL#12
��LDRB R2,[R2,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]
�;ADDPL PC,table,R2,LSL#8
�&MOVPL R2,#pagetable
�0LDRPLB R2,[R2,zpc,LSR#28]
�:MOVPL R2,R2,LSL#12
�DLDRPLB R2,[R2,zpc,LSR#16]
�NADDPL PC,table,R2,LSL#8
�XB fetch2
�b]
�l=""
�v
��ݤfetch(N%,T%)
��Q$=�fetch3(N%,T%)
��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%
���
�=""
�ݤbcd(A%) :
�$� P%>opcode(0)+(A%+256)*4*64 � �
� 1P%=opcode(0)+(A%+256)*4*64 : O%=code+P% : =""
�*
�4
ݤalign16
�>ȕ (P% � 15)<>0
�HP%+=1 : O%+=1
�R�
�\=""
�f� �error
�p�:� " at line ";�
�z�
��
��ݤ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 12 f4 20 56 32  2e 20 28 6d 61 73 74 65  |..Z.. V2. (maste|
000000d0  72 29 0d 00 64 04 0d 00  6e 14 70 61 67 65 74 61  |r)..d...n.pageta|
000000e0  62 6c 65 3d 26 39 37 30  30 30 0d 00 78 04 0d 00  |ble=&97000..x...|
000000f0  82 10 49 4f 5f 50 6f 64  75 6c 65 25 3d a3 0d 00  |..IO_Podule%=...|
00000100  8c 04 0d 00 96 39 de 20  6f 70 63 6f 64 65 28 26  |.....9. opcode(&|
00000110  31 30 30 29 2c 20 62 63  64 28 26 31 30 30 29 2c  |100), bcd(&100),|
00000120  20 63 6f 64 65 20 35 30  30 2a 31 30 32 34 2c 20  | code 500*1024, |
00000130  62 75 66 66 65 72 20 31  30 30 30 0d 00 a0 0d de  |buffer 1000.....|
00000140  20 6c 25 28 31 30 30 29  0d 00 aa 2b de 20 64 69  | l%(100)...+. di|
00000150  76 6c 6f 6f 70 31 28 31  30 29 2c 64 69 76 6c 6f  |vloop1(10),divlo|
00000160  6f 70 32 28 31 30 29 2c  64 69 76 6a 75 6d 70 28  |op2(10),divjump(|
00000170  31 30 29 0d 00 b4 0a 64  69 76 25 3d 30 0d 00 be  |10)....div%=0...|
00000180  20 c8 9b 20 22 3c 36 35  30 32 45 6d 24 44 69 72  | .. "<6502Em$Dir|
00000190  3e 2e 53 72 63 2e 53 6f  75 6e 64 36 22 0d 00 c8  |>.Src.Sound6"...|
000001a0  24 c8 9b 20 22 3c 36 35  30 32 45 6d 24 44 69 72  |$.. "<6502Em$Dir|
000001b0  3e 2e 53 72 63 2e 4f 70  63 6f 64 65 73 4e 65 77  |>.Src.OpcodesNew|
000001c0  22 0d 00 d2 23 c8 9b 20  22 3c 36 35 30 32 45 6d  |"...#.. "<6502Em|
000001d0  24 44 69 72 3e 2e 53 72  63 2e 53 63 72 65 65 6e  |$Dir>.Src.Screen|
000001e0  4e 65 77 22 0d 00 dc 22  c8 9b 20 22 3c 36 35 30  |New"...".. "<650|
000001f0  32 45 6d 24 44 69 72 3e  2e 53 72 63 2e 48 57 53  |2Em$Dir>.Src.HWS|
00000200  63 72 6f 6c 6c 22 0d 00  e6 04 0d 00 f0 0f 65 6c  |croll"........el|
00000210  65 63 74 72 6f 6e 25 3d  a3 0d 00 fa 0c 6d 61 73  |ectron%=.....mas|
00000220  74 65 72 3d a3 0d 01 04  11 f4 50 52 4f 43 61 73  |ter=......PROCas|
00000230  73 65 6d 62 6c 65 0d 01  0e 04 0d 01 18 1a f4 50  |semble.........P|
00000240  52 49 4e 54 28 65 6e 64  2d 73 74 61 72 74 29 2f  |RINT(end-start)/|
00000250  31 30 32 34 0d 01 22 42  f4 4f 53 43 4c 49 20 22  |1024.."B.OSCLI "|
00000260  53 61 76 65 20 3c 36 35  30 32 45 6d 24 44 69 72  |Save <6502Em$Dir|
00000270  3e 2e 43 6f 64 65 20 22  2b 53 54 52 24 7e 63 6f  |>.Code "+STR$~co|
00000280  64 65 2b 22 20 22 2b 53  54 52 24 7e 28 65 6e 64  |de+" "+STR$~(end|
00000290  2b 63 6f 64 65 29 0d 01  2c 2b f4 4f 53 43 4c 49  |+code)..,+.OSCLI|
000002a0  20 22 53 65 74 54 79 70  65 20 3c 36 35 30 32 45  | "SetType <6502E|
000002b0  6d 24 44 69 72 3e 2e 43  6f 64 65 20 44 61 74 61  |m$Dir>.Code Data|
000002c0  22 0d 01 36 04 0d 01 40  0c 6d 61 73 74 65 72 3d  |"..6...@.master=|
000002d0  b9 0d 01 4a 0d f2 61 73  73 65 6d 62 6c 65 0d 01  |...J..assemble..|
000002e0  54 15 f1 28 65 6e 64 2d  73 74 61 72 74 29 2f 31  |T..(end-start)/1|
000002f0  30 32 34 0d 01 5e 38 ff  20 22 53 61 76 65 20 3c  |024..^8. "Save <|
00000300  36 35 30 32 45 6d 24 44  69 72 3e 2e 43 6f 64 65  |6502Em$Dir>.Code|
00000310  4d 20 22 2b c3 7e 63 6f  64 65 2b 22 20 22 2b c3  |M "+.~code+" "+.|
00000320  7e 28 65 6e 64 2b 63 6f  64 65 29 0d 01 68 27 ff  |~(end+code)..h'.|
00000330  20 22 53 65 74 54 79 70  65 20 3c 36 35 30 32 45  | "SetType <6502E|
00000340  6d 24 44 69 72 3e 2e 43  6f 64 65 4d 20 44 61 74  |m$Dir>.CodeM Dat|
00000350  61 22 0d 01 72 04 0d 01  7c 05 e0 0d 01 86 04 0d  |a"..r...|.......|
00000360  01 90 30 ff 22 4c 4f 41  44 20 3c 36 35 30 32 45  |..0."LOAD <6502E|
00000370  6d 24 44 69 72 3e 2e 4f  53 31 2c 32 20 22 2b c3  |m$Dir>.OS1,2 "+.|
00000380  7e 28 6d 65 6d 6f 72 79  2b 26 43 30 30 30 29 0d  |~(memory+&C000).|
00000390  01 9a 32 ff 22 4c 4f 41  44 20 3c 36 35 30 32 45  |..2."LOAD <6502E|
000003a0  6d 24 44 69 72 3e 2e 42  41 53 49 43 49 49 20 22  |m$Dir>.BASICII "|
000003b0  2b c3 7e 28 6d 65 6d 6f  72 79 2b 26 38 30 30 30  |+.~(memory+&8000|
000003c0  29 0d 01 a4 04 0d 01 ae  08 eb 20 31 32 0d 01 b8  |)......... 12...|
000003d0  0f d6 20 69 6e 69 74 2b  63 6f 64 65 0d 01 c2 0a  |.. init+code....|
000003e0  f1 22 42 4f 4f 22 0d 01  cc 04 0d 01 d6 19 21 70  |."BOO"........!p|
000003f0  63 5f 73 74 6f 72 65 3d  26 44 39 43 44 20 3c 3c  |c_store=&D9CD <<|
00000400  20 31 36 0d 01 e0 04 0d  01 ea 14 44 25 3d 6d 65  | 16........D%=me|
00000410  6d 6f 72 79 20 3a 20 f4  20 52 33 0d 01 f4 10 d6  |mory : . R3.....|
00000420  20 73 74 61 72 74 2b 63  6f 64 65 0d 01 fe 04 0d  | start+code.....|
00000430  02 08 05 e0 0d 02 12 0e  dd f2 61 73 73 65 6d 62  |..........assemb|
00000440  6c 65 0d 02 1c 21 f2 63  6c 65 61 72 6d 65 6d 28  |le...!.clearmem(|
00000450  63 6f 64 65 2c 63 6f 64  65 2b 32 30 30 2a 31 30  |code,code+200*10|
00000460  32 34 29 0d 02 26 1c 52  3d 31 30 30 30 20 3a 20  |24)..&.R=1000 : |
00000470  53 3d 31 30 30 30 20 3a  20 54 3d 31 30 30 30 0d  |S=1000 : T=1000.|
00000480  02 30 04 0d 02 3a 07 41  3d 34 0d 02 44 07 58 3d  |.0...:.A=4..D.X=|
00000490  35 0d 02 4e 07 59 3d 36  0d 02 58 07 46 3d 37 0d  |5..N.Y=6..X.F=7.|
000004a0  02 62 08 53 50 3d 38 0d  02 6c 09 6d 65 6d 3d 33  |.b.SP=8..l.mem=3|
000004b0  0d 02 76 0a 74 69 6d 65  3d 39 0d 02 80 0a 7a 70  |..v.time=9....zp|
000004c0  63 3d 31 30 0d 02 8a 0c  74 61 62 6c 65 3d 31 31  |c=10....table=11|
000004d0  0d 02 94 04 0d 02 9e 0d  61 3d 2d 26 31 30 30 2b  |........a=-&100+|
000004e0  30 0d 02 a8 0d 78 3d 2d  26 31 30 30 2b 34 0d 02  |0....x=-&100+4..|
000004f0  b2 0d 79 3d 2d 26 31 30  30 2b 38 0d 02 bc 0e 66  |..y=-&100+8....f|
00000500  3d 2d 26 31 30 30 2b 31  32 0d 02 c6 0f 73 70 3d  |=-&100+12....sp=|
00000510  2d 26 31 30 30 2b 31 36  0d 02 d0 15 70 63 5f 73  |-&100+16....pc_s|
00000520  74 6f 72 65 3d 2d 26 31  30 30 2b 32 30 0d 02 da  |tore=-&100+20...|
00000530  13 54 31 6d 6f 64 65 3d  2d 26 31 30 30 2b 32 34  |.T1mode=-&100+24|
00000540  0d 02 e4 13 54 32 6d 6f  64 65 3d 2d 26 31 30 30  |....T2mode=-&100|
00000550  2b 32 35 0d 02 ee 13 54  33 6d 6f 64 65 3d 2d 26  |+25....T3mode=-&|
00000560  31 30 30 2b 32 36 0d 02  f8 13 54 34 6d 6f 64 65  |100+26....T4mode|
00000570  3d 2d 26 31 30 30 2b 32  37 0d 03 02 0f 54 31 3d  |=-&100+27....T1=|
00000580  2d 26 31 30 30 2b 32 38  0d 03 0c 10 54 31 52 3d  |-&100+28....T1R=|
00000590  2d 26 31 30 30 2b 33 32  0d 03 16 0f 54 32 3d 2d  |-&100+32....T2=-|
000005a0  26 31 30 30 2b 33 36 0d  03 20 10 54 32 52 3d 2d  |&100+36.. .T2R=-|
000005b0  26 31 30 30 2b 34 30 0d  03 2a 0f 54 33 3d 2d 26  |&100+40..*.T3=-&|
000005c0  31 30 30 2b 34 34 0d 03  34 10 54 33 52 3d 2d 26  |100+44..4.T3R=-&|
000005d0  31 30 30 2b 34 38 0d 03  3e 0f 54 34 3d 2d 26 31  |100+48..>.T4=-&1|
000005e0  30 30 2b 35 32 0d 03 48  10 54 34 52 3d 2d 26 31  |00+52..H.T4R=-&1|
000005f0  30 30 2b 35 36 0d 03 52  13 73 63 72 65 65 6e 3d  |00+56..R.screen=|
00000600  2d 26 31 30 30 2b 36 30  0d 03 5c 14 73 63 72 65  |-&100+60..\.scre|
00000610  65 6e 52 3d 2d 26 31 30  30 2b 36 34 0d 03 66 10  |enR=-&100+64..f.|
00000620  6d 69 6e 3d 2d 26 31 30  30 2b 36 38 0d 03 70 18  |min=-&100+68..p.|
00000630  73 6f 75 6e 64 5f 74 69  6d 65 72 3d 2d 26 31 30  |sound_timer=-&10|
00000640  30 2b 37 32 0d 03 7a 10  69 66 72 3d 2d 26 31 30  |0+72..z.ifr=-&10|
00000650  30 2b 37 36 0d 03 84 10  69 65 72 3d 2d 26 31 30  |0+76....ier=-&10|
00000660  30 2b 37 37 0d 03 8e 11  69 66 72 32 3d 2d 26 31  |0+77....ifr2=-&1|
00000670  30 30 2b 37 38 0d 03 98  11 69 65 72 32 3d 2d 26  |00+78....ier2=-&|
00000680  31 30 30 2b 37 39 0d 03  a2 1c 61 72 63 5f 73 63  |100+79....arc_sc|
00000690  72 65 65 6e 73 74 61 72  74 3d 2d 26 31 30 30 2b  |reenstart=-&100+|
000006a0  38 30 0d 03 ac 13 74 61  6d 70 65 72 3d 2d 26 31  |80....tamper=-&1|
000006b0  30 30 2b 38 34 0d 03 b6  1a 63 75 72 73 6f 72 5f  |00+84....cursor_|
000006c0  74 61 6d 70 65 72 3d 2d  26 31 30 30 2b 38 38 0d  |tamper=-&100+88.|
000006d0  03 c0 16 52 4f 4d 53 45  4c 5f 4f 4e 3d 2d 26 31  |...ROMSEL_ON=-&1|
000006e0  30 30 2b 39 32 0d 03 ca  10 72 6f 6d 3d 2d 26 31  |00+92....rom=-&1|
000006f0  30 30 2b 39 36 0d 03 d4  14 52 4f 4d 52 41 4d 3d  |00+96....ROMRAM=|
00000700  2d 26 31 30 30 2b 31 30  30 0d 03 de 12 66 65 32  |-&100+100....fe2|
00000710  30 3d 2d 26 31 30 30 2b  31 31 36 0d 03 e8 19 74  |0=-&100+116....t|
00000720  61 70 65 5f 68 61 6e 64  6c 65 3d 2d 26 31 30 30  |ape_handle=-&100|
00000730  2b 31 31 37 0d 03 f2 16  63 72 74 5f 72 65 67 73  |+117....crt_regs|
00000740  3d 2d 26 31 30 30 2b 31  32 30 0d 03 fc 15 73 63  |=-&100+120....sc|
00000750  72 61 74 63 68 3d 2d 26  31 30 30 2b 31 34 30 0d  |ratch=-&100+140.|
00000760  04 06 16 70 61 6c 5f 72  65 67 73 3d 2d 26 31 30  |...pal_regs=-&10|
00000770  30 2b 31 34 38 0d 04 10  15 50 61 6c 65 74 74 65  |0+148....Palette|
00000780  3d 2d 26 31 30 30 2b 31  36 34 0d 04 1a 14 41 43  |=-&100+164....AC|
00000790  43 43 4f 4e 3d 2d 26 31  30 30 2b 31 37 32 0d 04  |CCON=-&100+172..|
000007a0  24 16 70 61 74 63 68 5f  6f 6e 3d 2d 26 31 30 30  |$.patch_on=-&100|
000007b0  2b 31 37 36 0d 04 2e 18  70 61 6c 5f 74 61 6d 70  |+176....pal_tamp|
000007c0  65 72 3d 2d 26 31 30 30  2b 31 37 37 0d 04 38 16  |er=-&100+177..8.|
000007d0  6c 61 73 74 6d 6f 64 65  3d 2d 26 31 30 30 2b 31  |lastmode=-&100+1|
000007e0  37 38 0d 04 42 12 66 65  31 30 3d 2d 26 31 30 30  |78..B.fe10=-&100|
000007f0  2b 31 37 39 0d 04 4c 18  74 61 70 65 5f 63 6f 75  |+179..L.tape_cou|
00000800  6e 74 3d 2d 26 31 30 30  2b 31 38 30 0d 04 56 16  |nt=-&100+180..V.|
00000810  6b 65 79 5f 61 64 64 72  3d 2d 26 31 30 30 2b 31  |key_addr=-&100+1|
00000820  38 34 0d 04 60 20 73 63  72 65 65 6e 73 74 61 72  |84..` screenstar|
00000830  74 5f 74 61 6d 70 65 72  3d 2d 26 31 30 30 2b 31  |t_tamper=-&100+1|
00000840  38 38 0d 04 6a 22 73 63  72 65 65 6e 73 74 61 72  |88..j"screenstar|
00000850  74 5f 70 72 65 76 69 6f  75 73 3d 2d 26 31 30 30  |t_previous=-&100|
00000860  2b 31 39 32 0d 04 74 14  73 70 65 65 64 52 3d 2d  |+192..t.speedR=-|
00000870  26 31 30 30 2b 31 39 36  0d 04 7e 04 0d 04 88 28  |&100+196..~....(|
00000880  65 6e 44 3d 2d 26 31 30  30 2b 32 30 30 20 3a 20  |enD=-&100+200 : |
00000890  f4 20 64 6f 6e 27 74 20  67 6f 20 70 61 73 74 20  |. don't go past |
000008a0  74 68 69 73 0d 04 92 04  0d 04 9c 10 e3 70 3d 34  |this.........p=4|
000008b0  20 b8 20 36 20 88 20 32  0d 04 a6 0a 64 69 76 25  | . 6 . 2....div%|
000008c0  3d 30 0d 04 b0 0b 4f 25  3d 63 6f 64 65 0d 04 ba  |=0....O%=code...|
000008d0  08 6c 25 3d 30 0d 04 c4  08 50 25 3d 30 0d 04 ce  |.l%=0....P%=0...|
000008e0  0d 6f 70 63 6f 64 65 25  3d 30 0d 04 d8 09 5b 4f  |.opcode%=0....[O|
000008f0  50 54 70 0d 04 e2 29 2e  4f 61 20 20 20 20 20 20  |PTp...).Oa      |
00000900  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000910  20 20 20 20 20 20 45 51  55 44 20 30 0d 04 ec 29  |      EQUD 0...)|
00000920  2e 4f 78 20 20 20 20 20  20 20 20 20 20 20 20 20  |.Ox             |
00000930  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000940  51 55 44 20 30 0d 04 f6  29 2e 4f 79 20 20 20 20  |QUD 0...).Oy    |
00000950  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000960  20 20 20 20 20 20 20 20  45 51 55 44 20 30 0d 05  |        EQUD 0..|
00000970  00 29 2e 4f 66 20 20 20  20 20 20 20 20 20 20 20  |.).Of           |
00000980  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000990  20 45 51 55 44 20 30 0d  05 0a 29 2e 4f 73 70 20  | EQUD 0...).Osp |
000009a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000009b0  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 30  |          EQUD 0|
000009c0  0d 05 14 29 2e 4f 70 63  5f 73 74 6f 72 65 20 20  |...).Opc_store  |
000009d0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000009e0  20 20 20 45 51 55 44 20  30 0d 05 1e 2c 2e 73 74  |   EQUD 0...,.st|
000009f0  61 72 74 5f 6f 66 66 73  65 74 20 20 20 20 20 20  |art_offset      |
00000a00  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000a10  73 74 61 72 74 0d 05 28  28 2e 74 72 61 63 65 20  |start..((.trace |
00000a20  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000a30  20 20 20 20 20 20 20 45  51 55 44 20 30 0d 05 32  |       EQUD 0..2|
00000a40  28 2e 74 72 61 63 65 32  20 20 20 20 20 20 20 20  |(.trace2        |
00000a50  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 45  |               E|
00000a60  51 55 44 20 30 0d 05 3c  2b 2e 69 6e 69 74 5f 61  |QUD 0..<+.init_a|
00000a70  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000a80  20 20 20 20 20 20 20 45  51 55 44 20 69 6e 69 74  |       EQUD init|
00000a90  0d 05 46 37 2e 63 72 74  5f 61 64 64 72 20 20 20  |..F7.crt_addr   |
00000aa0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000ab0  20 20 45 51 55 44 20 30  20 3b 20 77 61 73 20 63  |  EQUD 0 ; was c|
00000ac0  72 74 5f 72 65 67 73 0d  05 50 31 2e 54 31 5f 61  |rt_regs..P1.T1_a|
00000ad0  64 64 72 20 20 20 20 20  20 20 20 20 20 20 20 20  |ddr             |
00000ae0  20 20 20 20 20 20 20 20  20 45 51 55 44 20 30 20  |         EQUD 0 |
00000af0  3b 20 77 61 73 20 54 31  0d 05 5a 2e 2e 69 66 72  |; was T1..Z..ifr|
00000b00  5f 61 64 64 72 20 20 20  20 20 20 20 20 20 20 20  |_addr           |
00000b10  20 20 20 20 20 20 20 20  20 20 45 51 55 44 20 30  |          EQUD 0|
00000b20  20 3b 20 69 66 72 0d 05  64 35 2e 63 6f 6c 75 6d  | ; ifr..d5.colum|
00000b30  6e 5f 63 6f 75 6e 74 65  72 5f 61 64 64 72 20 20  |n_counter_addr  |
00000b40  20 20 20 20 20 20 20 20  45 51 55 44 20 63 6f 6c  |        EQUD col|
00000b50  75 6d 6e 5f 63 6f 75 6e  74 65 72 0d 05 6e 31 2e  |umn_counter..n1.|
00000b60  52 4f 4d 53 45 4c 5f 61  64 64 72 20 20 20 20 20  |ROMSEL_addr     |
00000b70  20 20 20 20 20 20 20 20  20 20 20 20 20 45 51 55  |             EQU|
00000b80  44 20 30 20 3b 20 52 4f  4d 53 45 4c 0d 05 78 32  |D 0 ; ROMSEL..x2|
00000b90  2e 50 61 6c 65 74 74 65  5f 61 64 64 72 20 20 20  |.Palette_addr   |
00000ba0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 45 51  |              EQ|
00000bb0  55 44 20 30 20 3b 20 50  61 6c 65 74 74 65 0d 05  |UD 0 ; Palette..|
00000bc0  82 35 2e 73 70 65 65 64  5f 61 64 64 72 20 20 20  |.5.speed_addr   |
00000bd0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000be0  45 51 55 44 20 73 63 72  65 65 6e 5f 63 6f 75 6e  |EQUD screen_coun|
00000bf0  74 2b 34 0d 05 8c 30 2e  65 6c 69 74 65 5f 61 64  |t+4...0.elite_ad|
00000c00  64 72 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |dr              |
00000c10  20 20 20 20 20 45 51 55  44 20 30 20 3b 20 65 6c  |     EQUD 0 ; el|
00000c20  69 74 65 0d 05 96 3e 2e  6f 70 63 6f 5f 61 64 64  |ite...>.opco_add|
00000c30  72 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |r               |
00000c40  20 20 20 20 20 45 51 55  44 20 6f 70 63 6f 64 65  |     EQUD opcode|
00000c50  28 30 29 20 3b 20 6f 70  63 6f 64 65 74 61 62 6c  |(0) ; opcodetabl|
00000c60  65 0d 05 a0 2d 2e 62 63  64 5f 61 64 64 72 20 20  |e...-.bcd_addr  |
00000c70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000c80  20 20 20 45 51 55 44 20  62 63 64 28 30 29 0d 05  |   EQUD bcd(0)..|
00000c90  aa 36 2e 73 68 65 69 6c  61 5f 77 72 69 74 65 74  |.6.sheila_writet|
00000ca0  61 62 5f 61 64 64 72 20  20 20 20 20 20 20 20 20  |ab_addr         |
00000cb0  45 51 55 44 20 73 68 65  69 6c 61 5f 77 72 69 74  |EQUD sheila_writ|
00000cc0  65 74 61 62 0d 05 b4 35  2e 73 68 65 69 6c 61 5f  |etab...5.sheila_|
00000cd0  72 65 61 64 74 61 62 5f  61 64 64 72 20 20 20 20  |readtab_addr    |
00000ce0  20 20 20 20 20 20 45 51  55 44 20 73 68 65 69 6c  |      EQUD sheil|
00000cf0  61 5f 72 65 61 64 74 61  62 0d 05 be 37 2e 73 6f  |a_readtab...7.so|
00000d00  75 6e 64 5f 76 65 63 74  6f 72 73 5f 61 64 64 72  |und_vectors_addr|
00000d10  20 20 20 20 20 20 20 20  20 20 20 45 51 55 44 20  |           EQUD |
00000d20  73 6f 75 6e 64 5f 62 75  66 66 73 5f 61 64 64 72  |sound_buffs_addr|
00000d30  0d 05 c8 33 2e 70 61 74  63 68 5f 61 64 64 72 20  |...3.patch_addr |
00000d40  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00000d50  20 20 45 51 55 44 20 70  61 74 63 68 5f 73 63 72  |  EQUD patch_scr|
00000d60  65 65 6e 0d 05 d2 04 0d  05 dc 30 2e 69 6e 69 74  |een.......0.init|
00000d70  20 3b 20 6f 6e 6c 79 20  63 61 6c 6c 65 64 20 6f  | ; only called o|
00000d80  6e 63 65 2c 20 62 65 66  6f 72 65 20 63 6f 64 65  |nce, before code|
00000d90  20 63 61 6c 6c 65 64 0d  05 e6 0c 41 44 52 20 52  | called....ADR R|
00000da0  30 2c 30 0d 05 f0 15 3b  4c 44 52 20 52 31 2c 6f  |0,0....;LDR R1,o|
00000db0  70 63 6f 5f 61 64 64 72  0d 05 fa 11 3b 41 44 44  |pco_addr....;ADD|
00000dc0  20 52 31 2c 52 31 2c 52  30 0d 06 04 14 3b 4c 44  | R1,R1,R0....;LD|
00000dd0  52 20 52 32 2c 62 63 64  5f 61 64 64 72 0d 06 0e  |R R2,bcd_addr...|
00000de0  11 3b 41 44 44 20 52 32  2c 52 32 2c 52 30 0d 06  |.;ADD R2,R2,R0..|
00000df0  18 1f 4c 44 52 20 52 35  2c 73 68 65 69 6c 61 5f  |..LDR R5,sheila_|
00000e00  77 72 69 74 65 74 61 62  5f 61 64 64 72 0d 06 22  |writetab_addr.."|
00000e10  10 41 44 44 20 52 35 2c  52 35 2c 52 30 0d 06 2c  |.ADD R5,R5,R0..,|
00000e20  1e 4c 44 52 20 52 36 2c  73 68 65 69 6c 61 5f 72  |.LDR R6,sheila_r|
00000e30  65 61 64 74 61 62 5f 61  64 64 72 0d 06 36 10 41  |eadtab_addr..6.A|
00000e40  44 44 20 52 36 2c 52 36  2c 52 30 0d 06 40 0f 4d  |DD R6,R6,R0..@.M|
00000e50  4f 56 20 52 33 2c 23 32  35 35 0d 06 4a 0e 2e 69  |OV R3,#255..J..i|
00000e60  6e 69 74 5f 6c 6f 6f 70  0d 06 54 19 3b 4c 44 52  |nit_loop..T.;LDR|
00000e70  20 52 34 2c 5b 52 31 2c  52 33 2c 4c 53 4c 23 32  | R4,[R1,R3,LSL#2|
00000e80  5d 0d 06 5e 11 3b 41 44  44 20 52 34 2c 52 34 2c  |]..^.;ADD R4,R4,|
00000e90  52 30 0d 06 68 19 3b 53  54 52 20 52 34 2c 5b 52  |R0..h.;STR R4,[R|
00000ea0  31 2c 52 33 2c 4c 53 4c  23 32 5d 0d 06 72 19 3b  |1,R3,LSL#2]..r.;|
00000eb0  4c 44 52 20 52 34 2c 5b  52 32 2c 52 33 2c 4c 53  |LDR R4,[R2,R3,LS|
00000ec0  4c 23 32 5d 0d 06 7c 11  3b 41 44 44 20 52 34 2c  |L#2]..|.;ADD R4,|
00000ed0  52 34 2c 52 30 0d 06 86  19 3b 53 54 52 20 52 34  |R4,R0....;STR R4|
00000ee0  2c 5b 52 32 2c 52 33 2c  4c 53 4c 23 32 5d 0d 06  |,[R2,R3,LSL#2]..|
00000ef0  90 18 4c 44 52 20 52 34  2c 5b 52 35 2c 52 33 2c  |..LDR R4,[R5,R3,|
00000f00  4c 53 4c 23 32 5d 0d 06  9a 10 41 44 44 20 52 34  |LSL#2]....ADD R4|
00000f10  2c 52 34 2c 52 30 0d 06  a4 18 53 54 52 20 52 34  |,R4,R0....STR R4|
00000f20  2c 5b 52 35 2c 52 33 2c  4c 53 4c 23 32 5d 0d 06  |,[R5,R3,LSL#2]..|
00000f30  ae 18 4c 44 52 20 52 34  2c 5b 52 36 2c 52 33 2c  |..LDR R4,[R6,R3,|
00000f40  4c 53 4c 23 32 5d 0d 06  b8 10 41 44 44 20 52 34  |LSL#2]....ADD R4|
00000f50  2c 52 34 2c 52 30 0d 06  c2 18 53 54 52 20 52 34  |,R4,R0....STR R4|
00000f60  2c 5b 52 36 2c 52 33 2c  4c 53 4c 23 32 5d 0d 06  |,[R6,R3,LSL#2]..|
00000f70  cc 11 53 55 42 53 20 52  33 2c 52 33 2c 23 31 0d  |..SUBS R3,R3,#1.|
00000f80  06 d6 11 42 50 4c 20 69  6e 69 74 5f 6c 6f 6f 70  |...BPL init_loop|
00000f90  0d 06 e0 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 06  |....MOV PC,R14..|
00000fa0  ea 04 0d 06 f4 0a 2e 73  74 61 72 74 0d 06 fe 1b  |.......start....|
00000fb0  53 54 4d 46 44 20 52 31  33 21 2c 7b 52 31 2d 52  |STMFD R13!,{R1-R|
00000fc0  31 32 2c 52 31 34 7d 0d  07 08 17 53 54 52 20 52  |12,R14}....STR R|
00000fd0  31 33 2c 72 65 74 75 72  6e 5f 61 64 64 72 0d 07  |13,return_addr..|
00000fe0  12 14 53 54 52 20 52 30  2c 72 6f 6d 73 5f 61 64  |..STR R0,roms_ad|
00000ff0  64 72 0d 07 1c 14 3b 4c  44 52 20 52 30 2c 63 72  |dr....;LDR R0,cr|
00001000  74 5f 61 64 64 72 0d 07  26 0d 3b 41 44 52 20 52  |t_addr..&.;ADR R|
00001010  31 2c 30 0d 07 30 11 3b  41 44 44 20 52 30 2c 52  |1,0..0.;ADD R0,R|
00001020  30 2c 52 31 0d 07 3a 14  3b 53 57 49 20 22 36 35  |0,R1..:.;SWI "65|
00001030  30 32 5f 49 6e 69 74 22  0d 07 44 04 0d 07 4e 13  |02_Init"..D...N.|
00001040  42 4c 20 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 0d  |BL blank_cursor.|
00001050  07 58 04 0d 07 62 22 4d  4f 56 20 52 30 2c 23 26  |.X...b"MOV R0,#&|
00001060  39 43 30 30 20 3a 20 41  44 44 20 52 30 2c 52 30  |9C00 : ADD R0,R0|
00001070  2c 23 26 34 30 0d 07 6c  19 53 54 52 20 52 30 2c  |,#&40..l.STR R0,|
00001080  5b 6d 65 6d 2c 23 73 63  72 65 65 6e 52 5d 0d 07  |[mem,#screenR]..|
00001090  76 04 0d 07 80 19 53 57  49 20 22 36 35 30 32 5f  |v.....SWI "6502_|
000010a0  47 65 74 6b 65 79 61 64  64 72 22 0d 07 8a 1a 53  |Getkeyaddr"....S|
000010b0  54 52 20 52 30 2c 5b 6d  65 6d 2c 23 6b 65 79 5f  |TR R0,[mem,#key_|
000010c0  61 64 64 72 5d 0d 07 94  04 0d 07 9e 11 41 44 52  |addr]........ADR|
000010d0  20 52 30 2c 62 6c 6f 63  6b 31 0d 07 a8 10 41 44  | R0,block1....AD|
000010e0  44 20 52 31 2c 52 30 2c  23 38 0d 07 b2 1d 53 57  |D R1,R0,#8....SW|
000010f0  49 20 22 4f 53 5f 52 65  61 64 56 64 75 56 61 72  |I "OS_ReadVduVar|
00001100  69 61 62 6c 65 73 22 0d  07 bc 21 4c 44 52 20 52  |iables"...!LDR R|
00001110  39 2c 5b 52 31 5d 20 20  20 20 20 3b 20 73 63 72  |9,[R1]     ; scr|
00001120  65 65 6e 73 74 61 72 74  0d 07 c6 21 53 54 52 20  |eenstart...!STR |
00001130  52 39 2c 5b 6d 65 6d 2c  23 61 72 63 5f 73 63 72  |R9,[mem,#arc_scr|
00001140  65 65 6e 73 74 61 72 74  5d 0d 07 d0 0d 4d 4f 56  |eenstart]....MOV|
00001150  20 52 39 2c 23 31 0d 07  da 19 53 54 52 42 20 52  | R9,#1....STRB R|
00001160  39 2c 5b 6d 65 6d 2c 23  74 61 6d 70 65 72 5d 0d  |9,[mem,#tamper].|
00001170  07 e4 1d 53 54 52 42 20  52 39 2c 5b 6d 65 6d 2c  |...STRB R9,[mem,|
00001180  23 70 61 6c 5f 74 61 6d  70 65 72 5d 0d 07 ee 20  |#pal_tamper]... |
00001190  53 54 52 42 20 52 39 2c  5b 6d 65 6d 2c 23 63 75  |STRB R9,[mem,#cu|
000011a0  72 73 6f 72 5f 74 61 6d  70 65 72 5d 0d 07 f8 04  |rsor_tamper]....|
000011b0  0d 08 02 17 4c 44 52 20  74 69 6d 65 2c 5b 6d 65  |....LDR time,[me|
000011c0  6d 2c 23 6d 69 6e 5d 0d  08 0c 12 4c 44 52 20 41  |m,#min]....LDR A|
000011d0  2c 5b 6d 65 6d 2c 23 61  5d 0d 08 16 12 4c 44 52  |,[mem,#a]....LDR|
000011e0  20 58 2c 5b 6d 65 6d 2c  23 78 5d 0d 08 20 12 4c  | X,[mem,#x].. .L|
000011f0  44 52 20 59 2c 5b 6d 65  6d 2c 23 79 5d 0d 08 2a  |DR Y,[mem,#y]..*|
00001200  22 4c 44 52 20 53 50 2c  5b 6d 65 6d 2c 23 73 70  |"LDR SP,[mem,#sp|
00001210  5d 20 3a 20 84 52 20 53  50 2c 53 50 2c 23 31 0d  |] : .R SP,SP,#1.|
00001220  08 34 12 4c 44 52 20 46  2c 5b 6d 65 6d 2c 23 66  |.4.LDR F,[mem,#f|
00001230  5d 0d 08 3e 1b 4c 44 52  20 7a 70 63 2c 5b 6d 65  |]..>.LDR zpc,[me|
00001240  6d 2c 23 70 63 5f 73 74  6f 72 65 5d 0d 08 48 04  |m,#pc_store]..H.|
00001250  0d 08 52 12 42 4c 20 72  65 63 61 6c 63 5f 77 72  |..R.BL recalc_wr|
00001260  61 70 0d 08 5c 1b 4c 44  52 42 20 52 30 2c 5b 6d  |ap..\.LDRB R0,[m|
00001270  65 6d 2c 23 70 61 74 63  68 5f 6f 6e 5d 0d 08 66  |em,#patch_on]..f|
00001280  13 80 20 52 30 2c 52 30  2c 23 25 31 31 31 31 31  |.. R0,R0,#%11111|
00001290  0d 08 70 12 42 49 43 20  46 2c 46 2c 23 26 46 46  |..p.BIC F,F,#&FF|
000012a0  30 30 0d 08 7a 13 84 52  20 46 2c 46 2c 52 30 2c  |00..z..R F,F,R0,|
000012b0  4c 53 4c 23 38 0d 08 84  04 0d 08 8e 10 3b 4d 4f  |LSL#8........;MO|
000012c0  56 20 74 69 6d 65 2c 23  30 0d 08 98 04 0d 08 a2  |V time,#0.......|
000012d0  15 4c 44 52 42 20 52 30  2c 66 65 30 38 5f 72 65  |.LDRB R0,fe08_re|
000012e0  61 64 0d 08 ac 12 42 49  43 20 52 30 2c 52 30 2c  |ad....BIC R0,R0,|
000012f0  23 26 38 31 0d 08 b6 15  53 54 52 42 20 52 30 2c  |#&81....STRB R0,|
00001300  66 65 30 38 5f 72 65 61  64 0d 08 c0 04 0d 08 ca  |fe08_read.......|
00001310  0c 41 44 52 20 52 30 2c  30 0d 08 d4 10 54 53 54  |.ADR R0,0....TST|
00001320  20 46 2c 23 25 31 30 30  30 0d 08 de 19 4c 44 52  | F,#%1000....LDR|
00001330  45 51 20 74 61 62 6c 65  2c 6f 70 63 6f 5f 61 64  |EQ table,opco_ad|
00001340  64 72 0d 08 e8 18 4c 44  52 4e 45 20 74 61 62 6c  |dr....LDRNE tabl|
00001350  65 2c 62 63 64 5f 61 64  64 72 0d 08 f2 16 41 44  |e,bcd_addr....AD|
00001360  44 20 74 61 62 6c 65 2c  74 61 62 6c 65 2c 52 30  |D table,table,R0|
00001370  0d 08 fc 16 3b 53 57 49  20 22 36 35 30 32 5f 52  |....;SWI "6502_R|
00001380  65 49 6e 69 74 22 0d 09  06 1b 3b 53 57 49 20 22  |eInit"....;SWI "|
00001390  36 35 30 32 5f 55 70 64  61 74 65 53 63 72 65 65  |6502_UpdateScree|
000013a0  6e 0d 09 10 18 42 4c 20  70 6f 6b 65 5f 75 70 64  |n....BL poke_upd|
000013b0  61 74 65 70 69 78 65 6c  56 0d 09 1a 13 42 4c 20  |atepixelV....BL |
000013c0  75 70 64 61 74 65 73 63  72 65 65 6e 0d 09 24 0c  |updatescreen..$.|
000013d0  42 20 66 65 74 63 68 32  0d 09 2e 04 0d 09 38 12  |B fetch2......8.|
000013e0  2e 72 65 73 65 74 5f 62  63 64 66 6c 61 67 0d 09  |.reset_bcdflag..|
000013f0  42 0c 41 44 52 20 52 31  2c 30 0d 09 4c 10 54 53  |B.ADR R1,0..L.TS|
00001400  54 20 46 2c 23 25 31 30  30 30 0d 09 56 19 4c 44  |T F,#%1000..V.LD|
00001410  52 45 51 20 74 61 62 6c  65 2c 6f 70 63 6f 5f 61  |REQ table,opco_a|
00001420  64 64 72 0d 09 60 18 4c  44 52 4e 45 20 74 61 62  |ddr..`.LDRNE tab|
00001430  6c 65 2c 62 63 64 5f 61  64 64 72 0d 09 6a 16 41  |le,bcd_addr..j.A|
00001440  44 44 20 74 61 62 6c 65  2c 74 61 62 6c 65 2c 52  |DD table,table,R|
00001450  31 0d 09 74 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |1..t.MOV PC,R14.|
00001460  09 7e 04 0d 09 88 0b 2e  62 6c 6f 63 6b 31 0d 09  |.~......block1..|
00001470  92 16 45 51 55 44 20 31  34 39 20 3a 20 45 51 55  |..EQUD 149 : EQU|
00001480  44 20 2d 31 0d 09 9c 0b  2e 62 6c 6f 63 6b 32 0d  |D -1.....block2.|
00001490  09 a6 13 45 51 55 44 20  30 20 3a 20 45 51 55 44  |...EQUD 0 : EQUD|
000014a0  20 30 0d 09 b0 04 0d 09  ba 11 2e 73 63 72 65 65  | 0.........scree|
000014b0  6e 5f 63 6f 75 6e 74 0d  09 c4 0a 45 51 55 44 20  |n_count....EQUD |
000014c0  30 0d 09 ce 0a 45 51 55  44 20 30 0d 09 d8 04 0d  |0....EQUD 0.....|
000014d0  09 e2 0d 2e 72 65 67 5f  63 6f 6d 70 0d 09 ec 14  |....reg_comp....|
000014e0  45 51 55 44 20 26 46 46  45 45 20 3c 3c 20 31 36  |EQUD &FFEE << 16|
000014f0  0d 09 f6 04 0d 0a 00 0d  2e 74 72 61 63 65 5f 6f  |.........trace_o|
00001500  6e 0d 0a 0a 0e 4d 4f 56  20 52 31 32 2c 23 31 0d  |n....MOV R12,#1.|
00001510  0a 14 12 53 54 52 42 20  52 31 32 2c 74 72 61 63  |...STRB R12,trac|
00001520  65 0d 0a 1e 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |e....MOV PC,R14.|
00001530  0a 28 04 0d 0a 32 0e 2e  73 68 6f 77 5f 72 65 67  |.(...2..show_reg|
00001540  73 0d 0a 3c 04 0d 0a 46  1a 3b 53 57 49 20 22 36  |s..<...F.;SWI "6|
00001550  35 30 32 5f 43 68 65 63  6b 6b 64 61 74 61 22 0d  |502_Checkkdata".|
00001560  0a 50 1a 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |.P.LDR R0,[mem,#|
00001570  6b 65 79 5f 61 64 64 72  5d 0d 0a 5a 14 4c 44 52  |key_addr]..Z.LDR|
00001580  42 20 52 30 2c 5b 52 30  2c 23 2d 34 5d 0d 0a 64  |B R0,[R0,#-4]..d|
00001590  04 0d 0a 6e 04 0d 0a 78  18 43 4d 50 20 52 30 2c  |...n...x.CMP R0,|
000015a0  23 26 31 46 20 3b 20 49  6e 73 65 72 74 0d 0a 82  |#&1F ; Insert...|
000015b0  0c ec 51 20 52 31 2c 23  31 0d 0a 8c 13 53 54 52  |..Q R1,#1....STR|
000015c0  45 51 20 52 31 2c 74 72  61 63 65 32 0d 0a 96 04  |EQ R1,trace2....|
000015d0  0d 0a a0 12 4c 44 52 42  20 52 30 2c 74 72 61 63  |....LDRB R0,trac|
000015e0  65 32 0d 0a aa 0d 43 4d  50 20 52 30 2c 23 31 0d  |e2....CMP R0,#1.|
000015f0  0a b4 10 4d 4f 56 4e 45  20 50 43 2c 52 31 34 0d  |...MOVNE PC,R14.|
00001600  0a be 04 0d 0a c8 14 3b  4c 44 52 20 52 30 2c 72  |.......;LDR R0,r|
00001610  65 67 5f 63 6f 6d 70 0d  0a d2 0f 3b 43 4d 50 20  |eg_comp....;CMP |
00001620  52 30 2c 7a 70 63 0d 0a  dc 0d 3b ec 51 20 52 30  |R0,zpc....;.Q R0|
00001630  2c 23 31 0d 0a e6 14 3b  53 54 52 45 51 42 20 52  |,#1....;STREQB R|
00001640  30 2c 74 72 61 63 65 0d  0a f0 04 0d 0a fa 17 3b  |0,trace........;|
00001650  41 44 44 20 52 31 32 2c  6d 65 6d 2c 23 26 44 46  |ADD R12,mem,#&DF|
00001660  30 30 0d 0b 04 18 3b 4c  44 52 42 20 52 31 32 2c  |00....;LDRB R12,|
00001670  5b 52 31 32 2c 23 26 44  41 5d 0d 0b 0e 0f 3b 43  |[R12,#&DA]....;C|
00001680  4d 50 20 52 31 32 2c 23  30 0d 0b 18 0e 3b ec 51  |MP R12,#0....;.Q|
00001690  20 52 31 32 2c 23 31 0d  0b 22 15 3b 53 54 52 45  | R12,#1..".;STRE|
000016a0  51 42 20 52 31 32 2c 74  72 61 63 65 0d 0b 2c 04  |QB R12,trace..,.|
000016b0  0d 0b 36 12 3b 4c 44 52  42 20 52 30 2c 74 72 61  |..6.;LDRB R0,tra|
000016c0  63 65 0d 0b 40 0e 3b 43  4d 50 20 52 30 2c 23 31  |ce..@.;CMP R0,#1|
000016d0  0d 0b 4a 10 3b 4d 4f 56  4e 45 20 50 43 2c 31 34  |..J.;MOVNE PC,14|
000016e0  0d 0b 54 04 0d 0b 5e 0d  a4 73 68 6f 77 72 65 67  |..T...^..showreg|
000016f0  73 0d 0b 68 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |s..h.MOV PC,R14.|
00001700  0b 72 04 0d 0b 7c 0d 2e  72 65 61 64 5f 69 66 72  |.r...|..read_ifr|
00001710  0d 0b 86 16 4c 44 52 42  20 52 30 2c 5b 6d 65 6d  |....LDRB R0,[mem|
00001720  2c 23 69 66 72 5d 0d 0b  90 04 0d 0b 9a 15 4c 44  |,#ifr]........LD|
00001730  52 20 52 31 2c 5b 6d 65  6d 2c 23 6d 69 6e 5d 0d  |R R1,[mem,#min].|
00001740  0b a4 12 53 55 42 20 52  31 2c 52 31 2c 74 69 6d  |...SUB R1,R1,tim|
00001750  65 0d 0b ae 19 4c 44 52  20 52 31 32 2c 5b 6d 65  |e....LDR R12,[me|
00001760  6d 2c 23 73 63 72 65 65  6e 5d 0d 0b b8 12 53 55  |m,#screen]....SU|
00001770  42 20 52 31 32 2c 52 31  32 2c 52 31 0d 0b c2 0f  |B R12,R12,R1....|
00001780  43 4d 50 20 52 31 32 2c  23 31 30 0d 0b cc 1b 84  |CMP R12,#10.....|
00001790  52 4c 54 20 52 30 2c 52  30 2c 23 25 31 30 20 3b  |RLT R0,R0,#%10 ;|
000017a0  20 76 73 79 6e 63 0d 0b  d6 05 3b 0d 0b e0 05 3b  | vsync....;....;|
000017b0  0d 0b ea 1a 3b 20 43 4d  50 20 7a 70 63 2c 23 26  |....; CMP zpc,#&|
000017c0  38 30 30 30 20 3c 3c 20  31 36 0d 0b f4 1d 3b 20  |8000 << 16....; |
000017d0  84 52 4c 54 20 52 30 2c  52 30 2c 23 25 31 30 20  |.RLT R0,R0,#%10 |
000017e0  3b 20 76 73 79 6e 63 0d  0b fe 04 0d 0c 08 04 0d  |; vsync.........|
000017f0  0c 12 16 4c 44 52 42 20  52 31 2c 5b 6d 65 6d 2c  |...LDRB R1,[mem,|
00001800  23 69 65 72 5d 0d 0c 1c  12 42 49 43 20 52 30 2c  |#ier]....BIC R0,|
00001810  52 30 2c 23 26 38 30 0d  0c 26 0f 80 53 20 52 31  |R0,#&80..&..S R1|
00001820  2c 52 31 2c 52 30 0d 0c  30 13 84 52 4e 45 20 52  |,R1,R0..0..RNE R|
00001830  30 2c 52 30 2c 23 26 38  30 0d 0c 3a 04 0d 0c 44  |0,R0,#&80..:...D|
00001840  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 0c 4e 04 0d  |.MOV PC,R14..N..|
00001850  0c 58 0d 2e 72 65 61 64  5f 69 65 72 0d 0c 62 16  |.X..read_ier..b.|
00001860  4c 44 52 42 20 52 30 2c  5b 6d 65 6d 2c 23 69 65  |LDRB R0,[mem,#ie|
00001870  72 5d 0d 0c 6c 11 84 52  20 52 30 2c 52 30 2c 23  |r]..l..R R0,R0,#|
00001880  26 38 30 0d 0c 76 0e 4d  4f 56 20 50 43 2c 52 31  |&80..v.MOV PC,R1|
00001890  34 0d 0c 80 04 0d 0c 8a  0e 2e 72 65 61 64 5f 69  |4.........read_i|
000018a0  66 72 32 0d 0c 94 17 4c  44 52 42 20 52 30 2c 5b  |fr2....LDRB R0,[|
000018b0  6d 65 6d 2c 23 69 66 72  32 5d 0d 0c 9e 17 4c 44  |mem,#ifr2]....LD|
000018c0  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 69 65 72 32  |RB R1,[mem,#ier2|
000018d0  5d 0d 0c a8 12 42 49 43  20 52 30 2c 52 30 2c 23  |]....BIC R0,R0,#|
000018e0  26 38 30 0d 0c b2 0f 80  53 20 52 31 2c 52 31 2c  |&80.....S R1,R1,|
000018f0  52 30 0d 0c bc 13 84 52  4e 45 20 52 30 2c 52 30  |R0.....RNE R0,R0|
00001900  2c 23 26 38 30 0d 0c c6  0e 4d 4f 56 20 50 43 2c  |,#&80....MOV PC,|
00001910  52 31 34 0d 0c d0 04 0d  0c da 0e 2e 72 65 61 64  |R14.........read|
00001920  5f 69 65 72 32 0d 0c e4  17 4c 44 52 42 20 52 30  |_ier2....LDRB R0|
00001930  2c 5b 6d 65 6d 2c 23 69  65 72 32 5d 0d 0c ee 11  |,[mem,#ier2]....|
00001940  84 52 20 52 30 2c 52 30  2c 23 26 38 30 0d 0c f8  |.R R0,R0,#&80...|
00001950  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 0d 02 04 0d  |.MOV PC,R14.....|
00001960  0d 0c 12 2e 49 4f 70 6f  64 75 6c 65 5f 52 65 61  |....IOpodule_Rea|
00001970  64 0d 0d 16 0f 80 20 52  30 2c 52 32 2c 23 26 46  |d..... R0,R2,#&F|
00001980  0d 0d 20 19 53 57 49 20  22 36 35 30 32 5f 52 65  |.. .SWI "6502_Re|
00001990  61 64 53 68 65 69 6c 61  22 0d 0d 2a 0e 4d 4f 56  |adSheila"..*.MOV|
000019a0  20 50 43 2c 52 31 34 0d  0d 34 04 0d 0d 3e 0b 2e  | PC,R14..4...>..|
000019b0  6c 64 72 62 34 31 0d 0d  48 04 0d 0d 52 1d 53 55  |ldrb41..H...R.SU|
000019c0  42 20 52 31 32 2c 6d 65  6d 2c 23 35 31 32 20 3b  |B R12,mem,#512 ;|
000019d0  20 73 68 65 69 6c 61 0d  0d 5c 1b 4c 44 52 42 20  | sheila..\.LDRB |
000019e0  52 31 2c 5b 52 31 32 2c  23 26 43 5d 20 3b 20 50  |R1,[R12,#&C] ; P|
000019f0  43 52 0d 0d 66 16 4c 44  52 42 20 52 32 2c 5b 6d  |CR..f.LDRB R2,[m|
00001a00  65 6d 2c 23 69 66 72 5d  0d 0d 70 13 80 20 52 31  |em,#ifr]..p.. R1|
00001a10  33 2c 52 31 2c 23 25 31  31 31 30 0d 0d 7a 15 54  |3,R1,#%1110..z.T|
00001a20  45 51 20 52 31 33 2c 20  20 20 23 25 30 30 31 30  |EQ R13,   #%0010|
00001a30  0d 0d 84 15 54 45 51 4e  45 20 52 31 33 2c 20 23  |....TEQNE R13, #|
00001a40  25 30 31 31 30 0d 0d 8e  14 42 49 43 45 51 20 52  |%0110....BICEQ R|
00001a50  32 2c 52 32 2c 23 25 31  31 0d 0d 98 14 42 49 43  |2,R2,#%11....BIC|
00001a60  4e 45 20 52 32 2c 52 32  2c 23 25 31 30 0d 0d a2  |NE R2,R2,#%10...|
00001a70  16 53 54 52 42 20 52 32  2c 5b 6d 65 6d 2c 23 69  |.STRB R2,[mem,#i|
00001a80  66 72 5d 0d 0d ac 04 0d  0d b6 16 4c 44 52 42 20  |fr]........LDRB |
00001a90  52 30 2c 5b 52 31 32 2c  23 26 34 46 5d 0d 0d c0  |R0,[R12,#&4F]...|
00001aa0  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 0d ca 04 0d  |.MOV PC,R14.....|
00001ab0  0d d4 0b 2e 6c 64 72 62  34 46 0d 0d de 04 0d 0d  |....ldrb4F......|
00001ac0  e8 1d 53 55 42 20 52 31  32 2c 6d 65 6d 2c 23 35  |..SUB R12,mem,#5|
00001ad0  31 32 20 3b 20 73 68 65  69 6c 61 0d 0d f2 16 4c  |12 ; sheila....L|
00001ae0  44 52 42 20 52 30 2c 5b  52 31 32 2c 23 26 34 46  |DRB R0,[R12,#&4F|
00001af0  5d 0d 0d fc 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |]....MOV PC,R14.|
00001b00  0e 06 04 0d 0e 10 04 0d  0e 1a 14 2e 72 65 61 64  |............read|
00001b10  54 34 6c 6f 77 5f 63 6f  75 6e 74 0d 0e 24 17 4c  |T4low_count..$.L|
00001b20  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |DRB R1,[mem,#ifr|
00001b30  32 5d 0d 0e 2e 19 42 49  43 20 52 31 2c 52 31 2c  |2]....BIC R1,R1,|
00001b40  20 23 25 30 30 31 30 30  30 30 30 0d 0e 38 17 53  | #%00100000..8.S|
00001b50  54 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R1,[mem,#ifr|
00001b60  32 5d 0d 0e 42 14 4c 44  52 20 52 30 2c 5b 6d 65  |2]..B.LDR R0,[me|
00001b70  6d 2c 23 54 34 5d 0d 0e  4c 15 4c 44 52 20 52 31  |m,#T4]..L.LDR R1|
00001b80  2c 5b 6d 65 6d 2c 23 6d  69 6e 5d 0d 0e 56 17 53  |,[mem,#min]..V.S|
00001b90  55 42 20 52 30 2c 52 30  2c 52 31 2c 4c 53 4c 23  |UB R0,R0,R1,LSL#|
00001ba0  31 35 0d 0e 60 19 41 44  44 20 52 30 2c 52 30 2c  |15..`.ADD R0,R0,|
00001bb0  74 69 6d 65 2c 4c 53 4c  23 31 35 0d 0e 6a 19 54  |time,LSL#15..j.T|
00001bc0  53 54 20 52 30 2c 23 31  20 3c 3c 20 31 35 20 3b  |ST R0,#1 << 15 ;|
00001bd0  20 3f 3f 3f 0d 0e 74 16  53 55 42 4e 45 20 74 69  | ???..t.SUBNE ti|
00001be0  6d 65 2c 74 69 6d 65 2c  23 31 0d 0e 7e 14 4d 4f  |me,time,#1..~.MO|
00001bf0  56 20 52 30 2c 52 30 2c  4c 53 52 23 31 36 0d 0e  |V R0,R0,LSR#16..|
00001c00  88 10 80 20 52 30 2c 52  30 2c 23 26 46 46 0d 0e  |... R0,R0,#&FF..|
00001c10  92 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 0e 9c 04  |..MOV PC,R14....|
00001c20  0d 0e a6 15 2e 72 65 61  64 54 34 68 69 67 68 5f  |.....readT4high_|
00001c30  63 6f 75 6e 74 0d 0e b0  14 4c 44 52 20 52 30 2c  |count....LDR R0,|
00001c40  5b 6d 65 6d 2c 23 54 34  5d 0d 0e ba 15 4c 44 52  |[mem,#T4]....LDR|
00001c50  20 52 31 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 0e  | R1,[mem,#min]..|
00001c60  c4 17 53 55 42 20 52 30  2c 52 30 2c 52 31 2c 4c  |..SUB R0,R0,R1,L|
00001c70  53 4c 23 31 35 0d 0e ce  19 41 44 44 20 52 30 2c  |SL#15....ADD R0,|
00001c80  52 30 2c 74 69 6d 65 2c  4c 53 4c 23 31 35 0d 0e  |R0,time,LSL#15..|
00001c90  d8 19 54 53 54 20 52 30  2c 23 31 20 3c 3c 20 31  |..TST R0,#1 << 1|
00001ca0  35 20 3b 20 3f 3f 3f 0d  0e e2 16 53 55 42 4e 45  |5 ; ???....SUBNE|
00001cb0  20 74 69 6d 65 2c 74 69  6d 65 2c 23 31 0d 0e ec  | time,time,#1...|
00001cc0  14 4d 4f 56 20 52 30 2c  52 30 2c 4c 53 52 23 32  |.MOV R0,R0,LSR#2|
00001cd0  34 0d 0e f6 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |4....MOV PC,R14.|
00001ce0  0f 00 04 0d 0f 0a 14 2e  72 65 61 64 54 33 6c 6f  |........readT3lo|
00001cf0  77 5f 63 6f 75 6e 74 0d  0f 14 16 4c 44 52 20 52  |w_count....LDR R|
00001d00  31 2c 5b 6d 65 6d 2c 23  69 66 72 32 5d 0d 0f 1e  |1,[mem,#ifr2]...|
00001d10  17 42 49 43 20 52 31 2c  52 31 2c 20 23 25 31 20  |.BIC R1,R1, #%1 |
00001d20  3c 3c 20 36 0d 0f 28 31  53 54 52 42 20 52 31 2c  |<< 6..(1STRB R1,|
00001d30  5b 6d 65 6d 2c 23 69 66  72 32 5d 20 3b 20 63 6c  |[mem,#ifr2] ; cl|
00001d40  65 61 72 20 54 33 20 69  6e 74 65 72 72 75 70 74  |ear T3 interrupt|
00001d50  20 66 6c 61 67 0d 0f 32  14 4c 44 52 20 52 30 2c  | flag..2.LDR R0,|
00001d60  5b 6d 65 6d 2c 23 54 33  5d 0d 0f 3c 15 4c 44 52  |[mem,#T3]..<.LDR|
00001d70  20 52 31 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 0f  | R1,[mem,#min]..|
00001d80  46 17 53 55 42 20 52 30  2c 52 30 2c 52 31 2c 4c  |F.SUB R0,R0,R1,L|
00001d90  53 4c 23 31 35 0d 0f 50  19 41 44 44 20 52 30 2c  |SL#15..P.ADD R0,|
00001da0  52 30 2c 74 69 6d 65 2c  4c 53 4c 23 31 35 0d 0f  |R0,time,LSL#15..|
00001db0  5a 19 54 53 54 20 52 30  2c 23 31 20 3c 3c 20 31  |Z.TST R0,#1 << 1|
00001dc0  35 20 3b 20 3f 3f 3f 0d  0f 64 16 53 55 42 4e 45  |5 ; ???..d.SUBNE|
00001dd0  20 74 69 6d 65 2c 74 69  6d 65 2c 23 31 0d 0f 6e  | time,time,#1..n|
00001de0  14 4d 4f 56 20 52 30 2c  52 30 2c 4c 53 52 23 31  |.MOV R0,R0,LSR#1|
00001df0  36 0d 0f 78 10 80 20 52  30 2c 52 30 2c 23 26 46  |6..x.. R0,R0,#&F|
00001e00  46 0d 0f 82 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |F....MOV PC,R14.|
00001e10  0f 8c 04 0d 0f 96 15 2e  72 65 61 64 54 33 68 69  |........readT3hi|
00001e20  67 68 5f 63 6f 75 6e 74  0d 0f a0 14 4c 44 52 20  |gh_count....LDR |
00001e30  52 30 2c 5b 6d 65 6d 2c  23 54 33 5d 0d 0f aa 15  |R0,[mem,#T3]....|
00001e40  4c 44 52 20 52 31 2c 5b  6d 65 6d 2c 23 6d 69 6e  |LDR R1,[mem,#min|
00001e50  5d 0d 0f b4 17 53 55 42  20 52 30 2c 52 30 2c 52  |]....SUB R0,R0,R|
00001e60  31 2c 4c 53 4c 23 31 35  0d 0f be 19 41 44 44 20  |1,LSL#15....ADD |
00001e70  52 30 2c 52 30 2c 74 69  6d 65 2c 4c 53 4c 23 31  |R0,R0,time,LSL#1|
00001e80  35 0d 0f c8 19 54 53 54  20 52 30 2c 23 31 20 3c  |5....TST R0,#1 <|
00001e90  3c 20 31 35 20 3b 20 3f  3f 3f 0d 0f d2 16 53 55  |< 15 ; ???....SU|
00001ea0  42 4e 45 20 74 69 6d 65  2c 74 69 6d 65 2c 23 31  |BNE time,time,#1|
00001eb0  0d 0f dc 14 4d 4f 56 20  52 30 2c 52 30 2c 4c 53  |....MOV R0,R0,LS|
00001ec0  52 23 32 34 0d 0f e6 0e  4d 4f 56 20 50 43 2c 52  |R#24....MOV PC,R|
00001ed0  31 34 0d 0f f0 04 0d 0f  fa 14 2e 72 65 61 64 54  |14.........readT|
00001ee0  33 6c 6f 77 5f 6c 61 74  63 68 0d 10 04 18 4c 44  |3low_latch....LD|
00001ef0  52 42 20 52 30 2c 5b 6d  65 6d 2c 23 54 33 52 2b  |RB R0,[mem,#T3R+|
00001f00  32 5d 0d 10 0e 0e 4d 4f  56 20 50 43 2c 52 31 34  |2]....MOV PC,R14|
00001f10  0d 10 18 04 0d 10 22 15  2e 72 65 61 64 54 33 68  |......"..readT3h|
00001f20  69 67 68 5f 6c 61 74 63  68 0d 10 2c 18 4c 44 52  |igh_latch..,.LDR|
00001f30  42 20 52 30 2c 5b 6d 65  6d 2c 23 54 33 52 2b 33  |B R0,[mem,#T3R+3|
00001f40  5d 0d 10 36 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |]..6.MOV PC,R14.|
00001f50  10 40 04 0d 10 4a 0c 2e  41 43 52 74 65 6d 70 0d  |.@...J..ACRtemp.|
00001f60  10 54 0a 45 51 55 44 20  30 0d 10 5e 04 0d 10 68  |.T.EQUD 0..^...h|
00001f70  0e 2e 77 72 69 74 65 41  43 52 32 0d 10 72 0e 3b  |..writeACR2..r.;|
00001f80  4d 4f 56 20 52 30 2c 23  30 0d 10 7c 1a 3b 53 54  |MOV R0,#0..|.;ST|
00001f90  52 42 20 52 30 2c 5b 6d  65 6d 2c 23 54 33 6d 6f  |RB R0,[mem,#T3mo|
00001fa0  64 65 5d 0d 10 86 13 53  55 42 20 52 30 2c 6d 65  |de]....SUB R0,me|
00001fb0  6d 2c 23 35 31 32 0d 10  90 15 4c 44 52 42 20 52  |m,#512....LDRB R|
00001fc0  31 2c 5b 52 30 2c 23 26  36 30 5d 0d 10 9a 11 84  |1,[R0,#&60].....|
00001fd0  52 20 52 31 2c 52 31 2c  23 26 38 30 0d 10 a4 15  |R R1,R1,#&80....|
00001fe0  53 54 52 42 20 52 31 2c  5b 52 30 2c 23 26 36 30  |STRB R1,[R0,#&60|
00001ff0  5d 0d 10 ae 0e 3b 4d 4f  56 20 52 30 2c 23 31 0d  |]....;MOV R0,#1.|
00002000  10 b8 14 3b 53 54 52 42  20 52 30 2c 41 43 52 74  |...;STRB R0,ACRt|
00002010  65 6d 70 0d 10 c2 0e 4d  4f 56 20 50 43 2c 52 31  |emp....MOV PC,R1|
00002020  34 0d 10 cc 04 0d 10 d6  15 2e 77 72 69 74 65 54  |4.........writeT|
00002030  33 6c 6f 77 5f 6c 61 74  63 68 0d 10 e0 18 53 54  |3low_latch....ST|
00002040  52 42 20 52 30 2c 5b 6d  65 6d 2c 23 54 33 52 2b  |RB R0,[mem,#T3R+|
00002050  32 5d 0d 10 ea 0e 4d 4f  56 20 50 43 2c 52 31 34  |2]....MOV PC,R14|
00002060  0d 10 f4 04 0d 10 fe 16  2e 77 72 69 74 65 54 33  |.........writeT3|
00002070  68 69 67 68 5f 63 6f 75  6e 74 0d 11 08 18 53 54  |high_count....ST|
00002080  52 42 20 52 30 2c 5b 6d  65 6d 2c 23 54 33 52 2b  |RB R0,[mem,#T3R+|
00002090  33 5d 0d 11 12 15 4c 44  52 20 52 30 2c 5b 6d 65  |3]....LDR R0,[me|
000020a0  6d 2c 23 54 33 52 5d 0d  11 1c 16 41 44 44 20 52  |m,#T3R]....ADD R|
000020b0  30 2c 52 30 2c 23 32 20  3c 3c 20 31 36 0d 11 26  |0,R0,#2 << 16..&|
000020c0  04 0d 11 30 2b 43 4d 50  20 52 30 2c 74 69 6d 65  |...0+CMP R0,time|
000020d0  2c 4c 53 4c 23 31 35 20  3b 20 66 69 78 20 45 78  |,LSL#15 ; fix Ex|
000020e0  69 6c 65 27 73 20 73 70  65 65 63 68 0d 11 3a 04  |ile's speech..:.|
000020f0  0d 11 44 15 42 48 49 20  73 6b 69 70 5f 54 33 61  |..D.BHI skip_T3a|
00002100  64 6a 75 73 74 0d 11 4e  17 4c 44 52 42 20 52 32  |djust..N.LDRB R2|
00002110  2c 5b 6d 65 6d 2c 23 69  65 72 32 5d 0d 11 58 04  |,[mem,#ier2]..X.|
00002120  0d 11 62 15 54 53 54 20  52 32 2c 23 25 30 31 30  |..b.TST R2,#%010|
00002130  30 30 30 30 30 0d 11 6c  18 4d 4f 56 4e 45 20 74  |00000..l.MOVNE t|
00002140  69 6d 65 2c 52 30 2c 4c  53 52 23 31 35 0d 11 76  |ime,R0,LSR#15..v|
00002150  04 0d 11 80 12 2e 73 6b  69 70 5f 54 33 61 64 6a  |......skip_T3adj|
00002160  75 73 74 0d 11 8a 15 4c  44 52 20 52 31 2c 5b 6d  |ust....LDR R1,[m|
00002170  65 6d 2c 23 6d 69 6e 5d  0d 11 94 17 41 44 44 20  |em,#min]....ADD |
00002180  52 30 2c 52 30 2c 52 31  2c 4c 53 4c 23 31 35 0d  |R0,R0,R1,LSL#15.|
00002190  11 9e 19 53 55 42 20 52  30 2c 52 30 2c 74 69 6d  |...SUB R0,R0,tim|
000021a0  65 2c 4c 53 4c 23 31 35  0d 11 a8 14 53 54 52 20  |e,LSL#15....STR |
000021b0  52 30 2c 5b 6d 65 6d 2c  23 54 33 5d 0d 11 b2 17  |R0,[mem,#T3]....|
000021c0  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 69 66  |LDRB R1,[mem,#if|
000021d0  72 32 5d 0d 11 bc 17 42  49 43 20 52 31 2c 52 31  |r2]....BIC R1,R1|
000021e0  2c 20 23 25 31 20 3c 3c  20 36 0d 11 c6 31 53 54  |, #%1 << 6...1ST|
000021f0  52 42 20 52 31 2c 5b 6d  65 6d 2c 23 69 66 72 32  |RB R1,[mem,#ifr2|
00002200  5d 20 3b 20 63 6c 65 61  72 20 54 33 20 69 6e 74  |] ; clear T3 int|
00002210  65 72 72 75 70 74 20 66  6c 61 67 0d 11 d0 12 3b  |errupt flag....;|
00002220  53 55 42 20 52 30 2c 52  30 2c 23 26 44 0d 11 da  |SUB R0,R0,#&D...|
00002230  1c 53 55 42 20 52 30 2c  6d 65 6d 2c 23 35 31 32  |.SUB R0,mem,#512|
00002240  20 3b 20 73 68 65 69 6c  61 0d 11 e4 04 0d 11 ee  | ; sheila.......|
00002250  04 0d 11 f8 15 4c 44 52  42 20 52 31 2c 5b 52 30  |.....LDRB R1,[R0|
00002260  2c 23 26 36 42 5d 0d 12  02 11 82 20 52 31 2c 52  |,#&6B]..... R1,R|
00002270  31 2c 23 31 3c 3c 37 0d  12 0c 11 80 53 20 52 31  |1,#1<<7.....S R1|
00002280  2c 52 31 2c 23 26 43 30  0d 12 16 17 4c 44 52 45  |,R1,#&C0....LDRE|
00002290  51 42 20 52 31 2c 5b 52  30 2c 23 26 36 30 5d 0d  |QB R1,[R0,#&60].|
000022a0  12 20 14 42 49 43 45 51  20 52 31 2c 52 31 2c 23  |. .BICEQ R1,R1,#|
000022b0  26 38 30 0d 12 2a 17 53  54 52 45 51 42 20 52 31  |&80..*.STREQB R1|
000022c0  2c 5b 52 30 2c 23 26 36  30 5d 0d 12 34 04 0d 12  |,[R0,#&60]..4...|
000022d0  3e 1e 4c 44 52 42 20 52  31 32 2c 5b 6d 65 6d 2c  |>.LDRB R12,[mem,|
000022e0  23 63 72 74 5f 72 65 67  73 2b 39 5d 0d 12 48 0e  |#crt_regs+9]..H.|
000022f0  43 4d 50 20 52 31 32 2c  23 33 0d 12 52 1e ec 51  |CMP R12,#3..R..Q|
00002300  20 50 43 2c 52 31 34 20  3b 20 66 6f 72 74 72 65  | PC,R14 ; fortre|
00002310  73 73 20 66 75 64 67 65  0d 12 5c 04 0d 12 66 25  |ss fudge..\...f%|
00002320  4d 4f 56 20 52 30 2c 23  31 20 3a 20 53 54 52 42  |MOV R0,#1 : STRB|
00002330  20 52 30 2c 5b 6d 65 6d  2c 23 54 33 6d 6f 64 65  | R0,[mem,#T3mode|
00002340  5d 0d 12 70 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |]..p.MOV PC,R14.|
00002350  12 7a 04 0d 12 84 16 2e  77 72 69 74 65 54 33 68  |.z......writeT3h|
00002360  69 67 68 5f 6c 61 74 63  68 0d 12 8e 18 53 54 52  |igh_latch....STR|
00002370  42 20 52 30 2c 5b 6d 65  6d 2c 23 54 33 52 2b 33  |B R0,[mem,#T3R+3|
00002380  5d 0d 12 98 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |]....MOV PC,R14.|
00002390  12 a2 04 0d 12 ac 15 2e  77 72 69 74 65 54 34 6c  |........writeT4l|
000023a0  6f 77 5f 6c 61 74 63 68  0d 12 b6 18 53 54 52 42  |ow_latch....STRB|
000023b0  20 52 30 2c 5b 6d 65 6d  2c 23 54 34 52 2b 32 5d  | R0,[mem,#T4R+2]|
000023c0  0d 12 c0 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 12  |....MOV PC,R14..|
000023d0  ca 04 0d 12 d4 16 2e 77  72 69 74 65 54 34 68 69  |.......writeT4hi|
000023e0  67 68 5f 63 6f 75 6e 74  0d 12 de 18 4c 44 52 42  |gh_count....LDRB|
000023f0  20 52 31 2c 5b 6d 65 6d  2c 23 54 34 52 2b 32 5d  | R1,[mem,#T4R+2]|
00002400  0d 12 e8 16 41 44 44 20  52 31 2c 52 31 2c 52 30  |....ADD R1,R1,R0|
00002410  2c 4c 53 4c 23 38 0d 12  f2 14 4d 4f 56 20 52 31  |,LSL#8....MOV R1|
00002420  2c 52 31 2c 4c 53 4c 23  31 36 0d 12 fc 15 4c 44  |,R1,LSL#16....LD|
00002430  52 20 52 30 2c 5b 6d 65  6d 2c 23 6d 69 6e 5d 0d  |R R0,[mem,#min].|
00002440  13 06 17 41 44 44 20 52  31 2c 52 31 2c 52 30 2c  |...ADD R1,R1,R0,|
00002450  4c 53 4c 23 31 35 0d 13  10 19 53 55 42 20 52 31  |LSL#15....SUB R1|
00002460  2c 52 31 2c 74 69 6d 65  2c 4c 53 4c 23 31 35 0d  |,R1,time,LSL#15.|
00002470  13 1a 17 3b 41 44 44 20  52 31 2c 52 31 2c 23 32  |...;ADD R1,R1,#2|
00002480  20 3c 3c 20 31 36 0d 13  24 16 41 44 44 20 52 31  | << 16..$.ADD R1|
00002490  2c 52 31 2c 23 31 20 3c  3c 20 31 36 0d 13 2e 14  |,R1,#1 << 16....|
000024a0  53 54 52 20 52 31 2c 5b  6d 65 6d 2c 23 54 34 5d  |STR R1,[mem,#T4]|
000024b0  0d 13 38 17 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |..8.LDRB R1,[mem|
000024c0  2c 23 69 66 72 32 5d 0d  13 42 1a 42 49 43 53 20  |,#ifr2]..B.BICS |
000024d0  52 31 2c 52 31 2c 20 23  25 30 30 31 20 3c 3c 20  |R1,R1, #%001 << |
000024e0  35 0d 13 4c 17 53 54 52  42 20 52 31 2c 5b 6d 65  |5..L.STRB R1,[me|
000024f0  6d 2c 23 69 66 72 32 5d  0d 13 56 25 4d 4f 56 20  |m,#ifr2]..V%MOV |
00002500  52 30 2c 23 31 20 3a 20  53 54 52 42 20 52 30 2c  |R0,#1 : STRB R0,|
00002510  5b 6d 65 6d 2c 23 54 34  6d 6f 64 65 5d 0d 13 60  |[mem,#T4mode]..`|
00002520  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 13 6a 04 0d  |.MOV PC,R14..j..|
00002530  13 74 14 2e 72 65 61 64  54 32 6c 6f 77 5f 63 6f  |.t..readT2low_co|
00002540  75 6e 74 0d 13 7e 16 4c  44 52 42 20 52 31 2c 5b  |unt..~.LDRB R1,[|
00002550  6d 65 6d 2c 23 69 66 72  5d 0d 13 88 19 42 49 43  |mem,#ifr]....BIC|
00002560  20 52 31 2c 52 31 2c 20  23 25 31 30 31 20 3c 3c  | R1,R1, #%101 <<|
00002570  20 35 0d 13 92 30 53 54  52 42 20 52 31 2c 5b 6d  | 5...0STRB R1,[m|
00002580  65 6d 2c 23 69 66 72 5d  20 3b 20 63 6c 65 61 72  |em,#ifr] ; clear|
00002590  20 54 32 20 69 6e 74 65  72 72 75 70 74 20 66 6c  | T2 interrupt fl|
000025a0  61 67 0d 13 9c 14 4c 44  52 20 52 30 2c 5b 6d 65  |ag....LDR R0,[me|
000025b0  6d 2c 23 54 32 5d 0d 13  a6 15 4c 44 52 20 52 31  |m,#T2]....LDR R1|
000025c0  2c 5b 6d 65 6d 2c 23 6d  69 6e 5d 0d 13 b0 17 53  |,[mem,#min]....S|
000025d0  55 42 20 52 30 2c 52 30  2c 52 31 2c 4c 53 4c 23  |UB R0,R0,R1,LSL#|
000025e0  31 35 0d 13 ba 19 41 44  44 20 52 30 2c 52 30 2c  |15....ADD R0,R0,|
000025f0  74 69 6d 65 2c 4c 53 4c  23 31 35 0d 13 c4 19 54  |time,LSL#15....T|
00002600  53 54 20 52 30 2c 23 31  20 3c 3c 20 31 35 20 3b  |ST R0,#1 << 15 ;|
00002610  20 3f 3f 3f 0d 13 ce 16  53 55 42 4e 45 20 74 69  | ???....SUBNE ti|
00002620  6d 65 2c 74 69 6d 65 2c  23 31 0d 13 d8 14 4d 4f  |me,time,#1....MO|
00002630  56 20 52 30 2c 52 30 2c  4c 53 52 23 31 36 0d 13  |V R0,R0,LSR#16..|
00002640  e2 10 80 20 52 30 2c 52  30 2c 23 26 46 46 0d 13  |... R0,R0,#&FF..|
00002650  ec 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 13 f6 04  |..MOV PC,R14....|
00002660  0d 14 00 15 2e 72 65 61  64 54 32 68 69 67 68 5f  |.....readT2high_|
00002670  63 6f 75 6e 74 0d 14 0a  14 4c 44 52 20 52 30 2c  |count....LDR R0,|
00002680  5b 6d 65 6d 2c 23 54 32  5d 0d 14 14 15 4c 44 52  |[mem,#T2]....LDR|
00002690  20 52 31 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 14  | R1,[mem,#min]..|
000026a0  1e 17 53 55 42 20 52 30  2c 52 30 2c 52 31 2c 4c  |..SUB R0,R0,R1,L|
000026b0  53 4c 23 31 35 0d 14 28  19 41 44 44 20 52 30 2c  |SL#15..(.ADD R0,|
000026c0  52 30 2c 74 69 6d 65 2c  4c 53 4c 23 31 35 0d 14  |R0,time,LSL#15..|
000026d0  32 19 54 53 54 20 52 30  2c 23 31 20 3c 3c 20 31  |2.TST R0,#1 << 1|
000026e0  35 20 3b 20 3f 3f 3f 0d  14 3c 16 53 55 42 4e 45  |5 ; ???..<.SUBNE|
000026f0  20 74 69 6d 65 2c 74 69  6d 65 2c 23 31 0d 14 46  | time,time,#1..F|
00002700  14 4d 4f 56 20 52 30 2c  52 30 2c 4c 53 52 23 32  |.MOV R0,R0,LSR#2|
00002710  34 0d 14 50 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |4..P.MOV PC,R14.|
00002720  14 5a 04 0d 14 64 14 2e  72 65 61 64 54 31 6c 6f  |.Z...d..readT1lo|
00002730  77 5f 63 6f 75 6e 74 0d  14 6e 16 4c 44 52 42 20  |w_count..n.LDRB |
00002740  52 31 2c 5b 6d 65 6d 2c  23 69 66 72 5d 0d 14 78  |R1,[mem,#ifr]..x|
00002750  17 42 49 43 20 52 31 2c  52 31 2c 20 23 25 31 20  |.BIC R1,R1, #%1 |
00002760  3c 3c 20 36 0d 14 82 30  53 54 52 42 20 52 31 2c  |<< 6...0STRB R1,|
00002770  5b 6d 65 6d 2c 23 69 66  72 5d 20 3b 20 63 6c 65  |[mem,#ifr] ; cle|
00002780  61 72 20 54 31 20 69 6e  74 65 72 72 75 70 74 20  |ar T1 interrupt |
00002790  66 6c 61 67 0d 14 8c 14  4c 44 52 20 52 30 2c 5b  |flag....LDR R0,[|
000027a0  6d 65 6d 2c 23 54 31 5d  0d 14 96 15 4c 44 52 20  |mem,#T1]....LDR |
000027b0  52 31 2c 5b 6d 65 6d 2c  23 6d 69 6e 5d 0d 14 a0  |R1,[mem,#min]...|
000027c0  17 53 55 42 20 52 30 2c  52 30 2c 52 31 2c 4c 53  |.SUB R0,R0,R1,LS|
000027d0  4c 23 31 35 0d 14 aa 19  41 44 44 20 52 30 2c 52  |L#15....ADD R0,R|
000027e0  30 2c 74 69 6d 65 2c 4c  53 4c 23 31 35 0d 14 b4  |0,time,LSL#15...|
000027f0  19 54 53 54 20 52 30 2c  23 31 20 3c 3c 20 31 35  |.TST R0,#1 << 15|
00002800  20 3b 20 3f 3f 3f 0d 14  be 16 53 55 42 4e 45 20  | ; ???....SUBNE |
00002810  74 69 6d 65 2c 74 69 6d  65 2c 23 31 0d 14 c8 14  |time,time,#1....|
00002820  4d 4f 56 20 52 30 2c 52  30 2c 4c 53 52 23 31 36  |MOV R0,R0,LSR#16|
00002830  0d 14 d2 10 80 20 52 30  2c 52 30 2c 23 26 46 46  |..... R0,R0,#&FF|
00002840  0d 14 dc 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 14  |....MOV PC,R14..|
00002850  e6 04 0d 14 f0 15 2e 72  65 61 64 54 31 68 69 67  |.......readT1hig|
00002860  68 5f 63 6f 75 6e 74 0d  14 fa 14 4c 44 52 20 52  |h_count....LDR R|
00002870  30 2c 5b 6d 65 6d 2c 23  54 31 5d 0d 15 04 15 4c  |0,[mem,#T1]....L|
00002880  44 52 20 52 31 2c 5b 6d  65 6d 2c 23 6d 69 6e 5d  |DR R1,[mem,#min]|
00002890  0d 15 0e 17 53 55 42 20  52 30 2c 52 30 2c 52 31  |....SUB R0,R0,R1|
000028a0  2c 4c 53 4c 23 31 35 0d  15 18 19 41 44 44 20 52  |,LSL#15....ADD R|
000028b0  30 2c 52 30 2c 74 69 6d  65 2c 4c 53 4c 23 31 35  |0,R0,time,LSL#15|
000028c0  0d 15 22 19 54 53 54 20  52 30 2c 23 31 20 3c 3c  |..".TST R0,#1 <<|
000028d0  20 31 35 20 3b 20 3f 3f  3f 0d 15 2c 16 53 55 42  | 15 ; ???..,.SUB|
000028e0  4e 45 20 74 69 6d 65 2c  74 69 6d 65 2c 23 31 0d  |NE time,time,#1.|
000028f0  15 36 14 4d 4f 56 20 52  30 2c 52 30 2c 4c 53 52  |.6.MOV R0,R0,LSR|
00002900  23 32 34 0d 15 40 0e 4d  4f 56 20 50 43 2c 52 31  |#24..@.MOV PC,R1|
00002910  34 0d 15 4a 04 0d 15 54  14 2e 72 65 61 64 54 31  |4..J...T..readT1|
00002920  6c 6f 77 5f 6c 61 74 63  68 0d 15 5e 18 4c 44 52  |low_latch..^.LDR|
00002930  42 20 52 30 2c 5b 6d 65  6d 2c 23 54 31 52 2b 32  |B R0,[mem,#T1R+2|
00002940  5d 0d 15 68 0e 4d 4f 56  20 50 43 2c 52 31 34 0d  |]..h.MOV PC,R14.|
00002950  15 72 04 0d 15 7c 15 2e  72 65 61 64 54 31 68 69  |.r...|..readT1hi|
00002960  67 68 5f 6c 61 74 63 68  0d 15 86 18 4c 44 52 42  |gh_latch....LDRB|
00002970  20 52 30 2c 5b 6d 65 6d  2c 23 54 31 52 2b 33 5d  | R0,[mem,#T1R+3]|
00002980  0d 15 90 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 15  |....MOV PC,R14..|
00002990  9a 04 0d 15 a4 15 2e 77  72 69 74 65 54 31 6c 6f  |.......writeT1lo|
000029a0  77 5f 6c 61 74 63 68 0d  15 ae 18 53 54 52 42 20  |w_latch....STRB |
000029b0  52 30 2c 5b 6d 65 6d 2c  23 54 31 52 2b 32 5d 0d  |R0,[mem,#T1R+2].|
000029c0  15 b8 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 15 c2  |...MOV PC,R14...|
000029d0  04 0d 15 cc 16 2e 77 72  69 74 65 54 31 68 69 67  |......writeT1hig|
000029e0  68 5f 63 6f 75 6e 74 0d  15 d6 18 53 54 52 42 20  |h_count....STRB |
000029f0  52 30 2c 5b 6d 65 6d 2c  23 54 31 52 2b 33 5d 0d  |R0,[mem,#T1R+3].|
00002a00  15 e0 15 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00002a10  54 31 52 5d 0d 15 ea 15  4c 44 52 20 52 31 2c 5b  |T1R]....LDR R1,[|
00002a20  6d 65 6d 2c 23 6d 69 6e  5d 0d 15 f4 17 41 44 44  |mem,#min]....ADD|
00002a30  20 52 30 2c 52 30 2c 52  31 2c 4c 53 4c 23 31 35  | R0,R0,R1,LSL#15|
00002a40  0d 15 fe 19 53 55 42 20  52 30 2c 52 30 2c 74 69  |....SUB R0,R0,ti|
00002a50  6d 65 2c 4c 53 4c 23 31  35 0d 16 08 16 41 44 44  |me,LSL#15....ADD|
00002a60  20 52 30 2c 52 30 2c 23  32 20 3c 3c 20 31 36 0d  | R0,R0,#2 << 16.|
00002a70  16 12 14 53 54 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...STR R0,[mem,#|
00002a80  54 31 5d 0d 16 1c 15 4c  44 52 20 52 31 2c 5b 6d  |T1]....LDR R1,[m|
00002a90  65 6d 2c 23 69 66 72 5d  0d 16 26 17 42 49 43 20  |em,#ifr]..&.BIC |
00002aa0  52 31 2c 52 31 2c 20 23  25 31 20 3c 3c 20 36 0d  |R1,R1, #%1 << 6.|
00002ab0  16 30 30 53 54 52 42 20  52 31 2c 5b 6d 65 6d 2c  |.00STRB R1,[mem,|
00002ac0  23 69 66 72 5d 20 3b 20  63 6c 65 61 72 20 54 31  |#ifr] ; clear T1|
00002ad0  20 69 6e 74 65 72 72 75  70 74 20 66 6c 61 67 0d  | interrupt flag.|
00002ae0  16 3a 1c 53 55 42 20 52  30 2c 6d 65 6d 2c 23 35  |.:.SUB R0,mem,#5|
00002af0  31 32 20 3b 20 73 68 65  69 6c 61 0d 16 44 15 4c  |12 ; sheila..D.L|
00002b00  44 52 42 20 52 31 2c 5b  52 30 2c 23 26 34 30 5d  |DRB R1,[R0,#&40]|
00002b10  0d 16 4e 12 42 49 43 20  52 31 2c 52 31 2c 23 26  |..N.BIC R1,R1,#&|
00002b20  38 30 0d 16 58 15 53 54  52 42 20 52 31 2c 5b 52  |80..X.STRB R1,[R|
00002b30  30 2c 23 26 34 30 5d 0d  16 62 25 4d 4f 56 20 52  |0,#&40]..b%MOV R|
00002b40  30 2c 23 31 20 3a 20 53  54 52 42 20 52 30 2c 5b  |0,#1 : STRB R0,[|
00002b50  6d 65 6d 2c 23 54 31 6d  6f 64 65 5d 0d 16 6c 0e  |mem,#T1mode]..l.|
00002b60  4d 4f 56 20 50 43 2c 52  31 34 0d 16 76 04 0d 16  |MOV PC,R14..v...|
00002b70  80 16 2e 77 72 69 74 65  54 31 68 69 67 68 5f 6c  |...writeT1high_l|
00002b80  61 74 63 68 0d 16 8a 18  53 54 52 42 20 52 30 2c  |atch....STRB R0,|
00002b90  5b 6d 65 6d 2c 23 54 31  52 2b 33 5d 0d 16 94 0e  |[mem,#T1R+3]....|
00002ba0  4d 4f 56 20 50 43 2c 52  31 34 0d 16 9e 04 0d 16  |MOV PC,R14......|
00002bb0  a8 15 2e 77 72 69 74 65  54 32 6c 6f 77 5f 6c 61  |...writeT2low_la|
00002bc0  74 63 68 0d 16 b2 18 53  54 52 42 20 52 30 2c 5b  |tch....STRB R0,[|
00002bd0  6d 65 6d 2c 23 54 32 52  2b 32 5d 0d 16 bc 0e 4d  |mem,#T2R+2]....M|
00002be0  4f 56 20 50 43 2c 52 31  34 0d 16 c6 04 0d 16 d0  |OV PC,R14.......|
00002bf0  16 2e 77 72 69 74 65 54  32 68 69 67 68 5f 63 6f  |..writeT2high_co|
00002c00  75 6e 74 0d 16 da 18 4c  44 52 42 20 52 31 2c 5b  |unt....LDRB R1,[|
00002c10  6d 65 6d 2c 23 54 32 52  2b 32 5d 0d 16 e4 16 41  |mem,#T2R+2]....A|
00002c20  44 44 20 52 31 2c 52 31  2c 52 30 2c 4c 53 4c 23  |DD R1,R1,R0,LSL#|
00002c30  38 0d 16 ee 14 4d 4f 56  20 52 31 2c 52 31 2c 4c  |8....MOV R1,R1,L|
00002c40  53 4c 23 31 36 0d 16 f8  15 4c 44 52 20 52 30 2c  |SL#16....LDR R0,|
00002c50  5b 6d 65 6d 2c 23 6d 69  6e 5d 0d 17 02 17 41 44  |[mem,#min]....AD|
00002c60  44 20 52 31 2c 52 31 2c  52 30 2c 4c 53 4c 23 31  |D R1,R1,R0,LSL#1|
00002c70  35 0d 17 0c 19 53 55 42  20 52 31 2c 52 31 2c 74  |5....SUB R1,R1,t|
00002c80  69 6d 65 2c 4c 53 4c 23  31 35 0d 17 16 16 41 44  |ime,LSL#15....AD|
00002c90  44 20 52 31 2c 52 31 2c  23 32 20 3c 3c 20 31 36  |D R1,R1,#2 << 16|
00002ca0  0d 17 20 14 53 54 52 20  52 31 2c 5b 6d 65 6d 2c  |.. .STR R1,[mem,|
00002cb0  23 54 32 5d 0d 17 2a 15  4c 44 52 20 52 31 2c 5b  |#T2]..*.LDR R1,[|
00002cc0  6d 65 6d 2c 23 69 66 72  5d 0d 17 34 1a 42 49 43  |mem,#ifr]..4.BIC|
00002cd0  53 20 52 31 2c 52 31 2c  20 23 25 31 30 31 20 3c  |S R1,R1, #%101 <|
00002ce0  3c 20 35 0d 17 3e 30 53  54 52 42 20 52 31 2c 5b  |< 5..>0STRB R1,[|
00002cf0  6d 65 6d 2c 23 69 66 72  5d 20 3b 20 63 6c 65 61  |mem,#ifr] ; clea|
00002d00  72 20 54 32 20 69 6e 74  65 72 72 75 70 74 20 66  |r T2 interrupt f|
00002d10  6c 61 67 0d 17 48 25 4d  4f 56 20 52 30 2c 23 31  |lag..H%MOV R0,#1|
00002d20  20 3a 20 53 54 52 42 20  52 30 2c 5b 6d 65 6d 2c  | : STRB R0,[mem,|
00002d30  23 54 32 6d 6f 64 65 5d  0d 17 52 0e 4d 4f 56 20  |#T2mode]..R.MOV |
00002d40  50 43 2c 52 31 34 0d 17  5c 04 0d 17 66 0c 3b 2e  |PC,R14..\...f.;.|
00002d50  54 31 6d 6f 64 65 0d 17  70 0b 3b 45 51 55 44 20  |T1mode..p.;EQUD |
00002d60  31 0d 17 7a 0c 3b 2e 54  32 6d 6f 64 65 0d 17 84  |1..z.;.T2mode...|
00002d70  0b 3b 45 51 55 44 20 30  0d 17 8e 0c 3b 2e 54 33  |.;EQUD 0....;.T3|
00002d80  6d 6f 64 65 0d 17 98 0b  3b 45 51 55 44 20 31 0d  |mode....;EQUD 1.|
00002d90  17 a2 0c 3b 2e 54 34 6d  6f 64 65 0d 17 ac 0b 3b  |...;.T4mode....;|
00002da0  45 51 55 44 20 30 0d 17  b6 08 3b 2e 54 31 0d 17  |EQUD 0....;.T1..|
00002db0  c0 15 3b 45 51 55 44 20  26 31 32 33 34 20 3c 3c  |..;EQUD &1234 <<|
00002dc0  20 31 36 0d 17 ca 09 3b  2e 54 31 52 0d 17 d4 15  | 16....;.T1R....|
00002dd0  3b 45 51 55 44 20 32 30  30 30 30 20 3c 3c 20 31  |;EQUD 20000 << 1|
00002de0  36 0d 17 de 08 3b 2e 54  32 0d 17 e8 15 3b 45 51  |6....;.T2....;EQ|
00002df0  55 44 20 39 38 37 36 35  20 3c 3c 20 31 36 0d 17  |UD 98765 << 16..|
00002e00  f2 09 3b 2e 54 32 52 0d  17 fc 15 3b 45 51 55 44  |..;.T2R....;EQUD|
00002e10  20 32 35 35 20 20 20 3c  3c 20 31 36 0d 18 06 08  | 255   << 16....|
00002e20  3b 2e 54 33 0d 18 10 15  3b 45 51 55 44 20 36 37  |;.T3....;EQUD 67|
00002e30  37 37 20 20 3c 3c 20 31  36 0d 18 1a 09 3b 2e 54  |77  << 16....;.T|
00002e40  33 52 0d 18 24 15 3b 45  51 55 44 20 36 37 37 37  |3R..$.;EQUD 6777|
00002e50  20 20 3c 3c 20 31 36 0d  18 2e 08 3b 2e 54 34 0d  |  << 16....;.T4.|
00002e60  18 38 15 3b 45 51 55 44  20 37 33 38 30 20 20 3c  |.8.;EQUD 7380  <|
00002e70  3c 20 31 36 0d 18 42 09  3b 2e 54 34 52 0d 18 4c  |< 16..B.;.T4R..L|
00002e80  15 3b 45 51 55 44 20 32  35 35 20 20 20 3c 3c 20  |.;EQUD 255   << |
00002e90  31 36 0d 18 56 0c 3b 2e  73 63 72 65 65 6e 0d 18  |16..V.;.screen..|
00002ea0  60 0d 3b 45 51 55 44 20  34 33 32 0d 18 6a 0d 3b  |`.;EQUD 432..j.;|
00002eb0  2e 73 63 72 65 65 6e 52  0d 18 74 0f 3b 45 51 55  |.screenR..t.;EQU|
00002ec0  44 20 34 30 30 30 30 0d  18 7e 09 3b 2e 6d 69 6e  |D 40000..~.;.min|
00002ed0  0d 18 88 0d 3b 45 51 55  44 20 32 30 30 0d 18 92  |....;EQUD 200...|
00002ee0  11 3b 2e 73 6f 75 6e 64  5f 74 69 6d 65 72 0d 18  |.;.sound_timer..|
00002ef0  9c 0b 3b 45 51 55 44 20  30 0d 18 a6 04 0d 18 b0  |..;EQUD 0.......|
00002f00  04 0d 18 ba 0b 2e 6b 65  79 63 68 6b 0d 18 c4 0a  |......keychk....|
00002f10  45 51 55 44 20 30 0d 18  ce 04 0d 18 d8 08 2e 43  |EQUD 0.........C|
00002f20  4c 49 0d 18 e2 11 42 49  43 20 46 2c 46 2c 23 25  |LI....BIC F,F,#%|
00002f30  31 30 30 0d 18 ec 18 41  44 44 20 7a 70 63 2c 7a  |100....ADD zpc,z|
00002f40  70 63 2c 23 31 20 3c 3c  20 31 36 0d 18 f6 12 4c  |pc,#1 << 16....L|
00002f50  44 52 42 20 52 30 2c 6b  65 79 63 68 6b 0d 19 00  |DRB R0,keychk...|
00002f60  0d 43 4d 50 20 52 30 2c  23 30 0d 19 0a 11 42 4c  |.CMP R0,#0....BL|
00002f70  45 51 20 6b 65 79 62 6f  61 72 64 0d 19 14 10 3b  |EQ keyboard....;|
00002f80  42 4c 20 6b 65 79 62 6f  61 72 64 0d 19 1e 10 a4  |BL keyboard.....|
00002f90  66 65 74 63 68 33 28 30  2c 32 29 0d 19 28 04 0d  |fetch3(0,2)..(..|
00002fa0  19 32 04 0d 19 3c 04 0d  19 46 0b 2e 66 65 74 63  |.2...<...F..fetc|
00002fb0  68 32 0d 19 50 04 0d 19  5a 15 4c 44 52 20 52 30  |h2..P...Z.LDR R0|
00002fc0  2c 5b 6d 65 6d 2c 23 6d  69 6e 5d 0d 19 64 12 53  |,[mem,#min]..d.S|
00002fd0  55 42 20 52 30 2c 52 30  2c 74 69 6d 65 0d 19 6e  |UB R0,R0,time..n|
00002fe0  1d 4c 44 52 20 52 31 2c  5b 6d 65 6d 2c 23 73 6f  |.LDR R1,[mem,#so|
00002ff0  75 6e 64 5f 74 69 6d 65  72 5d 0d 19 78 10 53 55  |und_timer]..x.SU|
00003000  42 20 52 31 2c 52 31 2c  52 30 0d 19 82 1d 53 54  |B R1,R1,R0....ST|
00003010  52 20 52 31 2c 5b 6d 65  6d 2c 23 73 6f 75 6e 64  |R R1,[mem,#sound|
00003020  5f 74 69 6d 65 72 5d 0d  19 8c 04 0d 19 96 04 0d  |_timer].........|
00003030  19 a0 1d 4d 4f 56 20 52  30 2c 23 30 20 3a 20 53  |...MOV R0,#0 : S|
00003040  54 52 20 52 30 2c 6b 65  79 63 68 6b 0d 19 aa 15  |TR R0,keychk....|
00003050  4c 44 52 20 52 30 2c 5b  6d 65 6d 2c 23 6d 69 6e  |LDR R0,[mem,#min|
00003060  5d 0d 19 b4 18 53 55 42  20 52 30 2c 52 30 2c 74  |]....SUB R0,R0,t|
00003070  69 6d 65 20 3b 20 2a 2a  2a 0d 19 be 18 4c 44 52  |ime ; ***....LDR|
00003080  20 52 31 2c 5b 6d 65 6d  2c 23 73 63 72 65 65 6e  | R1,[mem,#screen|
00003090  5d 0d 19 c8 11 53 55 42  53 20 52 31 2c 52 31 2c  |]....SUBS R1,R1,|
000030a0  52 30 0d 19 d2 1a 53 54  52 47 54 20 52 31 2c 5b  |R0....STRGT R1,[|
000030b0  6d 65 6d 2c 23 73 63 72  65 65 6e 5d 0d 19 dc 0e  |mem,#screen]....|
000030c0  42 4c 4c 45 20 76 73 79  6e 63 0d 19 e6 04 0d 19  |BLLE vsync......|
000030d0  f0 15 4c 44 52 20 52 30  2c 5b 6d 65 6d 2c 23 6d  |..LDR R0,[mem,#m|
000030e0  69 6e 5d 0d 19 fa 18 53  55 42 20 52 30 2c 52 30  |in]....SUB R0,R0|
000030f0  2c 74 69 6d 65 20 3b 20  2a 2a 2a 0d 1a 04 10 4c  |,time ; ***....L|
00003100  44 52 20 52 31 2c 73 70  65 65 64 0d 1a 0e 11 53  |DR R1,speed....S|
00003110  55 42 53 20 52 31 2c 52  31 2c 52 30 0d 1a 18 12  |UBS R1,R1,R0....|
00003120  53 54 52 47 54 20 52 31  2c 73 70 65 65 64 0d 1a  |STRGT R1,speed..|
00003130  22 16 42 4c 4c 45 20 73  70 65 65 64 5f 63 6f 6e  |".BLLE speed_con|
00003140  74 72 6f 6c 0d 1a 2c 04  0d 1a 36 1a 3b 20 4c 44  |trol..,...6.; LD|
00003150  52 20 52 30 2c 5b 6d 65  6d 2c 23 54 31 6d 6f 64  |R R0,[mem,#T1mod|
00003160  65 5d 0d 1a 40 10 3b 20  54 53 54 20 52 30 2c 23  |e]..@.; TST R0,#|
00003170  25 31 0d 1a 4a 15 3b 20  42 45 51 20 73 6b 69 70  |%1..J.; BEQ skip|
00003180  5f 74 69 6d 65 72 31 0d  1a 54 04 0d 1a 5e 15 4c  |_timer1..T...^.L|
00003190  44 52 20 52 30 2c 5b 6d  65 6d 2c 23 6d 69 6e 5d  |DR R0,[mem,#min]|
000031a0  0d 1a 68 18 53 55 42 20  52 30 2c 52 30 2c 74 69  |..h.SUB R0,R0,ti|
000031b0  6d 65 20 3b 20 2a 2a 2a  0d 1a 72 14 4c 44 52 20  |me ; ***..r.LDR |
000031c0  52 31 2c 5b 6d 65 6d 2c  23 54 31 5d 0d 1a 7c 18  |R1,[mem,#T1]..|.|
000031d0  53 55 42 53 20 52 31 2c  52 31 2c 52 30 2c 4c 53  |SUBS R1,R1,R0,LS|
000031e0  4c 23 31 35 0d 1a 86 16  53 54 52 47 54 20 52 31  |L#15....STRGT R1|
000031f0  2c 5b 6d 65 6d 2c 23 54  31 5d 0d 1a 90 0f 42 4c  |,[mem,#T1]....BL|
00003200  4c 45 20 74 69 6d 65 72  31 0d 1a 9a 10 2e 73 6b  |LE timer1.....sk|
00003210  69 70 5f 74 69 6d 65 72  31 0d 1a a4 04 0d 1a ae  |ip_timer1.......|
00003220  1a 3b 20 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |.; LDR R0,[mem,#|
00003230  54 32 6d 6f 64 65 5d 0d  1a b8 10 3b 20 54 53 54  |T2mode]....; TST|
00003240  20 52 30 2c 23 25 31 0d  1a c2 15 3b 20 42 45 51  | R0,#%1....; BEQ|
00003250  20 73 6b 69 70 5f 74 69  6d 65 72 32 0d 1a cc 04  | skip_timer2....|
00003260  0d 1a d6 15 4c 44 52 20  52 30 2c 5b 6d 65 6d 2c  |....LDR R0,[mem,|
00003270  23 6d 69 6e 5d 0d 1a e0  18 53 55 42 20 52 30 2c  |#min]....SUB R0,|
00003280  52 30 2c 74 69 6d 65 20  3b 20 2a 2a 2a 0d 1a ea  |R0,time ; ***...|
00003290  14 4c 44 52 20 52 31 2c  5b 6d 65 6d 2c 23 54 32  |.LDR R1,[mem,#T2|
000032a0  5d 0d 1a f4 18 53 55 42  53 20 52 31 2c 52 31 2c  |]....SUBS R1,R1,|
000032b0  52 30 2c 4c 53 4c 23 31  35 0d 1a fe 14 53 54 52  |R0,LSL#15....STR|
000032c0  20 52 31 2c 5b 6d 65 6d  2c 23 54 32 5d 0d 1b 08  | R1,[mem,#T2]...|
000032d0  0f 42 4c 4c 45 20 74 69  6d 65 72 32 0d 1b 12 10  |.BLLE timer2....|
000032e0  2e 73 6b 69 70 5f 74 69  6d 65 72 32 0d 1b 1c 04  |.skip_timer2....|
000032f0  0d 1b 26 1a 3b 20 4c 44  52 20 52 30 2c 5b 6d 65  |..&.; LDR R0,[me|
00003300  6d 2c 23 54 33 6d 6f 64  65 5d 0d 1b 30 10 3b 20  |m,#T3mode]..0.; |
00003310  54 53 54 20 52 30 2c 23  25 31 0d 1b 3a 15 3b 20  |TST R0,#%1..:.; |
00003320  42 45 51 20 73 6b 69 70  5f 74 69 6d 65 72 33 0d  |BEQ skip_timer3.|
00003330  1b 44 04 0d 1b 4e 15 4c  44 52 20 52 30 2c 5b 6d  |.D...N.LDR R0,[m|
00003340  65 6d 2c 23 6d 69 6e 5d  0d 1b 58 18 53 55 42 20  |em,#min]..X.SUB |
00003350  52 30 2c 52 30 2c 74 69  6d 65 20 3b 20 2a 2a 2a  |R0,R0,time ; ***|
00003360  0d 1b 62 14 4c 44 52 20  52 31 2c 5b 6d 65 6d 2c  |..b.LDR R1,[mem,|
00003370  23 54 33 5d 0d 1b 6c 18  53 55 42 53 20 52 31 2c  |#T3]..l.SUBS R1,|
00003380  52 31 2c 52 30 2c 4c 53  4c 23 31 35 0d 1b 76 16  |R1,R0,LSL#15..v.|
00003390  53 54 52 47 54 20 52 31  2c 5b 6d 65 6d 2c 23 54  |STRGT R1,[mem,#T|
000033a0  33 5d 0d 1b 80 0f 42 4c  4c 45 20 74 69 6d 65 72  |3]....BLLE timer|
000033b0  33 0d 1b 8a 10 2e 73 6b  69 70 5f 74 69 6d 65 72  |3.....skip_timer|
000033c0  33 0d 1b 94 04 0d 1b 9e  1a 3b 20 4c 44 52 20 52  |3........; LDR R|
000033d0  30 2c 5b 6d 65 6d 2c 23  54 34 6d 6f 64 65 5d 0d  |0,[mem,#T4mode].|
000033e0  1b a8 10 3b 20 54 53 54  20 52 30 2c 23 25 31 0d  |...; TST R0,#%1.|
000033f0  1b b2 16 3b 20 4d 56 4e  45 51 20 52 31 2c 23 30  |...; MVNEQ R1,#0|
00003400  20 3b 20 2d 31 0d 1b bc  11 3b 20 53 54 52 45 51  | ; -1....; STREQ|
00003410  20 52 31 2c 54 34 0d 1b  c6 15 3b 20 42 45 51 20  | R1,T4....; BEQ |
00003420  73 6b 69 70 5f 74 69 6d  65 72 34 0d 1b d0 04 0d  |skip_timer4.....|
00003430  1b da 15 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |...LDR R0,[mem,#|
00003440  6d 69 6e 5d 0d 1b e4 18  53 55 42 20 52 30 2c 52  |min]....SUB R0,R|
00003450  30 2c 74 69 6d 65 20 3b  20 2a 2a 2a 0d 1b ee 14  |0,time ; ***....|
00003460  4c 44 52 20 52 31 2c 5b  6d 65 6d 2c 23 54 34 5d  |LDR R1,[mem,#T4]|
00003470  0d 1b f8 18 53 55 42 53  20 52 31 2c 52 31 2c 52  |....SUBS R1,R1,R|
00003480  30 2c 4c 53 4c 23 31 35  0d 1c 02 14 53 54 52 20  |0,LSL#15....STR |
00003490  52 31 2c 5b 6d 65 6d 2c  23 54 34 5d 0d 1c 0c 0f  |R1,[mem,#T4]....|
000034a0  42 4c 4c 45 20 74 69 6d  65 72 34 0d 1c 16 10 2e  |BLLE timer4.....|
000034b0  73 6b 69 70 5f 74 69 6d  65 72 34 0d 1c 20 04 0d  |skip_timer4.. ..|
000034c0  1c 2a 15 4c 44 52 20 52  30 2c 5b 6d 65 6d 2c 23  |.*.LDR R0,[mem,#|
000034d0  6d 69 6e 5d 0d 1c 34 12  53 55 42 20 52 30 2c 52  |min]..4.SUB R0,R|
000034e0  30 2c 74 69 6d 65 0d 1c  3e 1c 4c 44 52 20 52 31  |0,time..>.LDR R1|
000034f0  2c 5b 6d 65 6d 2c 23 74  61 70 65 5f 63 6f 75 6e  |,[mem,#tape_coun|
00003500  74 5d 0d 1c 48 11 53 55  42 53 20 52 31 2c 52 31  |t]..H.SUBS R1,R1|
00003510  2c 52 30 0d 1c 52 1e 53  54 52 47 54 20 52 31 2c  |,R0..R.STRGT R1,|
00003520  5b 6d 65 6d 2c 23 74 61  70 65 5f 63 6f 75 6e 74  |[mem,#tape_count|
00003530  5d 0d 1c 5c 13 42 4c 4c  45 20 74 61 70 65 5f 66  |]..\.BLLE tape_f|
00003540  65 74 63 68 0d 1c 66 04  0d 1c 70 16 4c 44 52 42  |etch..f...p.LDRB|
00003550  20 52 31 2c 5b 6d 65 6d  2c 23 69 66 72 5d 0d 1c  | R1,[mem,#ifr]..|
00003560  7a 17 4c 44 52 42 20 52  32 2c 5b 6d 65 6d 2c 23  |z.LDRB R2,[mem,#|
00003570  69 66 72 32 5d 0d 1c 84  25 4c 44 52 42 20 52 31  |ifr2]...%LDRB R1|
00003580  32 2c 5b 6d 65 6d 2c 23  69 65 72 5d 20 3a 20 80  |2,[mem,#ier] : .|
00003590  20 52 31 2c 52 31 2c 52  31 32 0d 1c 8e 25 4c 44  | R1,R1,R12...%LD|
000035a0  52 42 20 52 31 32 2c 5b  6d 65 6d 2c 23 69 65 72  |RB R12,[mem,#ier|
000035b0  32 5d 3a 20 80 20 52 32  2c 52 32 2c 52 31 32 0d  |2]: . R2,R2,R12.|
000035c0  1c 98 25 3b 42 49 43 20  52 31 2c 52 31 2c 23 26  |..%;BIC R1,R1,#&|
000035d0  38 30 20 3a 20 3b 42 49  43 20 52 32 2c 52 32 2c  |80 : ;BIC R2,R2,|
000035e0  23 26 38 30 0d 1c a2 04  0d 1c ac 04 0d 1c b6 17  |#&80............|
000035f0  3b 4c 44 52 42 20 52 30  2c 5b 6d 65 6d 2c 23 69  |;LDRB R0,[mem,#i|
00003600  65 72 5d 0d 1c c0 2e 3b  42 49 43 20 52 30 2c 52  |er]....;BIC R0,R|
00003610  30 2c 23 25 31 20 3b 20  69 67 6e 6f 72 65 20 6b  |0,#%1 ; ignore k|
00003620  65 79 62 6f 61 72 64 20  69 6e 74 65 72 72 75 70  |eyboard interrup|
00003630  74 0d 1c ca 10 3b 80 53  20 52 30 2c 52 30 2c 52  |t....;.S R0,R0,R|
00003640  31 0d 1c d4 14 3b 84 52  4e 45 20 52 31 2c 52 31  |1....;.RNE R1,R1|
00003650  2c 23 26 38 30 0d 1c de  18 3b 4c 44 52 42 20 52  |,#&80....;LDRB R|
00003660  30 2c 5b 6d 65 6d 2c 23  69 65 72 32 5d 0d 1c e8  |0,[mem,#ier2]...|
00003670  10 3b 80 53 20 52 30 2c  52 30 2c 52 32 0d 1c f2  |.;.S R0,R0,R2...|
00003680  14 3b 84 52 4e 45 20 52  32 2c 52 32 2c 23 26 38  |.;.RNE R2,R2,#&8|
00003690  30 0d 1c fc 04 0d 1d 06  0f 54 53 54 20 46 2c 23  |0........TST F,#|
000036a0  25 31 30 30 0d 1d 10 19  42 4e 45 20 73 6b 69 70  |%100....BNE skip|
000036b0  5f 64 6f 5f 69 6e 74 65  72 72 75 70 74 0d 1d 1a  |_do_interrupt...|
000036c0  10 3b 54 53 54 20 52 31  2c 23 26 38 30 0d 1d 24  |.;TST R1,#&80..$|
000036d0  12 3b 54 53 54 45 51 20  52 32 2c 23 26 38 30 0d  |.;TSTEQ R2,#&80.|
000036e0  1d 2e 17 80 53 20 52 31  2c 52 31 2c 23 25 30 31  |....S R1,R1,#%01|
000036f0  31 31 31 31 31 31 0d 1d  38 19 80 45 51 53 20 52  |111111..8..EQS R|
00003700  32 2c 52 32 2c 23 25 30  31 31 31 31 31 31 31 0d  |2,R2,#%01111111.|
00003710  1d 42 19 42 45 51 20 73  6b 69 70 5f 64 6f 5f 69  |.B.BEQ skip_do_i|
00003720  6e 74 65 72 72 75 70 74  0d 1d 4c 0f 3b 43 4d 50  |nterrupt..L.;CMP|
00003730  20 52 31 33 2c 23 31 0d  1d 56 1a 3b 42 4e 45 20  | R13,#1..V.;BNE |
00003740  73 6b 69 70 5f 64 6f 5f  69 6e 74 65 72 72 75 70  |skip_do_interrup|
00003750  74 0d 1d 60 04 0d 1d 6a  11 2e 64 6f 5f 69 6e 74  |t..`...j..do_int|
00003760  65 72 72 75 70 74 0d 1d  74 11 a4 64 6f 5f 69 6e  |errupt..t..do_in|
00003770  74 65 72 72 75 70 74 0d  1d 7e 04 0d 1d 88 16 2e  |terrupt..~......|
00003780  73 6b 69 70 5f 64 6f 5f  69 6e 74 65 72 72 75 70  |skip_do_interrup|
00003790  74 0d 1d 92 04 0d 1d 9c  1c 3b 42 4c 20 6b 65 79  |t........;BL key|
000037a0  62 6f 61 72 64 20 ec 44  20 b8 20 43 4c 49 21 21  |board .D . CLI!!|
000037b0  21 0d 1d a6 0c 42 4c 20  6b 65 79 73 32 0d 1d b0  |!....BL keys2...|
000037c0  0e 2e 73 6b 69 70 5f 6b  65 79 73 0d 1d ba 16 4c  |..skip_keys....L|
000037d0  44 52 20 74 69 6d 65 2c  5b 6d 65 6d 2c 23 54 31  |DR time,[mem,#T1|
000037e0  5d 0d 1d c4 18 4d 4f 56  20 74 69 6d 65 2c 74 69  |]....MOV time,ti|
000037f0  6d 65 2c 4c 53 52 23 31  35 0d 1d ce 18 4c 44 52  |me,LSR#15....LDR|
00003800  20 52 31 2c 5b 6d 65 6d  2c 23 73 63 72 65 65 6e  | R1,[mem,#screen|
00003810  5d 0d 1d d8 1a 43 4d 50  20 52 31 2c 23 30 20 3a  |]....CMP R1,#0 :|
00003820  20 ec 51 20 52 31 2c 74  69 6d 65 0d 1d e2 0f 43  | .Q R1,time....C|
00003830  4d 50 20 52 31 2c 74 69  6d 65 0d 1d ec 11 4d 4f  |MP R1,time....MO|
00003840  56 4c 54 20 74 69 6d 65  2c 52 31 0d 1d f6 19 4c  |VLT time,R1....L|
00003850  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 54 32 6d  |DRB R1,[mem,#T2m|
00003860  6f 64 65 5d 0d 1e 00 0d  43 4d 50 20 52 31 2c 23  |ode]....CMP R1,#|
00003870  30 0d 1e 0a 0e 42 45 51  20 73 6b 69 70 54 32 0d  |0....BEQ skipT2.|
00003880  1e 14 14 4c 44 52 20 52  31 2c 5b 6d 65 6d 2c 23  |...LDR R1,[mem,#|
00003890  54 32 5d 0d 1e 1e 04 0d  1e 28 08 3b 52 4a 57 0d  |T2]......(.;RJW.|
000038a0  1e 32 15 4d 4f 56 53 20  52 31 2c 52 31 2c 4c 53  |.2.MOVS R1,R1,LS|
000038b0  52 23 31 35 0d 1e 3c 0e  ec 51 20 52 31 2c 74 69  |R#15..<..Q R1,ti|
000038c0  6d 65 0d 1e 46 0f 43 4d  50 20 52 31 2c 74 69 6d  |me..F.CMP R1,tim|
000038d0  65 0d 1e 50 11 4d 4f 56  4c 54 20 74 69 6d 65 2c  |e..P.MOVLT time,|
000038e0  52 31 0d 1e 5a 0b 2e 73  6b 69 70 54 32 0d 1e 64  |R1..Z..skipT2..d|
000038f0  14 4c 44 52 20 52 31 2c  5b 6d 65 6d 2c 23 54 33  |.LDR R1,[mem,#T3|
00003900  5d 0d 1e 6e 15 4d 4f 56  53 20 52 31 2c 52 31 2c  |]..n.MOVS R1,R1,|
00003910  4c 53 52 23 31 35 0d 1e  78 04 0d 1e 82 09 3b 20  |LSR#15..x.....; |
00003920  52 4a 57 0d 1e 8c 0e ec  51 20 52 31 2c 74 69 6d  |RJW.....Q R1,tim|
00003930  65 0d 1e 96 0f 43 4d 50  20 52 31 2c 74 69 6d 65  |e....CMP R1,time|
00003940  0d 1e a0 11 4d 4f 56 4c  54 20 74 69 6d 65 2c 52  |....MOVLT time,R|
00003950  31 0d 1e aa 19 4c 44 52  42 20 52 31 2c 5b 6d 65  |1....LDRB R1,[me|
00003960  6d 2c 23 54 34 6d 6f 64  65 5d 0d 1e b4 0d 43 4d  |m,#T4mode]....CM|
00003970  50 20 52 31 2c 23 30 0d  1e be 0e 42 45 51 20 73  |P R1,#0....BEQ s|
00003980  6b 69 70 54 34 0d 1e c8  14 4c 44 52 20 52 31 2c  |kipT4....LDR R1,|
00003990  5b 6d 65 6d 2c 23 54 34  5d 0d 1e d2 04 0d 1e dc  |[mem,#T4].......|
000039a0  09 3b 20 52 4a 57 0d 1e  e6 15 4d 4f 56 53 20 52  |.; RJW....MOVS R|
000039b0  31 2c 52 31 2c 4c 53 52  23 31 35 0d 1e f0 0e ec  |1,R1,LSR#15.....|
000039c0  51 20 52 31 2c 74 69 6d  65 0d 1e fa 0f 43 4d 50  |Q R1,time....CMP|
000039d0  20 52 31 2c 74 69 6d 65  0d 1f 04 11 4d 4f 56 4c  | R1,time....MOVL|
000039e0  54 20 74 69 6d 65 2c 52  31 0d 1f 0e 0b 2e 73 6b  |T time,R1.....sk|
000039f0  69 70 54 34 0d 1f 18 1e  3b 43 4d 50 20 74 69 6d  |ipT4....;CMP tim|
00003a00  65 2c 23 30 20 3a 20 3b  ec 51 20 74 69 6d 65 2c  |e,#0 : ;.Q time,|
00003a10  23 31 0d 1f 22 14 53 55  42 20 74 69 6d 65 2c 74  |#1..".SUB time,t|
00003a20  69 6d 65 2c 23 34 0d 1f  2c 17 53 54 52 20 74 69  |ime,#4..,.STR ti|
00003a30  6d 65 2c 5b 6d 65 6d 2c  23 6d 69 6e 5d 0d 1f 36  |me,[mem,#min]..6|
00003a40  0b a4 66 65 74 63 68 32  0d 1f 40 04 0d 1f 4a 0e  |..fetch2..@...J.|
00003a50  2e 69 6e 74 65 72 72 75  70 74 0d 1f 54 04 0d 1f  |.interrupt..T...|
00003a60  5e 0f 54 53 54 20 46 2c  23 25 31 30 30 0d 1f 68  |^.TST F,#%100..h|
00003a70  10 4d 4f 56 4e 45 20 50  43 2c 52 31 34 0d 1f 72  |.MOVNE PC,R14..r|
00003a80  04 0d 1f 7c 16 4c 44 52  42 20 52 31 2c 5b 6d 65  |...|.LDRB R1,[me|
00003a90  6d 2c 23 69 66 72 5d 0d  1f 86 17 4c 44 52 42 20  |m,#ifr]....LDRB |
00003aa0  52 32 2c 5b 6d 65 6d 2c  23 69 66 72 32 5d 0d 1f  |R2,[mem,#ifr2]..|
00003ab0  90 25 4c 44 52 42 20 52  31 32 2c 5b 6d 65 6d 2c  |.%LDRB R12,[mem,|
00003ac0  23 69 65 72 5d 20 3a 20  80 20 52 31 2c 52 31 2c  |#ier] : . R1,R1,|
00003ad0  52 31 32 0d 1f 9a 25 4c  44 52 42 20 52 31 32 2c  |R12...%LDRB R12,|
00003ae0  5b 6d 65 6d 2c 23 69 65  72 32 5d 3a 20 80 20 52  |[mem,#ier2]: . R|
00003af0  32 2c 52 32 2c 52 31 32  0d 1f a4 04 0d 1f ae 17  |2,R2,R12........|
00003b00  80 53 20 52 31 2c 52 31  2c 23 25 30 31 31 31 31  |.S R1,R1,#%01111|
00003b10  31 31 31 0d 1f b8 19 80  45 51 53 20 52 32 2c 52  |111.....EQS R2,R|
00003b20  32 2c 23 25 30 31 31 31  31 31 31 31 0d 1f c2 0d  |2,#%01111111....|
00003b30  ec 51 20 50 43 2c 52 31  34 0d 1f cc 04 0d 1f d6  |.Q PC,R14.......|
00003b40  11 a4 64 6f 5f 69 6e 74  65 72 72 75 70 74 0d 1f  |..do_interrupt..|
00003b50  e0 04 0d 1f ea 0e 4d 4f  56 20 50 43 2c 52 31 34  |......MOV PC,R14|
00003b60  0d 1f f4 04 0d 1f fe 0c  2e 46 31 30 74 65 6d 70  |.........F10temp|
00003b70  0d 20 08 0a 45 51 55 44  20 30 0d 20 12 04 0d 20  |. ..EQUD 0. ... |
00003b80  1c 08 2e 46 31 30 0d 20  26 17 53 57 49 20 22 36  |...F10. &.SWI "6|
00003b90  35 30 32 5f 47 65 74 6b  64 61 74 61 22 0d 20 30  |502_Getkdata". 0|
00003ba0  13 53 54 52 20 52 31 34  2c 46 31 30 74 65 6d 70  |.STR R14,F10temp|
00003bb0  0d 20 3a 0f 4d 4f 56 20  52 30 2c 23 32 35 35 0d  |. :.MOV R0,#255.|
00003bc0  20 44 1b 53 54 52 42 20  52 30 2c 5b 6d 65 6d 2c  | D.STRB R0,[mem,|
00003bd0  23 6c 61 73 74 6d 6f 64  65 5d 0d 20 4e 13 42 4c  |#lastmode]. N.BL|
00003be0  20 75 70 64 61 74 65 73  63 72 65 65 6e 0d 20 58  | updatescreen. X|
00003bf0  17 42 4c 20 66 6f 72 63  65 5f 75 70 64 61 74 65  |.BL force_update|
00003c00  5f 70 61 6c 0d 20 59 0d  42 4c 20 63 75 72 73 6f  |_pal. Y.BL curso|
00003c10  72 0d 20 62 12 4c 44 52  20 50 43 2c 46 31 30 74  |r. b.LDR PC,F10t|
00003c20  65 6d 70 0d 20 6c 04 0d  20 76 0c 3b 2e 66 65 74  |emp. l.. v.;.fet|
00003c30  63 68 33 0d 20 80 0a 2e  6b 65 79 73 32 0d 20 8a  |ch3. ...keys2. .|
00003c40  1a 3b 53 57 49 20 22 36  35 30 32 5f 43 68 65 63  |.;SWI "6502_Chec|
00003c50  6b 6b 64 61 74 61 22 0d  20 94 1a 4c 44 52 20 52  |kkdata". ..LDR R|
00003c60  30 2c 5b 6d 65 6d 2c 23  6b 65 79 5f 61 64 64 72  |0,[mem,#key_addr|
00003c70  5d 0d 20 9e 14 4c 44 52  42 20 52 30 2c 5b 52 30  |]. ..LDRB R0,[R0|
00003c80  2c 23 2d 34 5d 0d 20 a8  04 0d 20 b2 04 0d 20 bc  |,#-4]. ... ... .|
00003c90  18 43 4d 50 20 52 30 2c  23 26 31 46 20 3b 20 49  |.CMP R0,#&1F ; I|
00003ca0  6e 73 65 72 74 0d 20 c6  0c ec 51 20 52 31 2c 23  |nsert. ...Q R1,#|
00003cb0  31 0d 20 d0 13 53 54 52  45 51 20 52 31 2c 74 72  |1. ..STREQ R1,tr|
00003cc0  61 63 65 32 0d 20 da 14  43 4d 50 20 52 30 2c 23  |ace2. ..CMP R0,#|
00003cd0  31 30 20 3b 20 46 31 30  0d 20 e4 0b 42 45 51 20  |10 ; F10. ..BEQ |
00003ce0  46 31 30 0d 20 ee 14 43  4d 50 20 52 30 2c 23 31  |F10. ..CMP R0,#1|
00003cf0  31 20 3b 20 46 31 31 0d  20 f8 16 43 4d 50 4e 45  |1 ; F11. ..CMPNE|
00003d00  20 52 30 2c 23 31 32 20  3b 20 46 31 32 0d 21 02  | R0,#12 ; F12.!.|
00003d10  18 43 4d 50 4e 45 20 52  30 2c 23 31 35 20 3b 20  |.CMPNE R0,#15 ; |
00003d20  62 72 65 61 6b 0d 21 0c  11 42 45 51 20 72 61 77  |break.!..BEQ raw|
00003d30  5f 65 78 69 74 32 0d 21  16 0e 4d 4f 56 20 50 43  |_exit2.!..MOV PC|
00003d40  2c 52 31 34 0d 21 20 04  0d 21 2a 0d 2e 6b 65 79  |,R14.! ..!*..key|
00003d50  62 6f 61 72 64 0d 21 34  1d 4d 4f 56 20 52 30 2c  |board.!4.MOV R0,|
00003d60  23 31 20 3a 20 53 54 52  20 52 30 2c 6b 65 79 63  |#1 : STR R0,keyc|
00003d70  68 6b 0d 21 3e 04 0d 21  48 04 0d 21 52 1a 3b 53  |hk.!>..!H..!R.;S|
00003d80  57 49 20 22 36 35 30 32  5f 43 68 65 63 6b 6b 64  |WI "6502_Checkkd|
00003d90  61 74 61 22 0d 21 5c 1a  4c 44 52 20 52 30 2c 5b  |ata".!\.LDR R0,[|
00003da0  6d 65 6d 2c 23 6b 65 79  5f 61 64 64 72 5d 0d 21  |mem,#key_addr].!|
00003db0  66 14 4c 44 52 42 20 52  30 2c 5b 52 30 2c 23 2d  |f.LDRB R0,[R0,#-|
00003dc0  34 5d 0d 21 70 1b 43 4d  50 20 52 30 2c 23 26 46  |4].!p.CMP R0,#&F|
00003dd0  46 20 3a 20 ec 51 20 50  43 2c 52 31 34 0d 21 7a  |F : .Q PC,R14.!z|
00003de0  04 0d 21 84 04 0d 21 8e  17 53 57 49 20 22 36 35  |..!...!..SWI "65|
00003df0  30 32 5f 47 65 74 6b 64  61 74 61 22 0d 21 98 1d  |02_Getkdata".!..|
00003e00  3b 43 4d 50 20 52 30 2c  23 26 46 46 20 3a 20 3b  |;CMP R0,#&FF : ;|
00003e10  ec 51 20 50 43 2c 52 31  34 0d 21 a2 18 43 4d 50  |.Q PC,R14.!..CMP|
00003e20  20 52 30 2c 23 26 31 46  20 3b 20 49 6e 73 65 72  | R0,#&1F ; Inser|
00003e30  74 0d 21 ac 0c ec 51 20  52 31 2c 23 31 0d 21 b6  |t.!...Q R1,#1.!.|
00003e40  13 53 54 52 45 51 20 52  31 2c 74 72 61 63 65 32  |.STREQ R1,trace2|
00003e50  0d 21 c0 14 43 4d 50 20  52 30 2c 23 31 30 20 3b  |.!..CMP R0,#10 ;|
00003e60  20 46 31 30 0d 21 ca 0b  42 45 51 20 46 31 30 0d  | F10.!..BEQ F10.|
00003e70  21 d4 0e 43 4d 50 20 52  30 2c 23 31 35 0d 21 de  |!..CMP R0,#15.!.|
00003e80  10 43 4d 50 4e 45 20 52  30 2c 23 31 32 0d 21 e8  |.CMPNE R0,#12.!.|
00003e90  16 43 4d 50 4e 45 20 52  30 2c 23 31 31 20 3b 20  |.CMPNE R0,#11 ; |
00003ea0  46 31 31 0d 21 f2 10 42  45 51 20 72 61 77 5f 65  |F11.!..BEQ raw_e|
00003eb0  78 69 74 0d 21 fc 04 0d  22 06 17 3b 43 4d 50 20  |xit.!..."..;CMP |
00003ec0  52 30 2c 23 30 20 3b 20  65 73 63 61 70 65 0d 22  |R0,#0 ; escape."|
00003ed0  10 19 3b 4c 44 52 45 51  42 20 52 30 2c 5b 6d 65  |..;LDREQB R0,[me|
00003ee0  6d 2c 23 26 46 46 5d 0d  22 1a 14 3b 84 52 45 51  |m,#&FF]."..;.REQ|
00003ef0  20 52 30 2c 52 30 2c 23  26 38 30 0d 22 24 19 3b  | R0,R0,#&80."$.;|
00003f00  53 54 52 45 51 42 20 52  30 2c 5b 6d 65 6d 2c 23  |STREQB R0,[mem,#|
00003f10  26 46 46 5d 0d 22 2e 13  4c 44 52 42 20 52 30 2c  |&FF]."..LDRB R0,|
00003f20  5b 52 31 2c 52 30 5d 0d  22 38 0f 43 4d 50 20 52  |[R1,R0]."8.CMP R|
00003f30  30 2c 23 26 46 46 0d 22  42 15 3b 42 45 51 20 6e  |0,#&FF."B.;BEQ n|
00003f40  6f 74 5f 6b 65 79 62 6f  61 72 64 0d 22 4c 0d ec  |ot_keyboard."L..|
00003f50  51 20 50 43 2c 52 31 34  0d 22 56 04 0d 22 60 13  |Q PC,R14."V.."`.|
00003f60  3b 42 20 6e 6f 74 5f 6b  65 79 62 6f 61 72 64 0d  |;B not_keyboard.|
00003f70  22 6a 1c 43 4d 50 20 52  30 2c 23 31 30 20 3b 20  |"j.CMP R0,#10 ; |
00003f80  73 68 69 66 74 2c 20 63  74 72 6c 0d 22 74 10 4d  |shift, ctrl."t.M|
00003f90  4f 56 4c 54 20 50 43 2c  52 31 34 0d 22 7e 16 4c  |OVLT PC,R14."~.L|
00003fa0  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 69 66 72  |DRB R1,[mem,#ifr|
00003fb0  5d 0d 22 88 2d 84 52 20  52 31 2c 52 31 2c 23 25  |].".-.R R1,R1,#%|
00003fc0  31 20 3b 20 69 6e 74 65  72 72 75 70 74 20 69 73  |1 ; interrupt is|
00003fd0  20 66 72 6f 6d 20 6b 65  79 62 6f 61 72 64 0d 22  | from keyboard."|
00003fe0  92 16 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..STRB R1,[mem,#|
00003ff0  69 66 72 5d 0d 22 9c 16  4c 44 52 42 20 52 30 2c  |ifr]."..LDRB R0,|
00004000  5b 6d 65 6d 2c 23 69 65  72 5d 0d 22 a6 0e 54 53  |[mem,#ier]."..TS|
00004010  54 20 52 30 2c 23 25 31  0d 22 b0 0d ec 51 20 50  |T R0,#%1."...Q P|
00004020  43 2c 52 31 34 0d 22 ba  11 a4 64 6f 5f 69 6e 74  |C,R14."...do_int|
00004030  65 72 72 75 70 74 0d 22  c4 0e 4d 4f 56 20 50 43  |errupt."..MOV PC|
00004040  2c 52 31 34 0d 22 ce 04  0d 22 d8 04 0d 22 e2 12  |,R14."..."..."..|
00004050  3b 2e 6e 6f 5f 69 6e 74  65 72 72 75 70 74 0d 22  |;.no_interrupt."|
00004060  ec 13 3b 4c 44 52 42 20  52 30 2c 74 72 61 63 65  |..;LDRB R0,trace|
00004070  32 0d 22 f6 0e 3b 43 4d  50 20 52 30 2c 23 30 0d  |2."..;CMP R0,#0.|
00004080  23 00 11 3b 42 45 51 20  6e 6f 74 72 61 63 65 32  |#..;BEQ notrace2|
00004090  0d 23 0a 0e 3b a4 73 68  6f 77 72 65 67 73 0d 23  |.#..;.showregs.#|
000040a0  14 0e 3b 2e 6e 6f 74 72  61 63 65 32 0d 23 1e 0c  |..;.notrace2.#..|
000040b0  3b a4 66 65 74 63 68 32  0d 23 28 04 0d 23 32 12  |;.fetch2.#(..#2.|
000040c0  2e 64 65 66 69 6e 65 5f  63 75 72 73 6f 72 0d 23  |.define_cursor.#|
000040d0  3c 24 4d 4f 56 20 52 31  2c 23 30 20 3a 20 53 54  |<$MOV R1,#0 : ST|
000040e0  52 42 20 52 31 2c 63 75  72 73 6f 72 5f 73 74 61  |RB R1,cursor_sta|
000040f0  74 65 0d 23 46 13 2e 64  65 66 69 6e 65 5f 63 75  |te.#F..define_cu|
00004100  72 73 6f 72 32 0d 23 50  18 4c 44 52 42 20 52 31  |rsor2.#P.LDRB R1|
00004110  2c 63 75 72 73 6f 72 5f  73 74 61 74 65 0d 23 5a  |,cursor_state.#Z|
00004120  1a 43 4d 50 20 52 31 2c  23 30 3a 4d 4f 56 4e 45  |.CMP R1,#0:MOVNE|
00004130  20 50 43 2c 52 31 34 0d  23 64 04 0d 23 6e 2d 4c  | PC,R14.#d..#n-L|
00004140  44 52 42 20 52 31 2c 5b  6d 65 6d 2c 23 63 72 74  |DRB R1,[mem,#crt|
00004150  5f 72 65 67 73 2b 31 30  5d 20 3b 20 63 75 72 73  |_regs+10] ; curs|
00004160  6f 72 20 73 74 61 72 74  0d 23 78 04 0d 23 82 15  |or start.#x..#..|
00004170  82 20 52 31 32 2c 52 31  2c 23 25 31 30 30 30 30  |. R12,R1,#%10000|
00004180  30 0d 23 8c 15 54 53 54  20 52 31 32 2c 23 25 31  |0.#..TST R12,#%1|
00004190  31 30 30 30 30 30 0d 23  96 14 42 45 51 20 62 6c  |100000.#..BEQ bl|
000041a0  61 6e 6b 5f 63 75 72 73  6f 72 0d 23 a0 04 0d 23  |ank_cursor.#...#|
000041b0  aa 2b 4c 44 52 42 20 52  32 2c 5b 6d 65 6d 2c 23  |.+LDRB R2,[mem,#|
000041c0  63 72 74 5f 72 65 67 73  2b 31 31 5d 20 3b 20 63  |crt_regs+11] ; c|
000041d0  75 72 73 6f 72 20 65 6e  64 0d 23 b4 0f 80 20 52  |ursor end.#... R|
000041e0  31 2c 52 31 2c 23 33 31  0d 23 be 0f 80 20 52 32  |1,R1,#31.#... R2|
000041f0  2c 52 32 2c 23 33 31 0d  23 c8 04 0d 23 d2 12 53  |,R2,#31.#...#..S|
00004200  55 42 53 20 52 31 32 2c  52 32 2c 52 31 0d 23 dc  |UBS R12,R2,R1.#.|
00004210  14 42 4c 54 20 62 6c 61  6e 6b 5f 63 75 72 73 6f  |.BLT blank_curso|
00004220  72 0d 23 e6 04 0d 23 f0  04 0d 23 fa 18 4c 44 52  |r.#...#...#..LDR|
00004230  42 20 52 31 32 2c 5b 6d  65 6d 2c 23 66 65 32 30  |B R12,[mem,#fe20|
00004240  5d 0d 24 04 16 82 20 52  31 32 2c 52 31 32 2c 23  |].$... R12,R12,#|
00004250  25 31 30 30 30 30 30 0d  24 0e 04 0d 24 18 12 54  |%100000.$...$..T|
00004260  53 54 20 52 31 32 2c 23  25 31 30 30 30 0d 24 22  |ST R12,#%1000.$"|
00004270  16 ec 51 20 52 31 33 2c  23 32 20 3b 20 6d 6f 64  |..Q R13,#2 ; mod|
00004280  65 20 35 0d 24 2c 10 4d  4f 56 4e 45 20 52 31 33  |e 5.$,.MOVNE R13|
00004290  2c 23 31 0d 24 36 04 0d  24 40 0d 4d 4f 56 20 52  |,#1.$6..$@.MOV R|
000042a0  30 2c 23 31 0d 24 4a 15  4d 4f 56 20 52 30 2c 52  |0,#1.$J.MOV R0,R|
000042b0  30 2c 4c 53 4c 20 52 31  33 0d 24 54 16 54 53 54  |0,LSL R13.$T.TST|
000042c0  45 51 20 52 31 32 2c 23  25 31 30 30 30 30 30 0d  |EQ R12,#%100000.|
000042d0  24 5e 15 ec 51 20 52 30  2c 23 38 20 3b 20 6d 6f  |$^..Q R0,#8 ; mo|
000042e0  64 65 20 32 0d 24 68 0d  ec 51 20 52 31 33 2c 23  |de 2.$h..Q R13,#|
000042f0  33 0d 24 72 18 53 54 52  42 20 52 30 2c 63 75 72  |3.$r.STRB R0,cur|
00004300  73 6f 72 5f 77 69 64 74  68 0d 24 7c 04 0d 24 86  |sor_width.$|..$.|
00004310  1b 54 53 54 20 52 31 32  2c 23 25 31 30 20 3b 20  |.TST R12,#%10 ; |
00004320  74 65 6c 65 74 65 78 74  0d 24 90 10 4d 56 4e 4e  |teletext.$..MVNN|
00004330  45 20 52 31 32 2c 23 37  0d 24 9a 0d ec 51 20 52  |E R12,#7.$...Q R|
00004340  31 32 2c 23 31 0d 24 a4  04 0d 24 ae 11 41 44 44  |12,#1.$...$..ADD|
00004350  20 52 32 2c 52 32 2c 52  31 32 0d 24 b8 19 53 54  | R2,R2,R12.$..ST|
00004360  52 42 20 52 32 2c 63 75  72 73 6f 72 5f 68 65 69  |RB R2,cursor_hei|
00004370  67 68 74 0d 24 c2 04 0d  24 cc 0e 3b 4d 4f 56 20  |ght.$...$..;MOV |
00004380  52 30 2c 23 31 0d 24 d6  16 3b 4d 4f 56 20 52 30  |R0,#1.$..;MOV R0|
00004390  2c 52 30 2c 4c 53 4c 20  52 31 33 0d 24 e0 19 3b  |,R0,LSL R13.$..;|
000043a0  53 54 52 42 20 52 30 2c  63 75 72 73 6f 72 5f 77  |STRB R0,cursor_w|
000043b0  69 64 74 68 0d 24 ea 04  0d 24 f4 04 0d 24 fe 16  |idth.$...$...$..|
000043c0  41 44 52 20 52 30 2c 63  75 72 73 6f 72 5f 64 61  |ADR R0,cursor_da|
000043d0  74 61 0d 25 08 18 53 55  42 20 52 30 2c 52 30 2c  |ta.%..SUB R0,R0,|
000043e0  52 31 2c 4c 53 4c 20 52  31 33 0d 25 12 19 53 55  |R1,LSL R13.%..SU|
000043f0  42 20 52 30 2c 52 30 2c  52 31 32 2c 4c 53 4c 20  |B R0,R0,R12,LSL |
00004400  52 31 33 0d 25 1c 19 53  54 52 20 52 30 2c 63 75  |R13.%..STR R0,cu|
00004410  72 73 6f 72 5f 62 6c 6f  63 6b 2b 36 0d 25 26 04  |rsor_block+6.%&.|
00004420  0d 25 30 0e 4d 4f 56 20  52 30 2c 23 32 31 0d 25  |.%0.MOV R0,#21.%|
00004430  3a 17 41 44 52 20 52 31  2c 63 75 72 73 6f 72 5f  |:.ADR R1,cursor_|
00004440  62 6c 6f 63 6b 0d 25 44  11 53 57 49 20 22 4f 53  |block.%D.SWI "OS|
00004450  5f 57 6f 72 64 22 0d 25  4e 0f 4d 4f 56 53 20 50  |_Word".%N.MOVS P|
00004460  43 2c 52 31 34 0d 25 58  04 0d 25 62 11 2e 62 6c  |C,R14.%X..%b..bl|
00004470  61 6e 6b 5f 63 75 72 73  6f 72 0d 25 6c 24 4d 4f  |ank_cursor.%l$MO|
00004480  56 20 52 31 2c 23 31 20  3a 20 53 54 52 42 20 52  |V R1,#1 : STRB R|
00004490  31 2c 63 75 72 73 6f 72  5f 73 74 61 74 65 0d 25  |1,cursor_state.%|
000044a0  76 12 2e 62 6c 61 6e 6b  5f 63 75 72 73 6f 72 32  |v..blank_cursor2|
000044b0  0d 25 80 04 0d 25 8a 17  41 44 52 20 52 31 2c 63  |.%...%..ADR R1,c|
000044c0  75 72 73 6f 72 5f 62 6c  6f 63 6b 0d 25 94 15 41  |ursor_block.%..A|
000044d0  44 52 20 52 30 2c 62 6c  61 6e 6b 5f 64 61 74 61  |DR R0,blank_data|
000044e0  0d 25 9e 19 53 54 52 20  52 30 2c 63 75 72 73 6f  |.%..STR R0,curso|
000044f0  72 5f 62 6c 6f 63 6b 2b  36 0d 25 a8 0e 4d 4f 56  |r_block+6.%..MOV|
00004500  20 52 30 2c 23 32 31 0d  25 b2 11 53 57 49 20 22  | R0,#21.%..SWI "|
00004510  4f 53 5f 57 6f 72 64 22  0d 25 bc 0e 4d 4f 56 20  |OS_Word".%..MOV |
00004520  50 43 2c 52 31 34 0d 25  c6 04 0d 25 d0 11 2e 63  |PC,R14.%...%...c|
00004530  75 72 73 6f 72 5f 73 74  61 74 65 0d 25 da 0a 45  |ursor_state.%..E|
00004540  51 55 44 20 30 0d 25 e4  04 0d 25 ee 11 2e 63 75  |QUD 0.%...%...cu|
00004550  72 73 6f 72 5f 66 6c 61  73 68 0d 25 f8 0a 45 51  |rsor_flash.%..EQ|
00004560  55 44 20 30 0d 26 02 10  2e 66 6c 61 73 68 5f 73  |UD 0.&...flash_s|
00004570  74 61 74 65 0d 26 0c 0a  45 51 55 44 20 30 0d 26  |tate.&..EQUD 0.&|
00004580  16 04 0d 26 20 12 3b 2e  6e 6f 74 5f 6b 65 79 62  |...& .;.not_keyb|
00004590  6f 61 72 64 0d 26 2a 0a  45 51 55 57 20 30 0d 26  |oard.&*.EQUW 0.&|
000045a0  34 11 2e 63 75 72 73 6f  72 5f 62 6c 6f 63 6b 0d  |4..cursor_block.|
000045b0  26 3e 0a 45 51 55 42 20  30 0d 26 48 19 45 51 55  |&>.EQUB 0.&H.EQU|
000045c0  42 20 32 20 3b 20 73 68  61 70 65 20 6e 75 6d 62  |B 2 ; shape numb|
000045d0  65 72 0d 26 52 11 2e 63  75 72 73 6f 72 5f 77 69  |er.&R..cursor_wi|
000045e0  64 74 68 0d 26 5c 1b 45  51 55 42 20 32 20 3b 20  |dth.&\.EQUB 2 ; |
000045f0  77 69 64 74 68 20 69 6e  20 62 79 74 65 73 0d 26  |width in bytes.&|
00004600  66 12 2e 63 75 72 73 6f  72 5f 68 65 69 67 68 74  |f..cursor_height|
00004610  0d 26 70 1d 45 51 55 42  20 39 20 3b 20 68 65 69  |.&p.EQUB 9 ; hei|
00004620  67 68 74 20 69 6e 20 70  69 78 65 6c 73 0d 26 7a  |ght in pixels.&z|
00004630  0a 45 51 55 42 20 30 0d  26 84 0a 45 51 55 42 20  |.EQUB 0.&..EQUB |
00004640  30 0d 26 8e 1c 45 51 55  44 20 30 20 3b 20 61 64  |0.&..EQUD 0 ; ad|
00004650  64 72 65 73 73 20 6f 66  20 64 61 74 61 0d 26 98  |dress of data.&.|
00004660  04 0d 26 a2 04 0d 26 ac  09 41 4c 49 47 4e 0d 26  |..&...&..ALIGN.&|
00004670  b6 0f 2e 62 6c 61 6e 6b  5f 64 61 74 61 0d 26 c0  |...blank_data.&.|
00004680  0a 45 51 55 44 20 30 0d  26 ca 0a 45 51 55 44 20  |.EQUD 0.&..EQUD |
00004690  30 0d 26 d4 0a 45 51 55  44 20 30 0d 26 de 0a 45  |0.&..EQUD 0.&..E|
000046a0  51 55 44 20 30 0d 26 e8  0a 45 51 55 44 20 30 0d  |QUD 0.&..EQUD 0.|
000046b0  26 f2 0a 45 51 55 44 20  30 0d 26 fc 0a 45 51 55  |&..EQUD 0.&..EQU|
000046c0  44 20 30 0d 27 06 0a 45  51 55 44 20 30 0d 27 10  |D 0.'..EQUD 0.'.|
000046d0  0a 45 51 55 44 20 30 0d  27 1a 0a 45 51 55 44 20  |.EQUD 0.'..EQUD |
000046e0  30 0d 27 24 0a 45 51 55  44 20 30 0d 27 2e 0a 45  |0.'$.EQUD 0.'..E|
000046f0  51 55 44 20 30 0d 27 38  0a 45 51 55 44 20 30 0d  |QUD 0.'8.EQUD 0.|
00004700  27 42 0a 45 51 55 44 20  30 0d 27 4c 0a 45 51 55  |'B.EQUD 0.'L.EQU|
00004710  44 20 30 0d 27 56 0a 45  51 55 44 20 30 0d 27 60  |D 0.'V.EQUD 0.'`|
00004720  0a 45 51 55 44 20 30 0d  27 6a 0a 45 51 55 44 20  |.EQUD 0.'j.EQUD |
00004730  30 0d 27 74 0a 45 51 55  44 20 30 0d 27 7e 0a 45  |0.'t.EQUD 0.'~.E|
00004740  51 55 44 20 30 0d 27 88  0a 45 51 55 44 20 30 0d  |QUD 0.'..EQUD 0.|
00004750  27 92 0a 45 51 55 44 20  30 0d 27 9c 0a 45 51 55  |'..EQUD 0.'..EQU|
00004760  44 20 30 0d 27 a6 0a 45  51 55 44 20 30 0d 27 b0  |D 0.'..EQUD 0.'.|
00004770  0a 45 51 55 44 20 30 0d  27 ba 0a 45 51 55 44 20  |.EQUD 0.'..EQUD |
00004780  30 0d 27 c4 0a 45 51 55  44 20 30 0d 27 ce 0a 45  |0.'..EQUD 0.'..E|
00004790  51 55 44 20 30 0d 27 d8  0a 45 51 55 44 20 30 0d  |QUD 0.'..EQUD 0.|
000047a0  27 e2 0a 45 51 55 44 20  30 0d 27 ec 0a 45 51 55  |'..EQUD 0.'..EQU|
000047b0  44 20 30 0d 27 f6 0a 45  51 55 44 20 30 0d 28 00  |D 0.'..EQUD 0.(.|
000047c0  10 2e 63 75 72 73 6f 72  5f 64 61 74 61 0d 28 0a  |..cursor_data.(.|
000047d0  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
000047e0  28 14 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(..EQUD &FFFFFFF|
000047f0  46 0d 28 1e 12 45 51 55  44 20 26 46 46 46 46 46  |F.(..EQUD &FFFFF|
00004800  46 46 46 0d 28 28 12 45  51 55 44 20 26 46 46 46  |FFF.((.EQUD &FFF|
00004810  46 46 46 46 46 0d 28 32  12 45 51 55 44 20 26 46  |FFFFF.(2.EQUD &F|
00004820  46 46 46 46 46 46 46 0d  28 3c 12 45 51 55 44 20  |FFFFFFF.(<.EQUD |
00004830  26 46 46 46 46 46 46 46  46 0d 28 46 12 45 51 55  |&FFFFFFFF.(F.EQU|
00004840  44 20 26 46 46 46 46 46  46 46 46 0d 28 50 12 45  |D &FFFFFFFF.(P.E|
00004850  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 5a  |QUD &FFFFFFFF.(Z|
00004860  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004870  28 64 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(d.EQUD &FFFFFFF|
00004880  46 0d 28 6e 12 45 51 55  44 20 26 46 46 46 46 46  |F.(n.EQUD &FFFFF|
00004890  46 46 46 0d 28 78 12 45  51 55 44 20 26 46 46 46  |FFF.(x.EQUD &FFF|
000048a0  46 46 46 46 46 0d 28 82  12 45 51 55 44 20 26 46  |FFFFF.(..EQUD &F|
000048b0  46 46 46 46 46 46 46 0d  28 8c 12 45 51 55 44 20  |FFFFFFF.(..EQUD |
000048c0  26 46 46 46 46 46 46 46  46 0d 28 96 12 45 51 55  |&FFFFFFFF.(..EQU|
000048d0  44 20 26 46 46 46 46 46  46 46 46 0d 28 a0 12 45  |D &FFFFFFFF.(..E|
000048e0  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 aa  |QUD &FFFFFFFF.(.|
000048f0  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004900  28 b4 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |(..EQUD &FFFFFFF|
00004910  46 0d 28 be 12 45 51 55  44 20 26 46 46 46 46 46  |F.(..EQUD &FFFFF|
00004920  46 46 46 0d 28 c8 12 45  51 55 44 20 26 46 46 46  |FFF.(..EQUD &FFF|
00004930  46 46 46 46 46 0d 28 d2  12 45 51 55 44 20 26 46  |FFFFF.(..EQUD &F|
00004940  46 46 46 46 46 46 46 0d  28 dc 12 45 51 55 44 20  |FFFFFFF.(..EQUD |
00004950  26 46 46 46 46 46 46 46  46 0d 28 e6 12 45 51 55  |&FFFFFFFF.(..EQU|
00004960  44 20 26 46 46 46 46 46  46 46 46 0d 28 f0 12 45  |D &FFFFFFFF.(..E|
00004970  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 28 fa  |QUD &FFFFFFFF.(.|
00004980  12 45 51 55 44 20 26 46  46 46 46 46 46 46 46 0d  |.EQUD &FFFFFFFF.|
00004990  29 04 12 45 51 55 44 20  26 46 46 46 46 46 46 46  |)..EQUD &FFFFFFF|
000049a0  46 0d 29 0e 12 45 51 55  44 20 26 46 46 46 46 46  |F.)..EQUD &FFFFF|
000049b0  46 46 46 0d 29 18 12 45  51 55 44 20 26 46 46 46  |FFF.)..EQUD &FFF|
000049c0  46 46 46 46 46 0d 29 22  12 45 51 55 44 20 26 46  |FFFFF.)".EQUD &F|
000049d0  46 46 46 46 46 46 46 0d  29 2c 12 45 51 55 44 20  |FFFFFFF.),.EQUD |
000049e0  26 46 46 46 46 46 46 46  46 0d 29 36 12 45 51 55  |&FFFFFFFF.)6.EQU|
000049f0  44 20 26 46 46 46 46 46  46 46 46 0d 29 40 12 45  |D &FFFFFFFF.)@.E|
00004a00  51 55 44 20 26 46 46 46  46 46 46 46 46 0d 29 4a  |QUD &FFFFFFFF.)J|
00004a10  04 0d 29 54 0c 2e 63 75  72 73 6f 72 37 0d 29 5e  |..)T..cursor7.)^|
00004a20  04 0d 29 68 1e 4c 44 52  42 20 52 30 2c 5b 6d 65  |..)h.LDRB R0,[me|
00004a30  6d 2c 23 63 72 74 5f 72  65 67 73 2b 31 34 5d 0d  |m,#crt_regs+14].|
00004a40  29 72 1e 4c 44 52 42 20  52 31 2c 5b 6d 65 6d 2c  |)r.LDRB R1,[mem,|
00004a50  23 63 72 74 5f 72 65 67  73 2b 31 35 5d 0d 29 7c  |#crt_regs+15].)||
00004a60  16 41 44 44 20 52 30 2c  52 31 2c 52 30 2c 4c 53  |.ADD R0,R1,R0,LS|
00004a70  4c 23 38 0d 29 86 04 0d  29 90 30 4c 44 52 42 20  |L#8.)...).0LDRB |
00004a80  52 31 2c 5b 6d 65 6d 2c  23 63 72 74 5f 72 65 67  |R1,[mem,#crt_reg|
00004a90  73 2b 31 32 5d 20 3a 20  3b 80 20 52 31 2c 52 31  |s+12] : ;. R1,R1|
00004aa0  2c 23 25 31 31 31 31 0d  29 9a 1e 4c 44 52 42 20  |,#%1111.)..LDRB |
00004ab0  52 32 2c 5b 6d 65 6d 2c  23 63 72 74 5f 72 65 67  |R2,[mem,#crt_reg|
00004ac0  73 2b 31 33 5d 0d 29 a4  16 41 44 44 20 52 32 2c  |s+13].)..ADD R2,|
00004ad0  52 32 2c 52 31 2c 4c 53  4c 23 38 0d 29 ae 11 53  |R2,R1,LSL#8.)..S|
00004ae0  55 42 53 20 52 30 2c 52  30 2c 52 32 0d 29 b8 0f  |UBS R0,R0,R2.)..|
00004af0  4d 4f 56 4d 49 20 52 30  2c 23 30 0d 29 c2 04 0d  |MOVMI R0,#0.)...|
00004b00  29 cc 2e 3b 4c 44 52 42  20 52 31 32 2c 5b 6d 65  |)..;LDRB R12,[me|
00004b10  6d 2c 23 63 72 74 5f 72  65 67 73 2b 31 5d 20 3b  |m,#crt_regs+1] ;|
00004b20  20 68 6f 72 69 7a 2e 20  63 68 61 72 73 0d 29 d6  | horiz. chars.).|
00004b30  10 3b 4d 4f 56 20 52 31  32 2c 23 34 30 0d 29 e0  |.;MOV R12,#40.).|
00004b40  04 0d 29 ea 29 3b a4 64  69 76 6d 6f 64 28 30 2c  |..).);.divmod(0,|
00004b50  31 32 2c 31 2c 32 2c 31  33 29 20 3b 20 52 30 20  |12,1,2,13) ; R0 |
00004b60  3d 20 52 30 20 83 20 52  31 32 0d 29 f4 29 20 20  |= R0 . R12.).)  |
00004b70  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00004b80  20 20 20 20 3b 20 52 32  20 3d 20 52 30 20 81 20  |    ; R2 = R0 . |
00004b90  52 31 32 0d 29 fe 12 3b  52 53 42 20 52 32 2c 52  |R12.)..;RSB R2,R|
00004ba0  32 2c 23 32 35 0d 2a 08  14 3b 4d 4f 56 20 52 32  |2,#25.*..;MOV R2|
00004bb0  2c 52 32 2c 4c 53 4c 23  35 0d 2a 12 17 3b 41 44  |,R2,LSL#5.*..;AD|
00004bc0  44 20 52 32 2c 52 32 2c  52 32 2c 4c 53 52 23 32  |D R2,R2,R2,LSR#2|
00004bd0  0d 2a 1c 14 3b 4d 4f 56  20 52 30 2c 52 30 2c 4c  |.*..;MOV R0,R0,L|
00004be0  53 4c 23 35 0d 2a 26 18  3b 41 44 44 20 52 30 2c  |SL#5.*&.;ADD R0,|
00004bf0  52 30 2c 52 32 2c 4c 53  4c 23 31 36 0d 2a 30 1a  |R0,R2,LSL#16.*0.|
00004c00  3b 20 57 65 20 6b 6e 6f  77 20 74 68 61 74 20 52  |; We know that R|
00004c10  30 3c 31 30 30 30 0d 2a  3a 12 3b 20 52 30 20 3d  |0<1000.*:.; R0 =|
00004c20  20 52 30 20 83 20 34 30  0d 2a 44 12 3b 20 52 32  | R0 . 40.*D.; R2|
00004c30  20 3d 20 52 30 20 81 20  34 30 0d 2a 4e 19 3b a4  | = R0 . 40.*N.;.|
00004c40  64 69 76 6d 6f 64 28 30  2c 31 32 2c 31 2c 32 2c  |divmod(0,12,1,2,|
00004c50  31 33 29 0d 2a 58 21 4d  4f 56 20 52 32 2c 23 28  |13).*X!MOV R2,#(|
00004c60  28 32 35 3c 3c 35 29 2b  28 32 35 3c 3c 33 29 29  |(25<<5)+(25<<3))|
00004c70  3c 3c 31 36 0d 2a 62 0f  43 4d 50 20 52 30 2c 23  |<<16.*b.CMP R0,#|
00004c80  36 34 30 0d 2a 6c 14 53  55 42 47 45 20 52 30 2c  |640.*l.SUBGE R0,|
00004c90  52 30 2c 23 36 34 30 0d  2a 76 24 53 55 42 47 45  |R0,#640.*v$SUBGE|
00004ca0  20 52 32 2c 52 32 2c 23  28 28 31 3c 3c 39 29 2b  | R2,R2,#((1<<9)+|
00004cb0  28 31 3c 3c 37 29 29 3c  3c 31 36 0d 2a 80 0f 43  |(1<<7))<<16.*..C|
00004cc0  4d 50 20 52 30 2c 23 33  32 30 0d 2a 8a 14 53 55  |MP R0,#320.*..SU|
00004cd0  42 47 45 20 52 30 2c 52  30 2c 23 33 32 30 0d 2a  |BGE R0,R0,#320.*|
00004ce0  94 24 53 55 42 47 45 20  52 32 2c 52 32 2c 23 28  |.$SUBGE R2,R2,#(|
00004cf0  28 31 3c 3c 38 29 2b 28  31 3c 3c 36 29 29 3c 3c  |(1<<8)+(1<<6))<<|
00004d00  31 36 0d 2a 9e 0f 43 4d  50 20 52 30 2c 23 31 36  |16.*..CMP R0,#16|
00004d10  30 0d 2a a8 14 53 55 42  47 45 20 52 30 2c 52 30  |0.*..SUBGE R0,R0|
00004d20  2c 23 31 36 30 0d 2a b2  24 53 55 42 47 45 20 52  |,#160.*.$SUBGE R|
00004d30  32 2c 52 32 2c 23 28 28  31 3c 3c 37 29 2b 28 31  |2,R2,#((1<<7)+(1|
00004d40  3c 3c 35 29 29 3c 3c 31  36 0d 2a bc 0e 43 4d 50  |<<5))<<16.*..CMP|
00004d50  20 52 30 2c 23 38 30 0d  2a c6 13 53 55 42 47 45  | R0,#80.*..SUBGE|
00004d60  20 52 30 2c 52 30 2c 23  38 30 0d 2a d0 24 53 55  | R0,R0,#80.*.$SU|
00004d70  42 47 45 20 52 32 2c 52  32 2c 23 28 28 31 3c 3c  |BGE R2,R2,#((1<<|
00004d80  36 29 2b 28 31 3c 3c 34  29 29 3c 3c 31 36 0d 2a  |6)+(1<<4))<<16.*|
00004d90  da 0e 43 4d 50 20 52 30  2c 23 34 30 0d 2a e4 13  |..CMP R0,#40.*..|
00004da0  53 55 42 47 45 20 52 30  2c 52 30 2c 23 34 30 0d  |SUBGE R0,R0,#40.|
00004db0  2a ee 24 53 55 42 47 45  20 52 32 2c 52 32 2c 23  |*.$SUBGE R2,R2,#|
00004dc0  28 28 31 3c 3c 35 29 2b  28 31 3c 3c 33 29 29 3c  |((1<<5)+(1<<3))<|
00004dd0  3c 31 36 0d 2a f8 04 0d  2b 02 04 0d 2b 0c 16 41  |<16.*...+...+..A|
00004de0  44 44 20 52 30 2c 52 32  2c 52 30 2c 4c 53 4c 23  |DD R0,R2,R0,LSL#|
00004df0  35 0d 2b 16 1c 53 54 52  20 52 30 2c 6f 73 77 6f  |5.+..STR R0,oswo|
00004e00  72 64 32 31 5f 35 5f 62  6c 6f 63 6b 31 0d 2b 20  |rd21_5_block1.+ |
00004e10  1b 41 44 52 20 52 31 2c  6f 73 77 6f 72 64 32 31  |.ADR R1,osword21|
00004e20  5f 35 5f 62 6c 6f 63 6b  0d 2b 2a 0e 4d 4f 56 20  |_5_block.+*.MOV |
00004e30  52 30 2c 23 32 31 0d 2b  34 28 53 57 49 20 22 4f  |R0,#21.+4(SWI "O|
00004e40  53 5f 57 6f 72 64 22 20  3b 20 73 65 74 20 70 6f  |S_Word" ; set po|
00004e50  69 6e 74 65 72 20 70 6f  73 69 74 69 6f 6e 0d 2b  |inter position.+|
00004e60  3e 0f 3b 4d 4f 56 20 50  43 2c 52 31 34 0d 2b 3f  |>.;MOV PC,R14.+?|
00004e70  14 42 20 64 65 66 69 6e  65 5f 63 75 72 73 6f 72  |.B define_cursor|
00004e80  32 0d 2b 48 04 0d 2b 52  12 3b 42 20 63 75 72 73  |2.+H..+R.;B curs|
00004e90  6f 72 5f 63 6f 6e 74 0d  2b 5c 04 0d 2b 66 1c 2e  |or_cont.+\..+f..|
00004ea0  70 61 64 64 69 6e 67 5f  74 6f 5f 61 6c 69 67 6e  |padding_to_align|
00004eb0  5f 6f 73 77 6f 72 64 0d  2b 70 1c 45 51 55 42 20  |_osword.+p.EQUB |
00004ec0  30 20 3a 20 45 51 55 42  20 30 20 3a 20 45 51 55  |0 : EQUB 0 : EQU|
00004ed0  42 20 30 0d 2b 7a 15 2e  6f 73 77 6f 72 64 32 31  |B 0.+z..osword21|
00004ee0  5f 35 5f 62 6c 6f 63 6b  0d 2b 84 0a 45 51 55 42  |_5_block.+..EQUB|
00004ef0  20 35 0d 2b 8e 16 2e 6f  73 77 6f 72 64 32 31 5f  | 5.+...osword21_|
00004f00  35 5f 62 6c 6f 63 6b 31  0d 2b 98 0a 45 51 55 44  |5_block1.+..EQUD|
00004f10  20 30 0d 2b a2 04 0d 2b  ac 30 82 20 52 30 2c 52  | 0.+...+.0. R0,R|
00004f20  30 2c 23 26 32 30 20 3a  20 41 44 44 20 52 30 2c  |0,#&20 : ADD R0,|
00004f30  52 30 2c 23 26 37 34 20  3a 20 80 20 52 30 2c 52  |R0,#&74 : . R0,R|
00004f40  30 2c 23 26 46 46 0d 2b  b6 04 0d 2b c0 04 0d 2b  |0,#&FF.+...+...+|
00004f50  ca 0b 2e 63 75 72 73 6f  72 0d 2b d4 2b 4d 4f 56  |...cursor.+.+MOV|
00004f60  20 52 30 2c 23 30 20 3a  20 53 54 52 20 52 30 2c  | R0,#0 : STR R0,|
00004f70  5b 6d 65 6d 2c 23 63 75  72 73 6f 72 5f 74 61 6d  |[mem,#cursor_tam|
00004f80  70 65 72 5d 0d 2b de 04  0d 2b e8 1d 5c 4c 44 52  |per].+...+..\LDR|
00004f90  42 20 52 31 2c 5b 6d 65  6d 2c 23 63 75 72 73 6f  |B R1,[mem,#curso|
00004fa0  72 5f 6f 6e 5d 0d 2b f2  1c 5c 43 4d 50 20 52 31  |r_on].+..\CMP R1|
00004fb0  2c 23 30 3a 5c 4d 4f 56  4e 45 20 50 43 2c 52 31  |,#0:\MOVNE PC,R1|
00004fc0  34 0d 2b fc 1f 54 53 54  20 46 2c 23 31 20 3c 3c  |4.+..TST F,#1 <<|
00004fd0  20 31 30 20 3b 20 63 75  72 73 6f 72 20 6f 6e 3f  | 10 ; cursor on?|
00004fe0  0d 2c 06 0d ec 51 20 50  43 2c 52 31 34 0d 2c 10  |.,...Q PC,R14.,.|
00004ff0  04 0d 2c 1a 17 4c 44 52  42 20 52 30 2c 5b 6d 65  |..,..LDRB R0,[me|
00005000  6d 2c 23 66 65 32 30 5d  0d 2c 24 04 0d 2c 2e 15  |m,#fe20].,$..,..|
00005010  54 53 54 20 52 30 2c 23  25 31 31 31 30 30 30 30  |TST R0,#%1110000|
00005020  30 0d 2c 38 14 42 45 51  20 62 6c 61 6e 6b 5f 63  |0.,8.BEQ blank_c|
00005030  75 72 73 6f 72 0d 2c 42  04 0d 2c 4c 1a 54 53 54  |ursor.,B..,L.TST|
00005040  20 52 30 2c 23 25 31 30  20 3b 20 74 65 6c 65 74  | R0,#%10 ; telet|
00005050  65 78 74 0d 2c 56 0f 42  4e 45 20 63 75 72 73 6f  |ext.,V.BNE curso|
00005060  72 37 0d 2c 60 04 0d 2c  6a 1e 4c 44 52 42 20 52  |r7.,`..,j.LDRB R|
00005070  30 2c 5b 6d 65 6d 2c 23  63 72 74 5f 72 65 67 73  |0,[mem,#crt_regs|
00005080  2b 31 34 5d 0d 2c 74 1e  4c 44 52 42 20 52 31 2c  |+14].,t.LDRB R1,|
00005090  5b 6d 65 6d 2c 23 63 72  74 5f 72 65 67 73 2b 31  |[mem,#crt_regs+1|
000050a0  35 5d 0d 2c 7e 16 41 44  44 20 52 30 2c 52 31 2c  |5].,~.ADD R0,R1,|
000050b0  52 30 2c 4c 53 4c 23 38  0d 2c 88 04 0d 2c 92 2f  |R0,LSL#8.,...,./|
000050c0  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 63 72  |LDRB R1,[mem,#cr|
000050d0  74 5f 72 65 67 73 2b 31  32 5d 20 3a 20 80 20 52  |t_regs+12] : . R|
000050e0  31 2c 52 31 2c 23 25 31  31 31 31 0d 2c 9c 1e 4c  |1,R1,#%1111.,..L|
000050f0  44 52 42 20 52 32 2c 5b  6d 65 6d 2c 23 63 72 74  |DRB R2,[mem,#crt|
00005100  5f 72 65 67 73 2b 31 33  5d 0d 2c a6 16 41 44 44  |_regs+13].,..ADD|
00005110  20 52 32 2c 52 32 2c 52  31 2c 4c 53 4c 23 38 0d  | R2,R2,R1,LSL#8.|
00005120  2c b0 11 53 55 42 53 20  52 30 2c 52 30 2c 52 32  |,..SUBS R0,R0,R2|
00005130  0d 2c ba 0f 4d 4f 56 4d  49 20 52 30 2c 23 30 0d  |.,..MOVMI R0,#0.|
00005140  2c c4 04 0d 2c ce 10 2e  63 75 72 73 6f 72 5f 63  |,...,...cursor_c|
00005150  6f 6e 74 0d 2c d8 04 0d  2c e2 2d 4c 44 52 42 20  |ont.,...,.-LDRB |
00005160  52 31 32 2c 5b 6d 65 6d  2c 23 63 72 74 5f 72 65  |R12,[mem,#crt_re|
00005170  67 73 2b 31 5d 20 3b 20  68 6f 72 69 7a 2e 20 63  |gs+1] ; horiz. c|
00005180  68 61 72 73 0d 2c ec 04  0d 2c f6 1a 43 4d 50 20  |hars.,...,..CMP |
00005190  52 31 32 2c 23 30 20 3a  20 ec 51 20 50 43 2c 52  |R12,#0 : .Q PC,R|
000051a0  31 34 0d 2d 00 04 0d 2d  0a 29 3b a4 64 69 76 6d  |14.-...-.);.divm|
000051b0  6f 64 28 30 2c 31 32 2c  31 2c 32 2c 31 33 29 20  |od(0,12,1,2,13) |
000051c0  3b 20 52 30 20 3d 20 52  30 20 83 20 52 31 32 0d  |; R0 = R0 . R12.|
000051d0  2d 14 29 20 20 20 20 20  20 20 20 20 20 20 20 20  |-.)             |
000051e0  20 20 20 20 20 20 20 20  20 3b 20 52 32 20 3d 20  |         ; R2 = |
000051f0  52 30 20 81 20 52 31 32  0d 2d 1e 12 3b 52 53 42  |R0 . R12.-..;RSB|
00005200  20 52 32 2c 52 32 2c 23  33 32 0d 2d 28 14 3b 4d  | R2,R2,#32.-(.;M|
00005210  4f 56 20 52 32 2c 52 32  2c 4c 53 4c 23 35 0d 2d  |OV R2,R2,LSL#5.-|
00005220  32 04 0d 2d 3c 17 3b 20  57 65 20 6b 6e 6f 77 20  |2..-<.; We know |
00005230  52 30 3c 33 32 2a 52 31  32 0d 2d 46 13 3b 20 52  |R0<32*R12.-F.; R|
00005240  30 20 3d 20 52 30 20 83  20 52 31 32 0d 2d 50 13  |0 = R0 . R12.-P.|
00005250  3b 20 52 32 20 3d 20 52  30 20 81 20 52 31 32 0d  |; R2 = R0 . R12.|
00005260  2d 5a 12 4d 4f 56 20 52  32 2c 23 33 32 3c 3c 32  |-Z.MOV R2,#32<<2|
00005270  31 0d 2d 64 14 43 4d 50  20 52 30 2c 52 31 32 2c  |1.-d.CMP R0,R12,|
00005280  4c 53 4c 23 34 0d 2d 6e  19 53 55 42 47 45 20 52  |LSL#4.-n.SUBGE R|
00005290  30 2c 52 30 2c 52 31 32  2c 4c 53 4c 23 34 0d 2d  |0,R0,R12,LSL#4.-|
000052a0  78 17 53 55 42 47 45 20  52 32 2c 52 32 2c 23 31  |x.SUBGE R2,R2,#1|
000052b0  36 3c 3c 32 31 0d 2d 82  14 43 4d 50 20 52 30 2c  |6<<21.-..CMP R0,|
000052c0  52 31 32 2c 4c 53 4c 23  33 0d 2d 8c 19 53 55 42  |R12,LSL#3.-..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 33 0d 2d 96 16 53 55  42 47 45 20 52 32 2c 52  |#3.-..SUBGE R2,R|
000052f0  32 2c 23 38 3c 3c 32 31  0d 2d a0 14 43 4d 50 20  |2,#8<<21.-..CMP |
00005300  52 30 2c 52 31 32 2c 4c  53 4c 23 32 0d 2d aa 19  |R0,R12,LSL#2.-..|
00005310  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 2c  |SUBGE R0,R0,R12,|
00005320  4c 53 4c 23 32 0d 2d b4  16 53 55 42 47 45 20 52  |LSL#2.-..SUBGE R|
00005330  32 2c 52 32 2c 23 34 3c  3c 32 31 0d 2d be 14 43  |2,R2,#4<<21.-..C|
00005340  4d 50 20 52 30 2c 52 31  32 2c 4c 53 4c 23 31 0d  |MP R0,R12,LSL#1.|
00005350  2d c8 19 53 55 42 47 45  20 52 30 2c 52 30 2c 52  |-..SUBGE R0,R0,R|
00005360  31 32 2c 4c 53 4c 23 31  0d 2d d2 16 53 55 42 47  |12,LSL#1.-..SUBG|
00005370  45 20 52 32 2c 52 32 2c  23 32 3c 3c 32 31 0d 2d  |E R2,R2,#2<<21.-|
00005380  dc 0e 43 4d 50 20 52 30  2c 52 31 32 0d 2d e6 13  |..CMP R0,R12.-..|
00005390  53 55 42 47 45 20 52 30  2c 52 30 2c 52 31 32 0d  |SUBGE R0,R0,R12.|
000053a0  2d f0 16 53 55 42 47 45  20 52 32 2c 52 32 2c 23  |-..SUBGE R2,R2,#|
000053b0  31 3c 3c 32 31 0d 2d fa  04 0d 2e 04 04 0d 2e 0e  |1<<21.-.........|
000053c0  39 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 66  |9LDRB R1,[mem,#f|
000053d0  65 32 30 5d 20 3a 20 54  53 54 20 52 31 2c 23 25  |e20] : TST R1,#%|
000053e0  31 30 30 30 30 20 3a 20  ec 51 20 52 30 2c 52 30  |10000 : .Q R0,R0|
000053f0  2c 4c 53 4c 23 31 0d 2e  18 32 3b 4d 4f 56 20 52  |,LSL#1...2;MOV R|
00005400  30 2c 52 30 2c 4c 53 4c  23 34 20 20 20 20 20 20  |0,R0,LSL#4      |
00005410  20 20 20 3b 20 20 20 74  68 65 73 65 20 74 77 6f  |   ;   these two|
00005420  20 73 75 72 70 6c 75 73  0d 2e 22 1e 3b 41 44 44  | surplus..".;ADD|
00005430  20 52 30 2c 52 30 2c 52  32 2c 4c 53 4c 23 31 36  | R0,R0,R2,LSL#16|
00005440  20 20 20 20 20 3b 0d 2e  2c 3a 41 44 44 20 52 30  |     ;..,:ADD R0|
00005450  2c 52 32 2c 52 30 2c 4c  53 4c 23 34 20 20 20 20  |,R2,R0,LSL#4    |
00005460  20 20 20 3b 20 20 20 74  68 69 73 20 6c 69 6e 65  |   ;   this line|
00005470  20 6d 69 73 73 69 6e 67  20 69 6e 20 31 2e 33 30  | missing in 1.30|
00005480  0d 2e 36 1c 53 54 52 20  52 30 2c 6f 73 77 6f 72  |..6.STR R0,oswor|
00005490  64 32 31 5f 35 5f 62 6c  6f 63 6b 31 0d 2e 40 1b  |d21_5_block1..@.|
000054a0  41 44 52 20 52 31 2c 6f  73 77 6f 72 64 32 31 5f  |ADR R1,osword21_|
000054b0  35 5f 62 6c 6f 63 6b 0d  2e 4a 0e 4d 4f 56 20 52  |5_block..J.MOV R|
000054c0  30 2c 23 32 31 0d 2e 54  28 53 57 49 20 22 4f 53  |0,#21..T(SWI "OS|
000054d0  5f 57 6f 72 64 22 20 3b  20 73 65 74 20 70 6f 69  |_Word" ; set poi|
000054e0  6e 74 65 72 20 70 6f 73  69 74 69 6f 6e 0d 2e 5e  |nter position..^|
000054f0  0f 3b 4d 4f 56 20 50 43  2c 52 31 34 0d 2e 5f 14  |.;MOV PC,R14.._.|
00005500  42 20 64 65 66 69 6e 65  5f 63 75 72 73 6f 72 32  |B define_cursor2|
00005510  0d 2e 68 04 0d 2e 72 0e  2e 6d 6f 6e 6f 5f 74 69  |..h...r..mono_ti|
00005520  6d 65 0d 2e 7c 0a 45 51  55 44 20 30 0d 2e 86 0a  |me..|.EQUD 0....|
00005530  2e 73 70 65 65 64 0d 2e  90 0a 45 51 55 44 20 30  |.speed....EQUD 0|
00005540  0d 2e 9a 04 0d 2e a4 12  2e 73 70 65 65 64 5f 63  |.........speed_c|
00005550  6f 6e 74 72 6f 6c 0d 2e  ae 18 4c 44 52 20 52 30  |ontrol....LDR R0|
00005560  2c 5b 6d 65 6d 2c 23 73  70 65 65 64 52 5d 0d 2e  |,[mem,#speedR]..|
00005570  b8 10 41 44 44 20 52 31  2c 52 31 2c 52 30 0d 2e  |..ADD R1,R1,R0..|
00005580  c2 10 53 54 52 20 52 31  2c 73 70 65 65 64 0d 2e  |..STR R1,speed..|
00005590  cc 04 0d 2e d6 14 4c 44  52 20 52 31 2c 6d 6f 6e  |......LDR R1,mon|
000055a0  6f 5f 74 69 6d 65 0d 2e  e0 0e 2e 6d 6f 6e 6f 5f  |o_time.....mono_|
000055b0  6c 6f 6f 70 0d 2e ea 1e  53 57 49 20 22 4f 53 5f  |loop....SWI "OS_|
000055c0  52 65 61 64 4d 6f 6e 6f  74 6f 6e 69 63 54 69 6d  |ReadMonotonicTim|
000055d0  65 22 0d 2e f4 13 4d 4f  56 20 52 30 2c 52 30 2c  |e"....MOV R0,R0,|
000055e0  4c 53 52 23 31 0d 2e fe  0d 43 4d 50 20 52 30 2c  |LSR#1....CMP R0,|
000055f0  52 31 0d 2f 08 11 42 45  51 20 6d 6f 6e 6f 5f 6c  |R1./..BEQ mono_l|
00005600  6f 6f 70 0d 2f 12 14 53  54 52 20 52 30 2c 6d 6f  |oop./..STR R0,mo|
00005610  6e 6f 5f 74 69 6d 65 0d  2f 1c 04 0d 2f 26 0e 4d  |no_time./.../&.M|
00005620  4f 56 20 50 43 2c 52 31  34 0d 2f 30 04 0d 2f 3a  |OV PC,R14./0../:|
00005630  04 0d 2f 44 04 0d 2f 4e  0a 2e 76 73 79 6e 63 0d  |../D../N..vsync.|
00005640  2f 58 14 53 54 52 20 52  31 34 2c 76 73 79 6e 63  |/X.STR R14,vsync|
00005650  52 31 34 0d 2f 62 04 0d  2f 6c 04 0d 2f 76 19 4c  |R14./b../l../v.L|
00005660  44 52 20 52 30 2c 5b 6d  65 6d 2c 23 73 63 72 65  |DR R0,[mem,#scre|
00005670  65 6e 52 5d 0d 2f 80 10  41 44 44 20 52 31 2c 52  |enR]./..ADD R1,R|
00005680  31 2c 52 30 0d 2f 8a 18  53 54 52 20 52 31 2c 5b  |1,R0./..STR R1,[|
00005690  6d 65 6d 2c 23 73 63 72  65 65 6e 5d 0d 2f 94 04  |mem,#screen]./..|
000056a0  0d 2f 9e 19 4c 44 52 42  20 52 30 2c 6c 64 72 62  |./..LDRB R0,ldrb|
000056b0  34 30 5f 74 61 6d 70 65  72 0d 2f a8 22 43 4d 50  |40_tamper./."CMP|
000056c0  20 52 30 2c 23 31 20 3a  20 42 4c 45 51 20 6c 64  | R0,#1 : BLEQ ld|
000056d0  72 62 34 30 5f 75 70 64  61 74 65 0d 2f b2 04 0d  |rb40_update./...|
000056e0  2f bc 10 3b 42 4c 20 74  72 61 63 65 5f 6f 6e 0d  |/..;BL trace_on.|
000056f0  2f c6 04 0d 2f d0 19 3b  4c 44 52 42 20 52 31 2c  |/.../..;LDRB R1,|
00005700  73 63 72 65 65 6e 5f 63  6f 75 6e 74 0d 2f da 12  |screen_count./..|
00005710  3b 53 55 42 53 20 52 31  2c 52 31 2c 23 31 0d 2f  |;SUBS R1,R1,#1./|
00005720  e4 1d 3b 4c 44 52 4d 49  42 20 52 31 2c 73 63 72  |..;LDRMIB R1,scr|
00005730  65 65 6e 5f 63 6f 75 6e  74 2b 34 0d 2f ee 19 3b  |een_count+4./..;|
00005740  53 54 52 42 20 52 31 2c  73 63 72 65 65 6e 5f 63  |STRB R1,screen_c|
00005750  6f 75 6e 74 0d 2f f8 18  4c 44 52 20 52 30 2c 5b  |ount./..LDR R0,[|
00005760  6d 65 6d 2c 23 74 61 6d  70 65 72 5d 0d 30 02 0d  |mem,#tamper].0..|
00005770  43 4d 50 20 52 30 2c 23  30 0d 30 0c 04 0d 30 16  |CMP R0,#0.0...0.|
00005780  11 42 45 51 20 6e 6f 5f  74 61 6d 70 65 72 0d 30  |.BEQ no_tamper.0|
00005790  20 0d 4d 4f 56 20 52 30  2c 23 30 0d 30 2a 18 53  | .MOV R0,#0.0*.S|
000057a0  54 52 20 52 30 2c 5b 6d  65 6d 2c 23 74 61 6d 70  |TR R0,[mem,#tamp|
000057b0  65 72 5d 0d 30 34 1c 3b  53 57 49 20 22 36 35 30  |er].04.;SWI "650|
000057c0  32 5f 55 70 64 61 74 65  53 63 72 65 65 6e 22 0d  |2_UpdateScreen".|
000057d0  30 3e 12 42 4c 20 72 65  63 61 6c 63 5f 77 72 61  |0>.BL recalc_wra|
000057e0  70 0d 30 48 13 42 4c 20  75 70 64 61 74 65 73 63  |p.0H.BL updatesc|
000057f0  72 65 65 6e 0d 30 52 1f  54 53 54 20 46 2c 23 31  |reen.0R.TST F,#1|
00005800  20 3c 3c 20 31 30 20 3b  20 63 75 72 73 6f 72 20  | << 10 ; cursor |
00005810  6f 6e 3f 0d 30 5c 16 42  4c 4e 45 20 64 65 66 69  |on?.0\.BLNE defi|
00005820  6e 65 5f 63 75 72 73 6f  72 0d 30 66 0f 42 4c 4e  |ne_cursor.0f.BLN|
00005830  45 20 63 75 72 73 6f 72  0d 30 70 0e 2e 6e 6f 5f  |E cursor.0p..no_|
00005840  74 61 6d 70 65 72 0d 30  7a 1d 4c 44 52 42 20 52  |tamper.0z.LDRB R|
00005850  30 2c 5b 6d 65 6d 2c 23  70 61 6c 5f 74 61 6d 70  |0,[mem,#pal_tamp|
00005860  65 72 5d 0d 30 84 0d 43  4d 50 20 52 30 2c 23 30  |er].0..CMP R0,#0|
00005870  0d 30 8e 13 42 4c 4e 45  20 75 70 64 61 74 65 5f  |.0..BLNE update_|
00005880  70 61 6c 0d 30 98 04 0d  30 a2 04 0d 30 ac 1f 4c  |pal.0...0...0..L|
00005890  44 52 20 52 30 2c 5b 6d  65 6d 2c 23 63 75 72 73  |DR R0,[mem,#curs|
000058a0  6f 72 5f 74 61 6d 70 65  72 5d 0d 30 b6 0d 43 4d  |or_tamper].0..CM|
000058b0  50 20 52 30 2c 23 30 0d  30 c0 0f 42 4c 4e 45 20  |P R0,#0.0..BLNE |
000058c0  63 75 72 73 6f 72 0d 30  ca 04 0d 30 d4 04 0d 30  |cursor.0...0...0|
000058d0  de 04 0d 30 e8 1c 53 55  42 20 52 30 2c 6d 65 6d  |...0..SUB R0,mem|
000058e0  2c 23 35 31 32 20 3b 20  73 68 65 69 6c 61 0d 30  |,#512 ; sheila.0|
000058f0  f2 15 4c 44 52 42 20 52  31 2c 5b 52 30 2c 23 26  |..LDRB R1,[R0,#&|
00005900  32 30 5d 0d 30 fc 1b 54  53 54 20 52 31 2c 23 25  |20].0..TST R1,#%|
00005910  31 30 20 3b 20 74 65 6c  65 74 65 78 74 3f 0d 31  |10 ; teletext?.1|
00005920  06 1e 3b 53 57 49 4e 45  20 22 36 35 30 32 5f 55  |..;SWINE "6502_U|
00005930  70 64 61 74 65 53 63 72  65 65 6e 22 0d 31 10 15  |pdateScreen".1..|
00005940  42 4c 4e 45 20 75 70 64  61 74 65 73 63 72 65 65  |BLNE updatescree|
00005950  6e 0d 31 1a 12 41 44 44  20 52 30 2c 52 30 2c 23  |n.1..ADD R0,R0,#|
00005960  26 34 44 0d 31 24 11 3b  4c 44 52 42 20 52 31 2c  |&4D.1$.;LDRB R1,|
00005970  5b 52 30 5d 0d 31 2e 14  3b 4c 44 52 42 20 52 32  |[R0].1..;LDRB R2|
00005980  2c 5b 52 30 2c 23 31 5d  0d 31 38 16 4c 44 52 42  |,[R0,#1].18.LDRB|
00005990  20 52 31 2c 5b 6d 65 6d  2c 23 69 66 72 5d 0d 31  | R1,[mem,#ifr].1|
000059a0  42 16 4c 44 52 42 20 52  32 2c 5b 6d 65 6d 2c 23  |B.LDRB R2,[mem,#|
000059b0  69 65 72 5d 0d 31 4c 2b  84 52 20 52 31 2c 52 31  |ier].1L+.R R1,R1|
000059c0  2c 23 25 31 30 20 3b 20  69 6e 74 65 72 72 75 70  |,#%10 ; interrup|
000059d0  74 20 69 73 20 66 72 6f  6d 20 76 73 79 6e 63 0d  |t is from vsync.|
000059e0  31 56 2d 54 53 54 20 52  32 2c 23 25 31 30 20 3b  |1V-TST R2,#%10 ;|
000059f0  20 69 73 20 76 73 79 6e  63 20 69 6e 74 65 72 72  | is vsync interr|
00005a00  75 70 74 20 65 6e 61 62  6c 65 64 3f 0d 31 60 13  |upt enabled?.1`.|
00005a10  84 52 4e 45 20 52 31 2c  52 31 2c 23 26 38 30 0d  |.RNE R1,R1,#&80.|
00005a20  31 6a 11 3b 53 54 52 42  20 52 31 2c 5b 52 30 5d  |1j.;STRB R1,[R0]|
00005a30  0d 31 74 16 53 54 52 42  20 52 31 2c 5b 6d 65 6d  |.1t.STRB R1,[mem|
00005a40  2c 23 69 66 72 5d 0d 31  7e 15 3b 42 45 51 20 6e  |,#ifr].1~.;BEQ n|
00005a50  6f 5f 69 6e 74 65 72 72  75 70 74 0d 31 88 0c 3b  |o_interrupt.1..;|
00005a60  a4 66 65 74 63 68 32 0d  31 92 04 0d 31 9c 12 3b  |.fetch2.1...1..;|
00005a70  54 53 54 20 46 2c 23 31  20 3c 3c 20 39 0d 31 a6  |TST F,#1 << 9.1.|
00005a80  13 3b 42 45 51 20 73 6b  69 70 5f 65 78 61 63 74  |.;BEQ skip_exact|
00005a90  0d 31 b0 04 0d 31 ba 15  3b 4c 44 52 20 52 31 2c  |.1...1..;LDR R1,|
00005aa0  6d 6f 6e 6f 5f 74 69 6d  65 0d 31 c4 0f 3b 2e 6d  |mono_time.1..;.m|
00005ab0  6f 6e 6f 5f 6c 6f 6f 70  0d 31 ce 1f 3b 53 57 49  |ono_loop.1..;SWI|
00005ac0  20 22 4f 53 5f 52 65 61  64 4d 6f 6e 6f 74 6f 6e  | "OS_ReadMonoton|
00005ad0  69 63 54 69 6d 65 22 0d  31 d8 14 3b 4d 4f 56 20  |icTime".1..;MOV |
00005ae0  52 30 2c 52 30 2c 4c 53  52 23 31 0d 31 e2 0e 3b  |R0,R0,LSR#1.1..;|
00005af0  43 4d 50 20 52 30 2c 52  31 0d 31 ec 12 3b 42 45  |CMP R0,R1.1..;BE|
00005b00  51 20 6d 6f 6e 6f 5f 6c  6f 6f 70 0d 31 f6 15 3b  |Q mono_loop.1..;|
00005b10  53 54 52 20 52 30 2c 6d  6f 6e 6f 5f 74 69 6d 65  |STR R0,mono_time|
00005b20  0d 32 00 04 0d 32 0a 0f  2e 73 6b 69 70 5f 65 78  |.2...2...skip_ex|
00005b30  61 63 74 0d 32 14 04 0d  32 1e 1f 54 53 54 20 46  |act.2...2..TST F|
00005b40  2c 23 31 20 3c 3c 20 31  30 20 3b 20 63 75 72 73  |,#1 << 10 ; curs|
00005b50  6f 72 20 6f 6e 3f 0d 32  28 15 4c 44 52 45 51 20  |or on?.2(.LDREQ |
00005b60  50 43 2c 76 73 79 6e 63  52 31 34 0d 32 32 04 0d  |PC,vsyncR14.22..|
00005b70  32 3c 18 4c 44 52 42 20  52 31 2c 63 75 72 73 6f  |2<.LDRB R1,curso|
00005b80  72 5f 73 74 61 74 65 0d  32 46 0d 43 4d 50 20 52  |r_state.2F.CMP R|
00005b90  31 2c 23 30 0d 32 50 15  4c 44 52 4e 45 20 50 43  |1,#0.2P.LDRNE PC|
00005ba0  2c 76 73 79 6e 63 52 31  34 0d 32 5a 04 0d 32 64  |,vsyncR14.2Z..2d|
00005bb0  1e 4c 44 52 42 20 52 31  2c 5b 6d 65 6d 2c 23 63  |.LDRB R1,[mem,#c|
00005bc0  72 74 5f 72 65 67 73 2b  31 30 5d 0d 32 6e 2f 54  |rt_regs+10].2n/T|
00005bd0  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 30 20  |ST R1,#%1000000 |
00005be0  3b 20 63 75 72 73 6f 72  20 62 6c 69 6e 6b 69 6e  |; cursor blinkin|
00005bf0  67 20 65 6e 61 62 6c 65  64 3f 0d 32 78 15 4c 44  |g enabled?.2x.LD|
00005c00  52 45 51 20 50 43 2c 76  73 79 6e 63 52 31 34 0d  |REQ PC,vsyncR14.|
00005c10  32 82 04 0d 32 8c 18 4c  44 52 42 20 52 30 2c 63  |2...2..LDRB R0,c|
00005c20  75 72 73 6f 72 5f 66 6c  61 73 68 0d 32 96 11 53  |ursor_flash.2..S|
00005c30  55 42 53 20 52 30 2c 52  30 2c 23 31 0d 32 a0 18  |UBS R0,R0,#1.2..|
00005c40  53 54 52 42 20 52 30 2c  63 75 72 73 6f 72 5f 66  |STRB R0,cursor_f|
00005c50  6c 61 73 68 0d 32 aa 15  4c 44 52 47 45 20 50 43  |lash.2..LDRGE PC|
00005c60  2c 76 73 79 6e 63 52 31  34 0d 32 b4 04 0d 32 be  |,vsyncR14.2...2.|
00005c70  13 54 53 54 20 52 31 2c  23 25 31 30 30 30 30 30  |.TST R1,#%100000|
00005c80  0d 32 c8 0d ec 51 20 52  30 2c 23 31 35 0d 32 d2  |.2...Q R0,#15.2.|
00005c90  10 4d 4f 56 4e 45 20 52  30 2c 23 33 31 0d 32 dc  |.MOVNE R0,#31.2.|
00005ca0  18 53 54 52 42 20 52 30  2c 63 75 72 73 6f 72 5f  |.STRB R0,cursor_|
00005cb0  66 6c 61 73 68 0d 32 e6  04 0d 32 f0 14 4c 44 52  |flash.2...2..LDR|
00005cc0  20 52 31 34 2c 76 73 79  6e 63 52 31 34 0d 32 fa  | R14,vsyncR14.2.|
00005cd0  17 4c 44 52 42 20 52 30  2c 66 6c 61 73 68 5f 73  |.LDRB R0,flash_s|
00005ce0  74 61 74 65 0d 33 04 0e  82 20 52 30 2c 52 30 2c  |tate.3... R0,R0,|
00005cf0  23 31 0d 33 0e 17 53 54  52 42 20 52 30 2c 66 6c  |#1.3..STRB R0,fl|
00005d00  61 73 68 5f 73 74 61 74  65 0d 33 18 21 43 4d 50  |ash_state.3.!CMP|
00005d10  20 52 30 2c 23 30 20 3a  20 42 45 51 20 62 6c 61  | R0,#0 : BEQ bla|
00005d20  6e 6b 5f 63 75 72 73 6f  72 32 0d 33 22 14 42 20  |nk_cursor2.3".B |
00005d30  64 65 66 69 6e 65 5f 63  75 72 73 6f 72 32 0d 33  |define_cursor2.3|
00005d40  2c 04 0d 33 36 14 3b 4c  44 52 20 50 43 2c 76 73  |,..36.;LDR PC,vs|
00005d50  79 6e 63 52 31 34 0d 33  40 0d 2e 76 73 79 6e 63  |yncR14.3@..vsync|
00005d60  52 31 34 0d 33 4a 0a 45  51 55 44 20 30 0d 33 54  |R14.3J.EQUD 0.3T|
00005d70  04 0d 33 5e 0b 2e 6c 64  72 62 34 30 0d 33 68 04  |..3^..ldrb40.3h.|
00005d80  0d 33 72 18 4c 44 52 42  20 52 32 2c 6c 64 72 62  |.3r.LDRB R2,ldrb|
00005d90  34 30 5f 76 61 6c 75 65  0d 33 7c 16 42 49 43 20  |40_value.3|.BIC |
00005da0  52 30 2c 52 30 2c 23 25  31 31 30 30 30 30 0d 33  |R0,R0,#%110000.3|
00005db0  86 0f 84 52 20 52 30 2c  52 30 2c 52 32 0d 33 90  |...R R0,R0,R2.3.|
00005dc0  0d 4d 4f 56 20 52 31 2c  23 31 0d 33 9a 19 53 54  |.MOV R1,#1.3..ST|
00005dd0  52 42 20 52 31 2c 6c 64  72 62 34 30 5f 74 61 6d  |RB R1,ldrb40_tam|
00005de0  70 65 72 0d 33 a4 0e 4d  4f 56 20 50 43 2c 52 31  |per.3..MOV PC,R1|
00005df0  34 0d 33 ae 04 0d 33 b8  12 2e 6c 64 72 62 34 30  |4.3...3...ldrb40|
00005e00  5f 75 70 64 61 74 65 0d  33 c2 13 4d 4f 56 20 52  |_update.3..MOV R|
00005e10  30 2c 23 25 31 31 30 30  30 30 0d 33 cc 18 53 54  |0,#%110000.3..ST|
00005e20  52 42 20 52 30 2c 6c 64  72 62 34 30 5f 76 61 6c  |RB R0,ldrb40_val|
00005e30  75 65 0d 33 d6 0d 4d 4f  56 20 52 30 2c 23 30 0d  |ue.3..MOV R0,#0.|
00005e40  33 e0 19 53 54 52 42 20  52 30 2c 6c 64 72 62 34  |3..STRB R0,ldrb4|
00005e50  30 5f 74 61 6d 70 65 72  0d 33 ea 1a 54 53 54 20  |0_tamper.3..TST |
00005e60  46 2c 23 31 3c 3c 39 20  3b 20 6a 6f 79 73 74 69  |F,#1<<9 ; joysti|
00005e70  63 6b 0d 33 f4 0d ec 51  20 50 43 2c 52 31 34 0d  |ck.3...Q PC,R14.|
00005e80  33 fe 29 53 57 49 20 26  36 33 46 34 30 20 3b 20  |3.)SWI &63F40 ; |
00005e90  22 58 4a 6f 79 73 74 69  63 6b 5f 52 65 61 64 22  |"XJoystick_Read"|
00005ea0  20 3b 20 6a 6f 79 20 30  0d 34 08 14 42 56 53 20  | ; joy 0.4..BVS |
00005eb0  6c 64 72 62 34 30 5f 6d  6f 75 73 65 0d 34 12 13  |ldrb40_mouse.4..|
00005ec0  80 20 52 31 2c 52 30 2c  23 26 31 30 30 30 30 0d  |. R1,R0,#&10000.|
00005ed0  34 1c 0d 4d 4f 56 20 52  30 2c 23 31 0d 34 26 29  |4..MOV R0,#1.4&)|
00005ee0  53 57 49 20 26 36 33 46  34 30 20 3b 20 22 58 4a  |SWI &63F40 ; "XJ|
00005ef0  6f 79 73 74 69 63 6b 5f  52 65 61 64 22 20 3b 20  |oystick_Read" ; |
00005f00  6a 6f 79 20 31 0d 34 30  0f 4d 4f 56 56 53 20 52  |joy 1.40.MOVVS R|
00005f10  30 2c 23 30 0d 34 3a 13  80 20 52 30 2c 52 30 2c  |0,#0.4:.. R0,R0,|
00005f20  23 26 31 30 30 30 30 0d  34 44 16 41 44 44 20 52  |#&10000.4D.ADD R|
00005f30  31 2c 52 31 2c 52 30 2c  4c 53 4c 23 31 0d 34 4e  |1,R1,R0,LSL#1.4N|
00005f40  13 80 20 52 31 2c 52 31  2c 23 26 33 30 30 30 30  |.. R1,R1,#&30000|
00005f50  0d 34 58 18 4d 4f 56 20  52 31 2c 52 31 2c 4c 53  |.4X.MOV R1,R1,LS|
00005f60  52 23 28 31 36 2d 34 29  0d 34 62 04 0d 34 6c 14  |R#(16-4).4b..4l.|
00005f70  82 20 52 32 2c 52 31 2c  23 25 31 31 30 30 30 30  |. R2,R1,#%110000|
00005f80  0d 34 76 04 0d 34 80 17  3b 41 44 44 20 52 31 33  |.4v..4..;ADD R13|
00005f90  2c 6d 65 6d 2c 23 26 46  45 30 30 0d 34 8a 17 3b  |,mem,#&FE00.4..;|
00005fa0  4c 44 52 42 20 52 30 2c  5b 52 31 33 2c 23 26 34  |LDRB R0,[R13,#&4|
00005fb0  30 5d 0d 34 94 17 3b 42  49 43 20 52 30 2c 52 30  |0].4..;BIC R0,R0|
00005fc0  2c 23 25 31 31 30 30 30  30 0d 34 9e 18 53 54 52  |,#%110000.4..STR|
00005fd0  42 20 52 32 2c 6c 64 72  62 34 30 5f 76 61 6c 75  |B R2,ldrb40_valu|
00005fe0  65 0d 34 a8 10 3b 84 52  20 52 30 2c 52 30 2c 52  |e.4..;.R R0,R0,R|
00005ff0  32 0d 34 b2 04 0d 34 bc  0e 4d 4f 56 20 50 43 2c  |2.4...4..MOV PC,|
00006000  52 31 34 0d 34 c6 04 0d  34 d0 12 2e 6c 64 72 62  |R14.4...4...ldrb|
00006010  34 30 5f 74 61 6d 70 65  72 0d 34 da 0a 45 51 55  |40_tamper.4..EQU|
00006020  44 20 30 0d 34 e4 11 2e  6c 64 72 62 34 30 5f 76  |D 0.4...ldrb40_v|
00006030  61 6c 75 65 0d 34 ee 0a  45 51 55 44 20 30 0d 34  |alue.4..EQUD 0.4|
00006040  f8 04 0d 35 02 11 2e 6c  64 72 62 34 30 5f 6d 6f  |...5...ldrb40_mo|
00006050  75 73 65 0d 35 0c 0e 4d  4f 56 20 52 31 33 2c 52  |use.5..MOV R13,R|
00006060  33 0d 35 16 12 53 57 49  20 22 4f 53 5f 4d 6f 75  |3.5..SWI "OS_Mou|
00006070  73 65 22 0d 35 20 0e 4d  4f 56 20 52 33 2c 52 31  |se".5 .MOV R3,R1|
00006080  33 0d 35 2a 04 0d 35 34  13 4d 4f 56 20 52 32 2c  |3.5*..54.MOV R2,|
00006090  52 32 2c 4c 53 52 23 31  0d 35 3e 10 52 53 42 20  |R2,LSR#1.5>.RSB |
000060a0  52 32 2c 52 32 2c 23 33  0d 35 48 13 4d 4f 56 20  |R2,R2,#3.5H.MOV |
000060b0  52 32 2c 52 32 2c 4c 53  4c 23 34 0d 35 52 17 3b  |R2,R2,LSL#4.5R.;|
000060c0  41 44 44 20 52 31 33 2c  6d 65 6d 2c 23 26 46 45  |ADD R13,mem,#&FE|
000060d0  30 30 0d 35 5c 17 3b 4c  44 52 42 20 52 30 2c 5b  |00.5\.;LDRB R0,[|
000060e0  52 31 33 2c 23 26 34 30  5d 0d 35 66 17 3b 42 49  |R13,#&40].5f.;BI|
000060f0  43 20 52 30 2c 52 30 2c  23 25 31 31 30 30 30 30  |C R0,R0,#%110000|
00006100  0d 35 70 18 53 54 52 42  20 52 32 2c 6c 64 72 62  |.5p.STRB R2,ldrb|
00006110  34 30 5f 76 61 6c 75 65  0d 35 7a 10 3b 84 52 20  |40_value.5z.;.R |
00006120  52 30 2c 52 30 2c 52 32  0d 35 84 04 0d 35 8e 0e  |R0,R0,R2.5...5..|
00006130  4d 4f 56 20 50 43 2c 52  31 34 0d 35 98 04 0d 35  |MOV PC,R14.5...5|
00006140  a2 15 2e 77 72 69 74 65  5f 41 44 43 5f 73 74 61  |...write_ADC_sta|
00006150  74 75 73 0d 35 ac 04 0d  35 b6 1a 54 53 54 20 46  |tus.5...5..TST F|
00006160  2c 23 31 3c 3c 39 20 3b  20 6a 6f 79 73 74 69 63  |,#1<<9 ; joystic|
00006170  6b 0d 35 c0 0d ec 51 20  50 43 2c 52 31 34 0d 35  |k.5...Q PC,R14.5|
00006180  ca 04 0d 35 d4 04 0d 35  de 19 42 49 43 20 52 31  |...5...5..BIC R1|
00006190  32 2c 52 30 2c 23 25 31  31 31 31 30 30 30 30 0d  |2,R0,#%11110000.|
000061a0  35 e8 04 0d 35 f2 13 4d  4f 56 20 52 30 2c 52 30  |5...5..MOV R0,R0|
000061b0  2c 4c 53 52 23 31 0d 35  fc 21 80 20 52 30 2c 52  |,LSR#1.5.!. R0,R|
000061c0  30 2c 23 25 31 20 3b 20  6a 6f 79 73 74 69 63 6b  |0,#%1 ; joystick|
000061d0  20 6e 75 6d 62 65 72 0d  36 06 21 53 57 49 20 26  | number.6.!SWI &|
000061e0  36 33 46 34 30 20 3b 20  22 58 4a 6f 79 73 74 69  |63F40 ; "XJoysti|
000061f0  63 6b 5f 52 65 61 64 22  0d 36 10 17 42 56 53 20  |ck_Read".6..BVS |
00006200  77 72 69 74 65 5f 41 44  43 5f 6d 6f 75 73 65 0d  |write_ADC_mouse.|
00006210  36 1a 04 0d 36 24 04 0d  36 2e 28 54 53 54 20 52  |6...6$..6.(TST R|
00006220  31 32 2c 23 25 31 20 20  3b 20 6c 65 66 74 2f 72  |12,#%1  ; left/r|
00006230  69 67 68 74 20 6f 72 20  75 70 2f 64 6f 77 6e 0d  |ight or up/down.|
00006240  36 38 12 ec 51 20 52 30  2c 52 30 2c 4c 53 52 23  |68..Q R0,R0,LSR#|
00006250  38 0d 36 42 12 41 44 44  20 52 30 2c 52 30 2c 23  |8.6B.ADD R0,R0,#|
00006260  31 32 37 0d 36 4c 10 80  20 52 30 2c 52 30 2c 23  |127.6L.. R0,R0,#|
00006270  26 46 46 0d 36 56 14 52  53 42 45 51 20 52 30 2c  |&FF.6V.RSBEQ R0,|
00006280  52 30 2c 23 32 35 35 0d  36 60 04 0d 36 6a 13 4d  |R0,#255.6`..6j.M|
00006290  4f 56 20 52 31 2c 52 30  2c 4c 53 52 23 32 0d 36  |OV R1,R0,LSR#2.6|
000062a0  74 14 80 20 52 31 2c 52  31 2c 23 25 31 31 30 30  |t.. R1,R1,#%1100|
000062b0  30 30 0d 36 7e 11 84 52  20 52 31 32 2c 52 31 32  |00.6~..R R12,R12|
000062c0  2c 52 31 0d 36 88 18 84  52 20 52 31 32 2c 52 31  |,R1.6...R R12,R1|
000062d0  32 2c 23 25 31 30 30 30  30 30 30 0d 36 92 04 0d  |2,#%1000000.6...|
000062e0  36 9c 1c 53 55 42 20 52  31 2c 6d 65 6d 2c 23 35  |6..SUB R1,mem,#5|
000062f0  31 32 20 3b 20 73 68 65  69 6c 61 0d 36 a6 04 0d  |12 ; sheila.6...|
00006300  36 b0 16 53 54 52 42 20  52 31 32 2c 5b 52 31 2c  |6..STRB R12,[R1,|
00006310  23 26 43 30 5d 0d 36 ba  16 53 54 52 42 20 52 31  |#&C0].6..STRB R1|
00006320  32 2c 5b 52 31 2c 23 26  31 38 5d 0d 36 c4 04 0d  |2,[R1,#&18].6...|
00006330  36 ce 15 53 54 52 42 20  52 30 2c 5b 52 31 2c 23  |6..STRB R0,[R1,#|
00006340  26 43 31 5d 0d 36 d8 15  53 54 52 42 20 52 30 2c  |&C1].6..STRB R0,|
00006350  5b 52 31 2c 23 26 31 39  5d 0d 36 e2 0e 4d 4f 56  |[R1,#&19].6..MOV|
00006360  20 52 31 32 2c 23 30 0d  36 ec 16 53 54 52 42 20  | R12,#0.6..STRB |
00006370  52 31 32 2c 5b 52 31 2c  23 26 43 32 5d 0d 36 f6  |R12,[R1,#&C2].6.|
00006380  16 53 54 52 42 20 52 31  32 2c 5b 52 31 2c 23 26  |.STRB R12,[R1,#&|
00006390  31 41 5d 0d 37 00 04 0d  37 0a 0e 4d 4f 56 20 50  |1A].7...7..MOV P|
000063a0  43 2c 52 31 34 0d 37 14  04 0d 37 1e 14 2e 77 72  |C,R14.7...7...wr|
000063b0  69 74 65 5f 41 44 43 5f  6d 6f 75 73 65 0d 37 28  |ite_ADC_mouse.7(|
000063c0  04 0d 37 32 0e 4d 4f 56  20 52 31 33 2c 52 33 0d  |..72.MOV R13,R3.|
000063d0  37 3c 12 53 57 49 20 22  4f 53 5f 4d 6f 75 73 65  |7<.SWI "OS_Mouse|
000063e0  22 0d 37 46 0e 4d 4f 56  20 52 33 2c 52 31 33 0d  |".7F.MOV R3,R13.|
000063f0  37 50 04 0d 37 5a 10 4d  4f 56 20 52 32 2c 23 31  |7P..7Z.MOV R2,#1|
00006400  30 32 34 0d 37 64 10 53  55 42 20 52 32 2c 52 32  |024.7d.SUB R2,R2|
00006410  2c 23 31 0d 37 6e 11 53  55 42 53 20 52 30 2c 52  |,#1.7n.SUBS R0,R|
00006420  32 2c 52 30 0d 37 78 0f  4d 4f 56 4c 54 20 52 30  |2,R0.7x.MOVLT R0|
00006430  2c 23 30 0d 37 82 04 0d  37 8c 11 3b 43 4d 50 20  |,#0.7...7..;CMP |
00006440  52 30 2c 23 31 30 32 34  0d 37 96 13 3b 4d 4f 56  |R0,#1024.7..;MOV|
00006450  47 45 20 52 30 2c 23 31  30 32 34 0d 37 a0 13 3b  |GE R0,#1024.7..;|
00006460  53 55 42 47 45 20 52 30  2c 52 30 2c 23 31 0d 37  |SUBGE R0,R0,#1.7|
00006470  aa 04 0d 37 b4 28 54 53  54 20 52 31 32 2c 23 25  |...7.(TST R12,#%|
00006480  31 20 20 3b 20 6c 65 66  74 2f 72 69 67 68 74 20  |1  ; left/right |
00006490  6f 72 20 75 70 2f 64 6f  77 6e 0d 37 be 0f 4d 4f  |or up/down.7..MO|
000064a0  56 4e 45 20 52 30 2c 52  31 0d 37 c8 04 0d 37 d2  |VNE R0,R1.7...7.|
000064b0  13 4d 4f 56 20 52 31 2c  52 30 2c 4c 53 4c 23 34  |.MOV R1,R0,LSL#4|
000064c0  0d 37 dc 14 80 20 52 31  2c 52 31 2c 23 25 31 31  |.7... R1,R1,#%11|
000064d0  30 30 30 30 0d 37 e6 11  84 52 20 52 31 32 2c 52  |0000.7...R R12,R|
000064e0  31 32 2c 52 31 0d 37 f0  18 84 52 20 52 31 32 2c  |12,R1.7...R R12,|
000064f0  52 31 32 2c 23 25 31 30  30 30 30 30 30 0d 37 fa  |R12,#%1000000.7.|
00006500  04 0d 38 04 1c 53 55 42  20 52 31 2c 6d 65 6d 2c  |..8..SUB R1,mem,|
00006510  23 35 31 32 20 3b 20 73  68 65 69 6c 61 0d 38 0e  |#512 ; sheila.8.|
00006520  04 0d 38 18 16 53 54 52  42 20 52 31 32 2c 5b 52  |..8..STRB R12,[R|
00006530  31 2c 23 26 43 30 5d 0d  38 22 16 53 54 52 42 20  |1,#&C0].8".STRB |
00006540  52 31 32 2c 5b 52 31 2c  23 26 31 38 5d 0d 38 2c  |R12,[R1,#&18].8,|
00006550  04 0d 38 36 14 4d 4f 56  20 52 31 32 2c 52 30 2c  |..86.MOV R12,R0,|
00006560  4c 53 52 23 32 0d 38 40  16 53 54 52 42 20 52 31  |LSR#2.8@.STRB R1|
00006570  32 2c 5b 52 31 2c 23 26  43 31 5d 0d 38 4a 16 53  |2,[R1,#&C1].8J.S|
00006580  54 52 42 20 52 31 32 2c  5b 52 31 2c 23 26 31 39  |TRB R12,[R1,#&19|
00006590  5d 0d 38 54 14 4d 4f 56  20 52 31 32 2c 52 30 2c  |].8T.MOV R12,R0,|
000065a0  4c 53 4c 23 36 0d 38 5e  16 53 54 52 42 20 52 31  |LSL#6.8^.STRB R1|
000065b0  32 2c 5b 52 31 2c 23 26  43 32 5d 0d 38 68 16 53  |2,[R1,#&C2].8h.S|
000065c0  54 52 42 20 52 31 32 2c  5b 52 31 2c 23 26 31 41  |TRB R12,[R1,#&1A|
000065d0  5d 0d 38 72 04 0d 38 7c  0e 4d 4f 56 20 50 43 2c  |].8r..8|.MOV PC,|
000065e0  52 31 34 0d 38 86 04 0d  38 90 04 0d 38 9a 0b 2e  |R14.8...8...8...|
000065f0  74 69 6d 65 72 31 0d 38  a4 15 4c 44 52 20 52 30  |timer1.8..LDR R0|
00006600  2c 5b 6d 65 6d 2c 23 54  31 52 5d 0d 38 ae 10 41  |,[mem,#T1R].8..A|
00006610  44 44 20 52 31 2c 52 31  2c 52 30 0d 38 b8 16 41  |DD R1,R1,R0.8..A|
00006620  44 44 20 52 31 2c 52 31  2c 23 32 20 3c 3c 20 31  |DD R1,R1,#2 << 1|
00006630  36 0d 38 c2 14 53 54 52  20 52 31 2c 5b 6d 65 6d  |6.8..STR R1,[mem|
00006640  2c 23 54 31 5d 0d 38 cc  04 0d 38 d6 1c 53 55 42  |,#T1].8...8..SUB|
00006650  20 52 30 2c 6d 65 6d 2c  23 35 31 32 20 3b 20 73  | R0,mem,#512 ; s|
00006660  68 65 69 6c 61 0d 38 e0  04 0d 38 ea 1c 4c 44 52  |heila.8...8..LDR|
00006670  42 20 52 31 2c 5b 52 30  2c 23 26 34 42 5d 20 3b  |B R1,[R0,#&4B] ;|
00006680  20 46 45 34 42 0d 38 f4  15 54 53 54 20 52 31 2c  | FE4B.8..TST R1,|
00006690  23 25 30 31 30 30 30 30  30 30 0d 38 fe 0c ec 51  |#%01000000.8...Q|
000066a0  20 52 32 2c 23 30 0d 39  08 1b 53 54 52 45 51 42  | R2,#0.9..STREQB|
000066b0  20 52 32 2c 5b 6d 65 6d  2c 23 54 31 6d 6f 64 65  | R2,[mem,#T1mode|
000066c0  5d 0d 39 12 04 0d 39 1c  15 54 53 54 20 52 31 2c  |].9...9..TST R1,|
000066d0  23 25 31 30 30 30 30 30  30 30 0d 39 26 1e 4c 44  |#%10000000.9&.LD|
000066e0  52 4e 45 42 20 52 32 2c  5b 52 30 2c 23 26 34 30  |RNEB R2,[R0,#&40|
000066f0  5d 20 3b 20 46 45 34 30  0d 39 30 12 82 4e 45 20  |] ; FE40.90..NE |
00006700  52 32 2c 52 32 2c 23 26  38 30 0d 39 3a 1e 53 54  |R2,R2,#&80.9:.ST|
00006710  52 4e 45 42 20 52 32 2c  5b 52 30 2c 23 26 34 30  |RNEB R2,[R0,#&40|
00006720  5d 20 3b 20 46 45 34 30  0d 39 44 04 0d 39 4e 16  |] ; FE40.9D..9N.|
00006730  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 69 66  |LDRB R1,[mem,#if|
00006740  72 5d 0d 39 58 33 84 52  20 52 31 2c 52 31 2c 23  |r].9X3.R R1,R1,#|
00006750  25 30 31 30 30 30 30 30  30 20 3b 20 69 6e 74 65  |%01000000 ; inte|
00006760  72 72 75 70 74 20 69 73  20 66 72 6f 6d 20 74 69  |rrupt is from ti|
00006770  6d 65 72 20 31 0d 39 62  16 53 54 52 42 20 52 31  |mer 1.9b.STRB R1|
00006780  2c 5b 6d 65 6d 2c 23 69  66 72 5d 0d 39 6c 04 0d  |,[mem,#ifr].9l..|
00006790  39 76 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 39 80  |9v.MOV PC,R14.9.|
000067a0  04 0d 39 8a 0b 2e 74 69  6d 65 72 32 0d 39 94 19  |..9...timer2.9..|
000067b0  4c 44 52 42 20 52 30 2c  5b 6d 65 6d 2c 23 54 32  |LDRB R0,[mem,#T2|
000067c0  6d 6f 64 65 5d 0d 39 9e  0d 43 4d 50 20 52 30 2c  |mode].9..CMP R0,|
000067d0  23 30 0d 39 a8 0d ec 51  20 50 43 2c 52 31 34 0d  |#0.9...Q PC,R14.|
000067e0  39 b2 0d 4d 4f 56 20 52  30 2c 23 30 0d 39 bc 19  |9..MOV R0,#0.9..|
000067f0  53 54 52 42 20 52 30 2c  5b 6d 65 6d 2c 23 54 32  |STRB R0,[mem,#T2|
00006800  6d 6f 64 65 5d 0d 39 c6  04 0d 39 d0 16 4c 44 52  |mode].9...9..LDR|
00006810  42 20 52 31 2c 5b 6d 65  6d 2c 23 69 66 72 5d 0d  |B R1,[mem,#ifr].|
00006820  39 da 17 84 52 20 52 31  2c 52 31 2c 23 25 30 30  |9...R R1,R1,#%00|
00006830  31 30 30 30 30 30 0d 39  e4 16 53 54 52 42 20 52  |100000.9..STRB R|
00006840  31 2c 5b 6d 65 6d 2c 23  69 66 72 5d 0d 39 ee 04  |1,[mem,#ifr].9..|
00006850  0d 39 f8 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 3a  |.9..MOV PC,R14.:|
00006860  02 04 0d 3a 0c 0b 2e 74  69 6d 65 72 33 0d 3a 16  |...:...timer3.:.|
00006870  15 4c 44 52 20 52 30 2c  5b 6d 65 6d 2c 23 54 33  |.LDR R0,[mem,#T3|
00006880  52 5d 0d 3a 20 10 41 44  44 20 52 31 2c 52 31 2c  |R].: .ADD R1,R1,|
00006890  52 30 0d 3a 2a 14 53 54  52 20 52 31 2c 5b 6d 65  |R0.:*.STR R1,[me|
000068a0  6d 2c 23 54 33 5d 0d 3a  34 04 0d 3a 3e 1c 53 55  |m,#T3].:4..:>.SU|
000068b0  42 20 52 30 2c 6d 65 6d  2c 23 35 31 32 20 3b 20  |B R0,mem,#512 ; |
000068c0  73 68 65 69 6c 61 0d 3a  48 04 0d 3a 52 15 4c 44  |sheila.:H..:R.LD|
000068d0  52 42 20 52 31 2c 5b 52  30 2c 23 26 36 42 5d 0d  |RB R1,[R0,#&6B].|
000068e0  3a 5c 15 54 53 54 20 52  31 2c 23 25 30 31 30 30  |:\.TST R1,#%0100|
000068f0  30 30 30 30 0d 3a 66 14  42 4e 45 20 54 33 6d 6f  |0000.:f.BNE T3mo|
00006900  64 65 5f 73 6b 69 70 32  0d 3a 70 04 0d 3a 7a 19  |de_skip2.:p..:z.|
00006910  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 54 33  |LDRB R1,[mem,#T3|
00006920  6d 6f 64 65 5d 0d 3a 84  0d 43 4d 50 20 52 31 2c  |mode].:..CMP R1,|
00006930  23 31 0d 3a 8e 14 3b 53  57 49 4e 45 20 26 31 30  |#1.:..;SWINE &10|
00006940  30 2b 97 22 31 22 0d 3a  98 14 3b 53 57 49 45 51  |0+."1".:..;SWIEQ|
00006950  20 26 31 30 30 2b 97 22  30 22 0d 3a a2 13 42 4e  | &100+."0".:..BN|
00006960  45 20 54 33 6d 6f 64 65  5f 73 6b 69 70 0d 3a ac  |E T3mode_skip.:.|
00006970  04 0d 3a b6 11 2e 54 33  6d 6f 64 65 5f 73 6b 69  |..:...T3mode_ski|
00006980  70 32 0d 3a c0 17 4c 44  52 42 20 52 31 2c 5b 6d  |p2.:..LDRB R1,[m|
00006990  65 6d 2c 23 69 66 72 32  5d 0d 3a ca 17 84 52 20  |em,#ifr2].:...R |
000069a0  52 31 2c 52 31 2c 23 25  30 31 30 30 30 30 30 30  |R1,R1,#%01000000|
000069b0  0d 3a d4 17 53 54 52 42  20 52 31 2c 5b 6d 65 6d  |.:..STRB R1,[mem|
000069c0  2c 23 69 66 72 32 5d 0d  3a de 04 0d 3a e8 04 0d  |,#ifr2].:...:...|
000069d0  3a f2 1d 3b 4c 44 52 42  20 52 31 2c 5b 52 30 2c  |:..;LDRB R1,[R0,|
000069e0  23 26 36 42 5d 20 3b 20  46 45 36 42 0d 3a fc 16  |#&6B] ; FE6B.:..|
000069f0  3b 54 53 54 20 52 31 2c  23 25 30 31 30 30 30 30  |;TST R1,#%010000|
00006a00  30 30 0d 3b 06 0d 3b ec  51 20 52 32 2c 23 30 0d  |00.;..;.Q R2,#0.|
00006a10  3b 10 10 3b 4d 4f 56 4e  45 20 52 32 2c 23 31 0d  |;..;MOVNE R2,#1.|
00006a20  3b 1a 1c 3b 53 54 52 45  51 42 20 52 32 2c 5b 6d  |;..;STREQB R2,[m|
00006a30  65 6d 2c 23 54 33 6d 6f  64 65 5d 0d 3b 24 14 3b  |em,#T3mode].;$.;|
00006a40  53 57 49 45 51 20 26 31  30 30 2b 97 22 7a 22 0d  |SWIEQ &100+."z".|
00006a50  3b 2e 04 0d 3b 38 10 2e  54 33 6d 6f 64 65 5f 73  |;...;8..T3mode_s|
00006a60  6b 69 70 0d 3b 42 0d 4d  4f 56 20 52 32 2c 23 30  |kip.;B.MOV R2,#0|
00006a70  0d 3b 4c 19 53 54 52 42  20 52 32 2c 5b 6d 65 6d  |.;L.STRB R2,[mem|
00006a80  2c 23 54 33 6d 6f 64 65  5d 0d 3b 56 04 0d 3b 60  |,#T3mode].;V..;`|
00006a90  1d 3b 4c 44 52 42 20 52  31 2c 5b 52 30 2c 23 26  |.;LDRB R1,[R0,#&|
00006aa0  36 42 5d 20 3b 20 46 45  36 42 0d 3b 6a 16 3b 54  |6B] ; FE6B.;j.;T|
00006ab0  53 54 20 52 31 2c 23 25  31 30 30 30 30 30 30 30  |ST R1,#%10000000|
00006ac0  0d 3b 74 1d 3b 4c 44 52  42 20 52 32 2c 5b 52 30  |.;t.;LDRB R2,[R0|
00006ad0  2c 23 26 36 30 5d 20 3b  20 46 45 36 30 0d 3b 7e  |,#&60] ; FE60.;~|
00006ae0  13 3b 82 4e 45 20 52 32  2c 52 32 2c 23 26 38 30  |.;.NE R2,R2,#&80|
00006af0  0d 3b 88 14 3b 84 52 45  51 20 52 32 2c 52 32 2c  |.;..;.REQ R2,R2,|
00006b00  23 26 38 30 0d 3b 92 1d  3b 53 54 52 42 20 52 32  |#&80.;..;STRB R2|
00006b10  2c 5b 52 30 2c 23 26 36  30 5d 20 3b 20 46 45 36  |,[R0,#&60] ; FE6|
00006b20  30 0d 3b 9c 04 0d 3b a6  1c 4c 44 52 42 20 52 31  |0.;...;..LDRB R1|
00006b30  2c 5b 52 30 2c 23 26 36  42 5d 20 3b 20 46 45 36  |,[R0,#&6B] ; FE6|
00006b40  42 0d 3b b0 10 82 20 52  31 2c 52 31 2c 23 26 43  |B.;... R1,R1,#&C|
00006b50  30 0d 3b ba 0f 54 53 54  20 52 31 2c 23 26 43 30  |0.;..TST R1,#&C0|
00006b60  0d 3b c4 1c 4c 44 52 42  20 52 32 2c 5b 52 30 2c  |.;..LDRB R2,[R0,|
00006b70  23 26 36 30 5d 20 3b 20  46 45 36 30 0d 3b ce 12  |#&60] ; FE60.;..|
00006b80  82 45 51 20 52 32 2c 52  32 2c 23 26 38 30 0d 3b  |.EQ R2,R2,#&80.;|
00006b90  d8 13 84 52 4e 45 20 52  32 2c 52 32 2c 23 26 38  |...RNE R2,R2,#&8|
00006ba0  30 0d 3b e2 1c 53 54 52  42 20 52 32 2c 5b 52 30  |0.;..STRB R2,[R0|
00006bb0  2c 23 26 36 30 5d 20 3b  20 46 45 36 30 0d 3b ec  |,#&60] ; FE60.;.|
00006bc0  04 0d 3b f6 04 0d 3c 00  0e 4d 4f 56 20 50 43 2c  |..;...<..MOV PC,|
00006bd0  52 31 34 0d 3c 0a 10 2e  72 65 74 75 72 6e 5f 61  |R14.<...return_a|
00006be0  64 64 72 0d 3c 14 0a 45  51 55 44 20 30 0d 3c 1e  |ddr.<..EQUD 0.<.|
00006bf0  04 0d 3c 28 0e 2e 72 6f  6d 73 5f 61 64 64 72 0d  |..<(..roms_addr.|
00006c00  3c 32 0a 45 51 55 44 20  30 0d 3c 3c 04 0d 3c 46  |<2.EQUD 0.<<..<F|
00006c10  0b 2e 74 69 6d 65 72 34  0d 3c 50 19 4c 44 52 42  |..timer4.<P.LDRB|
00006c20  20 52 31 2c 5b 6d 65 6d  2c 23 54 34 6d 6f 64 65  | R1,[mem,#T4mode|
00006c30  5d 0d 3c 5a 0d 43 4d 50  20 52 31 2c 23 30 0d 3c  |].<Z.CMP R1,#0.<|
00006c40  64 0d ec 51 20 50 43 2c  52 31 34 0d 3c 6e 0d 4d  |d..Q PC,R14.<n.M|
00006c50  4f 56 20 52 30 2c 23 30  0d 3c 78 19 53 54 52 42  |OV R0,#0.<x.STRB|
00006c60  20 52 30 2c 5b 6d 65 6d  2c 23 54 34 6d 6f 64 65  | R0,[mem,#T4mode|
00006c70  5d 0d 3c 82 04 0d 3c 8c  04 0d 3c 96 17 4c 44 52  |].<...<...<..LDR|
00006c80  42 20 52 31 2c 5b 6d 65  6d 2c 23 69 66 72 32 5d  |B R1,[mem,#ifr2]|
00006c90  0d 3c a0 33 84 52 20 52  31 2c 52 31 2c 23 25 30  |.<.3.R R1,R1,#%0|
00006ca0  30 31 30 30 30 30 30 20  3b 20 69 6e 74 65 72 72  |0100000 ; interr|
00006cb0  75 70 74 20 69 73 20 66  72 6f 6d 20 74 69 6d 65  |upt is from time|
00006cc0  72 20 34 0d 3c aa 17 53  54 52 42 20 52 31 2c 5b  |r 4.<..STRB R1,[|
00006cd0  6d 65 6d 2c 23 69 66 72  32 5d 0d 3c b4 04 0d 3c  |mem,#ifr2].<...<|
00006ce0  be 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 3c c8 04  |..MOV PC,R14.<..|
00006cf0  0d 3c d2 04 0d 3c dc 0c  3b 2e 74 72 61 63 65 32  |.<...<..;.trace2|
00006d00  0d 3c e6 0b 3b 45 51 55  44 20 30 0d 3c f0 04 0d  |.<..;EQUD 0.<...|
00006d10  3c fa 0a 2e 72 65 73 65  74 0d 3d 04 0e 3b 4d 4f  |<...reset.=..;MO|
00006d20  56 20 52 31 2c 23 31 0d  3d 0e 11 3b 53 54 52 20  |V R1,#1.=..;STR |
00006d30  52 31 2c 74 72 61 63 65  0d 3d 18 2a 4d 4f 56 20  |R1,trace.=.*MOV |
00006d40  52 30 2c 23 31 35 20 3a  20 4d 4f 56 20 52 31 2c  |R0,#15 : MOV R1,|
00006d50  23 30 20 3a 20 53 57 49  20 22 4f 53 5f 42 79 74  |#0 : SWI "OS_Byt|
00006d60  65 22 0d 3d 22 12 4d 4f  56 20 52 30 2c 23 26 31  |e".=".MOV R0,#&1|
00006d70  30 30 30 30 0d 3d 2c 10  53 55 42 20 52 30 2c 52  |0000.=,.SUB R0,R|
00006d80  30 2c 23 34 0d 3d 36 13  4c 44 52 20 52 30 2c 5b  |0,#4.=6.LDR R0,[|
00006d90  6d 65 6d 2c 52 30 5d 0d  3d 40 15 4d 4f 56 20 7a  |mem,R0].=@.MOV z|
00006da0  70 63 2c 52 30 2c 4c 53  4c 23 31 36 0d 3d 4a 27  |pc,R0,LSL#16.=J'|
00006db0  42 49 43 20 46 2c 46 2c  23 25 31 30 30 30 20 3b  |BIC F,F,#%1000 ;|
00006dc0  20 63 6c 65 61 72 20 44  65 63 69 6d 61 6c 20 6d  | clear Decimal m|
00006dd0  6f 64 65 0d 3d 54 29 84  52 20 46 2c 46 2c 23 25  |ode.=T).R F,F,#%|
00006de0  31 30 30 20 20 3b 20 73  65 74 20 69 6e 74 65 72  |100  ; set inter|
00006df0  72 75 70 74 20 64 69 73  61 62 6c 65 0d 3d 5e 0b  |rupt disable.=^.|
00006e00  a4 66 65 74 63 68 32 0d  3d 68 04 0d 3d 72 04 0d  |.fetch2.=h..=r..|
00006e10  3d 7c 09 2e 65 78 69 74  0d 3d 86 0d 4d 4f 56 20  |=|..exit.=..MOV |
00006e20  52 30 2c 23 30 0d 3d 90  0e 2e 72 61 77 5f 65 78  |R0,#0.=...raw_ex|
00006e30  69 74 32 0d 3d 9a 17 53  57 49 20 22 36 35 30 32  |it2.=..SWI "6502|
00006e40  5f 47 65 74 6b 64 61 74  61 22 0d 3d a4 0d 2e 72  |_Getkdata".=...r|
00006e50  61 77 5f 65 78 69 74 0d  3d ae 17 53 54 52 20 74  |aw_exit.=..STR t|
00006e60  69 6d 65 2c 5b 6d 65 6d  2c 23 6d 69 6e 5d 0d 3d  |ime,[mem,#min].=|
00006e70  b8 12 53 54 52 20 41 2c  5b 6d 65 6d 2c 23 61 5d  |..STR A,[mem,#a]|
00006e80  0d 3d c2 12 53 54 52 20  58 2c 5b 6d 65 6d 2c 23  |.=..STR X,[mem,#|
00006e90  78 5d 0d 3d cc 12 53 54  52 20 59 2c 5b 6d 65 6d  |x].=..STR Y,[mem|
00006ea0  2c 23 79 5d 0d 3d d6 14  53 54 52 20 53 50 2c 5b  |,#y].=..STR SP,[|
00006eb0  6d 65 6d 2c 23 73 70 5d  0d 3d e0 12 53 54 52 20  |mem,#sp].=..STR |
00006ec0  46 2c 5b 6d 65 6d 2c 23  66 5d 0d 3d ea 1b 53 54  |F,[mem,#f].=..ST|
00006ed0  52 20 7a 70 63 2c 5b 6d  65 6d 2c 23 70 63 5f 73  |R zpc,[mem,#pc_s|
00006ee0  74 6f 72 65 5d 0d 3d f4  17 4c 44 52 20 52 31 33  |tore].=..LDR R13|
00006ef0  2c 72 65 74 75 72 6e 5f  61 64 64 72 0d 3d fe 1a  |,return_addr.=..|
00006f00  4c 44 4d 46 44 20 52 31  33 21 2c 7b 52 31 2d 52  |LDMFD R13!,{R1-R|
00006f10  31 32 2c 50 43 7d 0d 3e  08 0f 3b 4d 4f 56 20 50  |12,PC}.>..;MOV P|
00006f20  43 2c 52 31 34 0d 3e 12  04 0d 3e 1c 04 0d 3e 26  |C,R14.>...>...>&|
00006f30  0e 2e 66 65 30 38 5f 72  65 61 64 0d 3e 30 0a 45  |..fe08_read.>0.E|
00006f40  51 55 42 20 30 0d 3e 3a  0f 2e 66 65 30 38 5f 77  |QUB 0.>:..fe08_w|
00006f50  72 69 74 65 0d 3e 44 0a  45 51 55 42 20 30 0d 3e  |rite.>D.EQUB 0.>|
00006f60  4e 09 2e 66 65 30 39 0d  3e 58 0a 45 51 55 42 20  |N..fe09.>X.EQUB |
00006f70  30 0d 3e 62 0a 3b 2e 66  65 31 30 0d 3e 6c 0b 3b  |0.>b.;.fe10.>l.;|
00006f80  45 51 55 42 20 30 0d 3e  76 09 41 4c 49 47 4e 0d  |EQUB 0.>v.ALIGN.|
00006f90  3e 80 0c 2e 74 62 75 66  66 65 72 0d 3e 8a 0a 45  |>...tbuffer.>..E|
00006fa0  51 55 44 20 30 0d 3e 94  04 0d 3e 9e 0f 2e 74 61  |QUD 0.>...>...ta|
00006fb0  70 65 5f 66 65 74 63 68  0d 3e a8 18 3b 4c 44 52  |pe_fetch.>..;LDR|
00006fc0  20 52 30 2c 5b 6d 65 6d  2c 23 74 61 70 65 52 5d  | R0,[mem,#tapeR]|
00006fd0  0d 3e b2 30 3b 4d 4f 56  20 52 30 2c 23 26 33 34  |.>.0;MOV R0,#&34|
00006fe0  30 30 20 3b 20 32 30 30  30 30 30 30 2f 28 31 32  |00 ; 2000000/(12|
00006ff0  30 30 2f 38 29 7e 3d 31  32 30 30 20 62 61 75 64  |00/8)~=1200 baud|
00007000  0d 3e bc 11 4d 4f 56 20  52 30 2c 23 26 36 30 30  |.>..MOV R0,#&600|
00007010  30 0d 3e c6 11 41 44 44  53 20 52 31 2c 52 31 2c  |0.>..ADDS R1,R1,|
00007020  52 30 0d 3e d0 13 4d 4f  56 4c 45 20 52 31 2c 23  |R0.>..MOVLE R1,#|
00007030  26 36 30 30 30 0d 3e da  04 0d 3e e4 17 4c 44 52  |&6000.>...>..LDR|
00007040  42 20 52 30 2c 5b 6d 65  6d 2c 23 66 65 31 30 5d  |B R0,[mem,#fe10]|
00007050  0d 3e ee 1f 54 53 54 20  52 30 2c 23 26 38 30 20  |.>..TST R0,#&80 |
00007060  3b 20 69 73 20 2a 4d 6f  74 6f 72 20 6f 6e 3f 0d  |; is *Motor on?.|
00007070  3e f8 12 ec 51 20 52 31  2c 23 26 31 30 30 30 30  |>...Q R1,#&10000|
00007080  30 0d 3f 02 04 0d 3f 0c  1c 53 54 52 20 52 31 2c  |0.?...?..STR R1,|
00007090  5b 6d 65 6d 2c 23 74 61  70 65 5f 63 6f 75 6e 74  |[mem,#tape_count|
000070a0  5d 0d 3f 16 04 0d 3f 20  0d ec 51 20 50 43 2c 52  |].?...? ..Q PC,R|
000070b0  31 34 0d 3f 2a 04 0d 3f  34 1e 4c 44 52 42 20 52  |14.?*..?4.LDRB R|
000070c0  31 2c 5b 6d 65 6d 2c 23  74 61 70 65 5f 68 61 6e  |1,[mem,#tape_han|
000070d0  64 6c 65 5d 0d 3f 3e 0d  43 4d 50 20 52 31 2c 23  |dle].?>.CMP R1,#|
000070e0  30 0d 3f 48 0d ec 51 20  50 43 2c 52 31 34 0d 3f  |0.?H..Q PC,R14.?|
000070f0  52 04 0d 3f 5c 0d 2e 74  61 70 65 5f 67 65 74 0d  |R..?\..tape_get.|
00007100  3f 66 12 53 57 49 20 22  58 4f 53 5f 42 47 65 74  |?f.SWI "XOS_BGet|
00007110  22 0d 3f 70 0f 4d 4f 56  56 53 20 52 31 2c 23 30  |".?p.MOVVS R1,#0|
00007120  0d 3f 7a 20 53 54 52 56  53 42 20 52 31 2c 5b 6d  |.?z STRVSB R1,[m|
00007130  65 6d 2c 23 74 61 70 65  5f 68 61 6e 64 6c 65 5d  |em,#tape_handle]|
00007140  0d 3f 84 10 4d 4f 56 56  53 20 50 43 2c 52 31 34  |.?..MOVVS PC,R14|
00007150  0d 3f 8e 04 0d 3f 98 13  42 43 43 20 74 61 70 65  |.?...?..BCC tape|
00007160  5f 73 6b 69 70 31 30 0d  3f a2 04 0d 3f ac 0d 4d  |_skip10.?...?..M|
00007170  4f 56 20 52 30 2c 23 31  0d 3f b6 0d 4d 4f 56 20  |OV R0,#1.?..MOV |
00007180  52 32 2c 23 30 0d 3f c0  29 53 57 49 20 22 58 4f  |R2,#0.?.)SWI "XO|
00007190  53 5f 41 72 67 73 22 20  3b 20 72 65 77 69 6e 64  |S_Args" ; rewind|
000071a0  20 74 61 70 65 20 74 6f  20 73 74 61 72 74 0d 3f  | tape to start.?|
000071b0  ca 0f 4d 4f 56 56 53 20  52 31 2c 23 30 0d 3f d4  |..MOVVS R1,#0.?.|
000071c0  20 53 54 52 56 53 42 20  52 31 2c 5b 6d 65 6d 2c  | STRVSB R1,[mem,|
000071d0  23 74 61 70 65 5f 68 61  6e 64 6c 65 5d 0d 3f de  |#tape_handle].?.|
000071e0  10 4d 4f 56 56 53 20 50  43 2c 52 31 34 0d 3f e8  |.MOVVS PC,R14.?.|
000071f0  04 0d 3f f2 10 2e 74 61  70 65 5f 73 6b 69 70 31  |..?...tape_skip1|
00007200  30 0d 3f fc 04 0d 40 06  0f 43 4d 50 20 52 30 2c  |0.?...@..CMP R0,|
00007210  23 26 46 46 0d 40 10 0e  42 4e 45 20 6e 6f 74 5f  |#&FF.@..BNE not_|
00007220  46 46 0d 40 1a 14 53 57  49 45 51 20 22 58 4f 53  |FF.@..SWIEQ "XOS|
00007230  5f 42 47 65 74 22 0d 40  24 0f 43 4d 50 20 52 30  |_BGet".@$.CMP R0|
00007240  2c 23 26 46 46 0d 40 2e  0e 42 45 51 20 6e 6f 74  |,#&FF.@..BEQ not|
00007250  5f 46 46 0d 40 38 04 0d  40 42 15 4c 44 52 42 20  |_FF.@8..@B.LDRB |
00007260  52 31 2c 66 65 30 38 5f  72 65 61 64 0d 40 4c 13  |R1,fe08_read.@L.|
00007270  42 49 43 20 52 31 2c 52  31 2c 23 25 31 30 30 0d  |BIC R1,R1,#%100.|
00007280  40 56 11 80 20 52 30 2c  52 30 2c 23 25 31 30 30  |@V.. R0,R0,#%100|
00007290  0d 40 60 0f 84 52 20 52  31 2c 52 31 2c 52 30 0d  |.@`..R R1,R1,R0.|
000072a0  40 6a 17 3b 84 52 20 52  31 2c 52 31 2c 23 26 38  |@j.;.R R1,R1,#&8|
000072b0  30 20 3b 20 3f 3f 0d 40  74 15 53 54 52 42 20 52  |0 ; ??.@t.STRB R|
000072c0  31 2c 66 65 30 38 5f 72  65 61 64 0d 40 7e 04 0d  |1,fe08_read.@~..|
000072d0  40 88 0d 43 4d 50 20 52  30 2c 23 30 0d 40 92 04  |@..CMP R0,#0.@..|
000072e0  0d 40 9c 13 3b 4d 4f 56  20 52 30 2c 23 26 31 30  |.@..;MOV R0,#&10|
000072f0  30 30 30 0d 40 a6 1d 3b  53 54 52 20 52 30 2c 5b  |000.@..;STR R0,[|
00007300  6d 65 6d 2c 23 74 61 70  65 5f 63 6f 75 6e 74 5d  |mem,#tape_count]|
00007310  0d 40 b0 04 0d 40 ba 13  3b 42 20 64 6f 5f 69 6e  |.@...@..;B do_in|
00007320  74 65 72 72 75 70 74 0d  40 c4 0d ec 51 20 50 43  |terrupt.@...Q PC|
00007330  2c 52 31 34 0d 40 ce 04  0d 40 d8 11 84 52 20 52  |,R14.@...@...R R|
00007340  31 2c 52 31 2c 23 26 38  30 0d 40 e2 15 53 54 52  |1,R1,#&80.@..STR|
00007350  42 20 52 31 2c 66 65 30  38 5f 72 65 61 64 0d 40  |B R1,fe08_read.@|
00007360  ec 12 42 20 64 6f 5f 69  6e 74 65 72 72 75 70 74  |..B do_interrupt|
00007370  0d 40 f6 04 0d 41 00 0b  2e 6e 6f 74 5f 46 46 0d  |.@...A...not_FF.|
00007380  41 0a 10 53 54 52 42 20  52 30 2c 66 65 30 39 0d  |A..STRB R0,fe09.|
00007390  41 14 04 0d 41 1e 04 0d  41 28 16 4c 44 52 42 20  |A...A...A(.LDRB |
000073a0  52 30 2c 66 65 30 38 5f  77 72 69 74 65 0d 41 32  |R0,fe08_write.A2|
000073b0  2e 54 53 54 20 52 30 2c  23 26 38 30 20 3b 20 72  |.TST R0,#&80 ; r|
000073c0  65 63 65 69 76 65 20 69  6e 74 65 72 72 75 70 74  |eceive interrupt|
000073d0  20 65 6e 61 62 6c 65 20  62 69 74 0d 41 3c 0d ec  | enable bit.A<..|
000073e0  51 20 50 43 2c 52 31 34  0d 41 46 04 0d 41 50 15  |Q PC,R14.AF..AP.|
000073f0  4c 44 52 42 20 52 30 2c  66 65 30 38 5f 72 65 61  |LDRB R0,fe08_rea|
00007400  64 0d 41 5a 11 84 52 20  52 30 2c 52 30 2c 23 26  |d.AZ..R R0,R0,#&|
00007410  38 31 0d 41 64 15 53 54  52 42 20 52 30 2c 66 65  |81.Ad.STRB R0,fe|
00007420  30 38 5f 72 65 61 64 0d  41 6e 04 0d 41 78 12 42  |08_read.An..Ax.B|
00007430  20 64 6f 5f 69 6e 74 65  72 72 75 70 74 0d 41 82  | do_interrupt.A.|
00007440  0f 3b 4d 4f 56 20 50 43  2c 52 31 34 0d 41 8c 04  |.;MOV PC,R14.A..|
00007450  0d 41 96 0d 2e 72 65 61  64 46 45 30 38 0d 41 a0  |.A...readFE08.A.|
00007460  14 3b 4c 44 52 42 20 52  31 2c 74 62 75 66 66 65  |.;LDRB R1,tbuffe|
00007470  72 0d 41 aa 17 3b 4c 44  52 42 20 52 30 2c 5b 6d  |r.A..;LDRB R0,[m|
00007480  65 6d 2c 23 26 43 32 5d  0d 41 b4 0e 3b 43 4d 50  |em,#&C2].A..;CMP|
00007490  20 52 30 2c 23 31 0d 41  be 15 4c 44 52 42 20 52  | R0,#1.A..LDRB R|
000074a0  30 2c 66 65 30 38 5f 72  65 61 64 0d 41 c8 13 3b  |0,fe08_read.A..;|
000074b0  43 4d 50 45 51 20 52 31  2c 23 97 22 2a 22 0d 41  |CMPEQ R1,#."*".A|
000074c0  d2 15 3b 84 52 45 51 20  52 30 2c 52 30 2c 23 25  |..;.REQ R0,R0,#%|
000074d0  31 30 30 0d 41 dc 16 3b  42 49 43 4e 45 20 52 30  |100.A..;BICNE R0|
000074e0  2c 52 30 2c 23 25 31 30  30 0d 41 e6 0e 4d 4f 56  |,R0,#%100.A..MOV|
000074f0  20 50 43 2c 52 31 34 0d  41 f0 04 0d 41 fa 0d 2e  | PC,R14.A...A...|
00007500  72 65 61 64 46 45 30 39  0d 42 04 15 4c 44 52 42  |readFE09.B..LDRB|
00007510  20 52 30 2c 66 65 30 38  5f 72 65 61 64 0d 42 0e  | R0,fe08_read.B.|
00007520  12 42 49 43 20 52 30 2c  52 30 2c 23 26 38 31 0d  |.BIC R0,R0,#&81.|
00007530  42 18 15 53 54 52 42 20  52 30 2c 66 65 30 38 5f  |B..STRB R0,fe08_|
00007540  72 65 61 64 0d 42 22 10  4c 44 52 42 20 52 30 2c  |read.B".LDRB R0,|
00007550  66 65 30 39 0d 42 2c 0e  4d 4f 56 20 50 43 2c 52  |fe09.B,.MOV PC,R|
00007560  31 34 0d 42 36 04 0d 42  40 0e 2e 77 72 69 74 65  |14.B6..B@..write|
00007570  46 45 30 38 0d 42 4a 16  53 54 52 42 20 52 30 2c  |FE08.BJ.STRB R0,|
00007580  66 65 30 38 5f 77 72 69  74 65 0d 42 54 0e 4d 4f  |fe08_write.BT.MO|
00007590  56 20 50 43 2c 52 31 34  0d 42 5e 04 0d 42 68 0e  |V PC,R14.B^..Bh.|
000075a0  2e 77 72 69 74 65 46 45  30 39 0d 42 72 0e 4d 4f  |.writeFE09.Br.MO|
000075b0  56 20 50 43 2c 52 31 34  0d 42 7c 04 0d 42 86 0d  |V PC,R14.B|..B..|
000075c0  2e 72 65 61 64 46 45 31  30 0d 42 90 0f 4d 4f 56  |.readFE10.B..MOV|
000075d0  20 52 30 2c 23 26 41 32  0d 42 9a 0e 4d 4f 56 20  | R0,#&A2.B..MOV |
000075e0  50 43 2c 52 31 34 0d 42  a4 04 0d 42 ae 0e 2e 77  |PC,R14.B...B...w|
000075f0  72 69 74 65 46 45 31 30  0d 42 b8 17 53 54 52 42  |riteFE10.B..STRB|
00007600  20 52 30 2c 5b 6d 65 6d  2c 23 66 65 31 30 5d 0d  | R0,[mem,#fe10].|
00007610  42 c2 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 42 cc  |B..MOV PC,R14.B.|
00007620  04 0d 42 d6 0a 2e 64 75  6d 6d 79 0d 42 e0 0e 4d  |..B...dummy.B..M|
00007630  4f 56 20 50 43 2c 52 31  34 0d 42 ea 04 0d 42 f4  |OV PC,R14.B...B.|
00007640  0c 3b 2e 52 4f 4d 53 45  4c 0d 42 fe 0b 3b 45 51  |.;.ROMSEL.B..;EQ|
00007650  55 44 20 30 0d 43 08 04  0d 43 12 18 3b 2e 72 6f  |UD 0.C...C..;.ro|
00007660  6d 20 3b 20 52 4f 4d 20  70 61 67 65 64 20 69 6e  |m ; ROM paged in|
00007670  0d 43 1c 0b 3b 45 51 55  44 20 30 0d 43 26 04 0d  |.C..;EQUD 0.C&..|
00007680  43 30 23 3b 2e 52 4f 4d  52 41 4d 20 3b 20 77 68  |C0#;.ROMRAM ; wh|
00007690  69 63 68 20 62 61 6e 6b  73 20 61 72 65 20 52 41  |ich banks are RA|
000076a0  4d 3f 0d 43 3a 29 3b 45  51 55 44 20 30 20 3a 20  |M?.C:);EQUD 0 : |
000076b0  3b 45 51 55 44 20 30 20  3a 20 3b 45 51 55 44 20  |;EQUD 0 : ;EQUD |
000076c0  30 20 3a 20 3b 45 51 55  44 20 30 0d 43 44 04 0d  |0 : ;EQUD 0.CD..|
000076d0  43 4e 0c 3b 2e 41 43 43  43 4f 4e 0d 43 58 0b 3b  |CN.;.ACCCON.CX.;|
000076e0  45 51 55 44 20 30 0d 43  62 04 0d 43 6c 04 0d 43  |EQUD 0.Cb..Cl..C|
000076f0  76 15 2e 73 77 61 70 5f  6d 61 69 6e 5f 73 68 61  |v..swap_main_sha|
00007700  64 6f 77 0d 43 80 04 0d  43 8a 20 53 54 4d 46 44  |dow.C...C. STMFD|
00007710  20 6d 65 6d 2c 7b 52 30  2d 52 32 2c 52 34 2d 52  | mem,{R0-R2,R4-R|
00007720  31 31 2c 52 31 34 7d 0d  43 94 16 41 44 44 20 52  |11,R14}.C..ADD R|
00007730  31 34 2c 6d 65 6d 2c 23  26 33 30 30 30 0d 43 9e  |14,mem,#&3000.C.|
00007740  17 53 55 42 20 52 31 33  2c 6d 65 6d 2c 23 26 31  |.SUB R13,mem,#&1|
00007750  30 30 30 30 0d 43 a8 12  4d 4f 56 20 52 31 32 2c  |0000.C..MOV R12,|
00007760  23 26 35 30 30 30 0d 43  b2 0e 2e 73 77 61 70 5f  |#&5000.C...swap_|
00007770  6c 6f 6f 70 0d 43 bc 1b  4c 44 4d 49 41 20 52 31  |loop.C..LDMIA R1|
00007780  34 2c 7b 52 30 2d 52 32  2c 52 34 2d 52 35 7d 0d  |4,{R0-R2,R4-R5}.|
00007790  43 c6 14 3b 4c 44 52 20  52 30 2c 5b 52 31 34 2c  |C..;LDR R0,[R14,|
000077a0  23 30 5d 0d 43 d0 14 3b  4c 44 52 20 52 31 2c 5b  |#0].C..;LDR R1,[|
000077b0  52 31 34 2c 23 34 5d 0d  43 da 14 3b 4c 44 52 20  |R14,#4].C..;LDR |
000077c0  52 32 2c 5b 52 31 34 2c  23 38 5d 0d 43 e4 15 3b  |R2,[R14,#8].C..;|
000077d0  4c 44 52 20 52 34 2c 5b  52 31 34 2c 23 31 32 5d  |LDR R4,[R14,#12]|
000077e0  0d 43 ee 15 3b 4c 44 52  20 52 35 2c 5b 52 31 34  |.C..;LDR R5,[R14|
000077f0  2c 23 31 36 5d 0d 43 f8  04 0d 44 02 16 4c 44 4d  |,#16].C...D..LDM|
00007800  49 41 20 52 31 33 2c 7b  52 36 2d 52 31 30 7d 0d  |IA R13,{R6-R10}.|
00007810  44 0c 14 3b 4c 44 52 20  52 36 2c 5b 52 31 33 2c  |D..;LDR R6,[R13,|
00007820  23 30 5d 0d 44 16 14 3b  4c 44 52 20 52 37 2c 5b  |#0].D..;LDR R7,[|
00007830  52 31 33 2c 23 34 5d 0d  44 20 14 3b 4c 44 52 20  |R13,#4].D .;LDR |
00007840  52 38 2c 5b 52 31 33 2c  23 38 5d 0d 44 2a 15 3b  |R8,[R13,#8].D*.;|
00007850  4c 44 52 20 52 39 2c 5b  52 31 33 2c 23 31 32 5d  |LDR R9,[R13,#12]|
00007860  0d 44 34 16 3b 4c 44 52  20 52 31 30 2c 5b 52 31  |.D4.;LDR R10,[R1|
00007870  33 2c 23 31 36 5d 0d 44  3e 04 0d 44 48 1c 53 54  |3,#16].D>..DH.ST|
00007880  4d 49 41 20 52 31 33 21  2c 7b 52 30 2d 52 32 2c  |MIA R13!,{R0-R2,|
00007890  52 34 2d 52 35 7d 0d 44  52 14 3b 53 54 52 20 52  |R4-R5}.DR.;STR R|
000078a0  30 2c 5b 52 31 33 2c 23  30 5d 0d 44 5c 14 3b 53  |0,[R13,#0].D\.;S|
000078b0  54 52 20 52 31 2c 5b 52  31 33 2c 23 34 5d 0d 44  |TR R1,[R13,#4].D|
000078c0  66 14 3b 53 54 52 20 52  32 2c 5b 52 31 33 2c 23  |f.;STR R2,[R13,#|
000078d0  38 5d 0d 44 70 15 3b 53  54 52 20 52 34 2c 5b 52  |8].Dp.;STR R4,[R|
000078e0  31 33 2c 23 31 32 5d 0d  44 7a 15 3b 53 54 52 20  |13,#12].Dz.;STR |
000078f0  52 35 2c 5b 52 31 33 2c  23 31 36 5d 0d 44 84 04  |R5,[R13,#16].D..|
00007900  0d 44 8e 17 53 54 4d 49  41 20 52 31 34 21 2c 7b  |.D..STMIA R14!,{|
00007910  52 36 2d 52 31 30 7d 0d  44 98 14 3b 53 54 52 20  |R6-R10}.D..;STR |
00007920  52 36 2c 5b 52 31 34 2c  23 30 5d 0d 44 a2 14 3b  |R6,[R14,#0].D..;|
00007930  53 54 52 20 52 37 2c 5b  52 31 34 2c 23 34 5d 0d  |STR R7,[R14,#4].|
00007940  44 ac 14 3b 53 54 52 20  52 38 2c 5b 52 31 34 2c  |D..;STR R8,[R14,|
00007950  23 38 5d 0d 44 b6 15 3b  53 54 52 20 52 39 2c 5b  |#8].D..;STR R9,[|
00007960  52 31 34 2c 23 31 32 5d  0d 44 c0 16 3b 53 54 52  |R14,#12].D..;STR|
00007970  20 52 31 30 2c 5b 52 31  34 2c 23 31 36 5d 0d 44  | R10,[R14,#16].D|
00007980  ca 04 0d 44 d4 14 3b 41  44 44 20 52 31 34 2c 52  |...D..;ADD R14,R|
00007990  31 34 2c 23 32 30 0d 44  de 14 3b 41 44 44 20 52  |14,#20.D..;ADD R|
000079a0  31 33 2c 52 31 33 2c 23  32 30 0d 44 e8 14 53 55  |13,R13,#20.D..SU|
000079b0  42 53 20 52 31 32 2c 52  31 32 2c 23 32 30 0d 44  |BS R12,R12,#20.D|
000079c0  f2 11 42 48 49 20 73 77  61 70 5f 6c 6f 6f 70 0d  |..BHI swap_loop.|
000079d0  44 fc 04 0d 45 06 20 4c  44 4d 45 41 20 6d 65 6d  |D...E. LDMEA mem|
000079e0  2c 7b 52 30 2d 52 32 2c  52 34 2d 52 31 31 2c 52  |,{R0-R2,R4-R11,R|
000079f0  31 34 7d 0d 45 10 0f 42  20 73 77 61 70 5f 65 78  |14}.E..B swap_ex|
00007a00  69 74 0d 45 1a 04 0d 45  24 04 0d 45 2e 28 2e 73  |it.E...E$..E.(.s|
00007a10  74 72 62 5f 72 6f 6d 5f  72 65 74 32 20 3b 20 62  |trb_rom_ret2 ; b|
00007a20  65 74 77 65 65 6e 20 43  30 30 30 20 80 20 45 30  |etween C000 . E0|
00007a30  30 30 0d 45 38 19 4c 44  52 42 20 52 32 2c 5b 6d  |00.E8.LDRB R2,[m|
00007a40  65 6d 2c 23 41 43 43 43  4f 4e 5d 0d 45 42 11 54  |em,#ACCCON].EB.T|
00007a50  53 54 20 52 32 2c 23 25  31 30 30 30 0d 45 4c 0d  |ST R2,#%1000.EL.|
00007a60  ec 51 20 50 43 2c 52 31  34 0d 45 56 17 3b 53 54  |.Q PC,R14.EV.;ST|
00007a70  52 4e 45 42 20 52 30 2c  5b 6d 65 6d 2c 52 31 5d  |RNEB R0,[mem,R1]|
00007a80  0d 45 60 15 4d 4f 56 20  52 32 2c 23 70 61 67 65  |.E`.MOV R2,#page|
00007a90  74 61 62 6c 65 0d 45 6a  1a 4c 44 52 42 20 52 32  |table.Ej.LDRB R2|
00007aa0  2c 5b 52 32 2c 52 31 2c  4c 53 52 23 31 32 5d 0d  |,[R2,R1,LSR#12].|
00007ab0  45 74 1a 53 54 52 42 20  52 30 2c 5b 52 31 2c 52  |Et.STRB R0,[R1,R|
00007ac0  32 2c 4c 53 4c 23 31 32  5d 0d 45 7e 0e 4d 4f 56  |2,LSL#12].E~.MOV|
00007ad0  20 50 43 2c 52 31 34 0d  45 88 04 0d 45 92 0b 2e  | PC,R14.E...E...|
00007ae0  61 63 63 63 6f 6e 0d 45  9c 05 5d 0d 45 a6 22 e7  |acccon.E..].E.".|
00007af0  20 ac 6d 61 73 74 65 72  20 8c 20 5b 4f 50 54 70  | .master . [OPTp|
00007b00  3a 4d 4f 56 20 50 43 2c  52 31 34 3a 5d 0d 45 b0  |:MOV PC,R14:].E.|
00007b10  09 5b 4f 50 54 70 0d 45  ba 19 4c 44 52 42 20 52  |.[OPTp.E..LDRB R|
00007b20  31 2c 5b 6d 65 6d 2c 23  41 43 43 43 4f 4e 5d 0d  |1,[mem,#ACCCON].|
00007b30  45 c4 19 53 54 52 42 20  52 30 2c 5b 6d 65 6d 2c  |E..STRB R0,[mem,|
00007b40  23 41 43 43 43 4f 4e 5d  0d 45 ce 0e 82 20 52 32  |#ACCCON].E... R2|
00007b50  2c 52 30 2c 52 31 0d 45  d8 04 0d 45 e2 2c 54 53  |,R0,R1.E...E.,TS|
00007b60  54 20 52 32 2c 23 25 31  20 3b 20 6d 61 69 6e 2f  |T R2,#%1 ; main/|
00007b70  73 68 61 64 6f 77 20 74  6f 20 62 65 20 64 69 73  |shadow to be dis|
00007b80  70 6c 61 79 65 64 0d 45  ec 1b 53 54 52 4e 45 42  |played.E..STRNEB|
00007b90  20 52 32 2c 5b 6d 65 6d  2c 23 74 61 6d 70 65 72  | R2,[mem,#tamper|
00007ba0  5d 0d 45 f6 04 0d 46 00  16 4d 4f 56 20 52 31 32  |].E...F..MOV R12|
00007bb0  2c 23 70 61 67 65 74 61  62 6c 65 0d 46 0a 04 0d  |,#pagetable.F...|
00007bc0  46 14 04 0d 46 1e 2e 3b  54 53 54 20 52 32 2c 23  |F...F..;TST R2,#|
00007bd0  25 31 30 30 20 3b 20 6d  61 69 6e 2f 73 68 61 64  |%100 ; main/shad|
00007be0  6f 77 20 74 6f 20 62 65  20 70 61 67 65 64 20 69  |ow to be paged i|
00007bf0  6e 0d 46 28 1d 3b 3b 3b  3b 3b 42 4e 45 20 73 77  |n.F(.;;;;;BNE sw|
00007c00  61 70 5f 6d 61 69 6e 5f  73 68 61 64 6f 77 0d 46  |ap_main_shadow.F|
00007c10  32 10 3b ec 51 20 52 31  33 2c 23 26 41 30 0d 46  |2.;.Q R13,#&A0.F|
00007c20  3c 13 3b 4d 4f 56 4e 45  20 52 31 33 2c 23 26 38  |<.;MOVNE R13,#&8|
00007c30  44 0d 46 46 16 3b 53 54  52 42 20 52 31 33 2c 5b  |D.FF.;STRB R13,[|
00007c40  52 31 32 2c 23 33 5d 0d  46 50 16 3b 53 54 52 42  |R12,#3].FP.;STRB|
00007c50  20 52 31 33 2c 5b 52 31  32 2c 23 34 5d 0d 46 5a  | R13,[R12,#4].FZ|
00007c60  16 3b 53 54 52 42 20 52  31 33 2c 5b 52 31 32 2c  |.;STRB R13,[R12,|
00007c70  23 35 5d 0d 46 64 16 3b  53 54 52 42 20 52 31 33  |#5].Fd.;STRB R13|
00007c80  2c 5b 52 31 32 2c 23 36  5d 0d 46 6e 16 3b 53 54  |,[R12,#6].Fn.;ST|
00007c90  52 42 20 52 31 33 2c 5b  52 31 32 2c 23 37 5d 0d  |RB R13,[R12,#7].|
00007ca0  46 78 04 0d 46 82 04 0d  46 8c 0e 2e 73 77 61 70  |Fx..F...F...swap|
00007cb0  5f 65 78 69 74 0d 46 96  04 0d 46 a0 28 3b 80 53  |_exit.F...F.(;.S|
00007cc0  20 52 32 2c 52 32 2c 23  25 31 30 30 30 20 3b 20  | R2,R2,#%1000 ; |
00007cd0  66 69 6c 69 6e 67 20 73  79 73 74 65 6d 20 52 41  |filing system RA|
00007ce0  4d 0d 46 aa 04 0d 46 b4  11 54 53 54 20 52 30 2c  |M.F...F..TST R0,|
00007cf0  23 25 31 30 30 30 0d 46  be 0f ec 51 20 52 31 33  |#%1000.F...Q R13|
00007d00  2c 23 26 41 30 0d 46 c8  15 4d 4f 56 4e 45 20 52  |,#&A0.F..MOVNE R|
00007d10  31 33 2c 23 26 39 35 2d  26 43 0d 46 d2 16 53 54  |13,#&95-&C.F..ST|
00007d20  52 42 20 52 31 33 2c 5b  52 31 32 2c 23 26 43 5d  |RB R13,[R12,#&C]|
00007d30  0d 46 dc 16 53 54 52 42  20 52 31 33 2c 5b 52 31  |.F..STRB R13,[R1|
00007d40  32 2c 23 26 44 5d 0d 46  e6 0e 4d 4f 56 20 50 43  |2,#&D].F..MOV PC|
00007d50  2c 52 31 34 0d 46 f0 04  0d 46 fa 04 0d 47 04 0d  |,R14.F...F...G..|
00007d60  ec 51 20 50 43 2c 52 31  34 0d 47 0e 04 0d 47 18  |.Q PC,R14.G...G.|
00007d70  1f 53 54 4d 46 44 20 6d  65 6d 2c 7b 52 30 2d 52  |.STMFD mem,{R0-R|
00007d80  32 2c 52 34 2d 52 39 2c  52 31 34 7d 0d 47 22 04  |2,R4-R9,R14}.G".|
00007d90  0d 47 2c 11 54 53 54 20  52 31 2c 23 25 31 30 30  |.G,.TST R1,#%100|
00007da0  30 0d 47 36 0e 42 45 51  20 6f 73 5f 6f 75 74 0d  |0.G6.BEQ os_out.|
00007db0  47 40 0e 3b 42 4e 45 20  6f 73 5f 69 6e 0d 47 4a  |G@.;BNE os_in.GJ|
00007dc0  04 0d 47 54 10 2e 6f 73  5f 69 6e 20 3b 20 52 4a  |..GT..os_in ; RJ|
00007dd0  57 0d 47 5e 15 4c 44 52  20 52 31 32 2c 72 6f 6d  |W.G^.LDR R12,rom|
00007de0  73 5f 61 64 64 72 0d 47  68 2e 41 44 44 20 52 31  |s_addr.Gh.ADD R1|
00007df0  32 2c 52 31 32 2c 23 31  36 2a 31 36 2a 31 30 32  |2,R12,#16*16*102|
00007e00  34 20 3b 20 31 37 74 68  20 52 4f 4d 20 3d 20 4f  |4 ; 17th ROM = O|
00007e10  53 33 2e 32 0d 47 72 12  4d 4f 56 20 52 31 33 2c  |S3.2.Gr.MOV R13,|
00007e20  23 26 32 30 30 30 0d 47  7c 15 53 55 42 20 52 32  |#&2000.G|.SUB R2|
00007e30  2c 6d 65 6d 2c 23 26 42  30 30 30 0d 47 86 16 41  |,mem,#&B000.G..A|
00007e40  44 44 20 6d 65 6d 2c 6d  65 6d 2c 23 26 43 30 30  |DD mem,mem,#&C00|
00007e50  30 0d 47 90 0f 2e 6f 73  5f 69 6e 5f 6c 6f 6f 70  |0.G...os_in_loop|
00007e60  0d 47 9a 28 4c 44 4d 49  41 20 6d 65 6d 2c 20 7b  |.G.(LDMIA mem, {|
00007e70  52 30 2c 52 31 2c 52 34  2c 52 35 2c 52 36 2c 52  |R0,R1,R4,R5,R6,R|
00007e80  37 2c 52 38 2c 52 39 7d  0d 47 a4 28 53 54 4d 49  |7,R8,R9}.G.(STMI|
00007e90  41 20 52 32 21 2c 20 7b  52 30 2c 52 31 2c 52 34  |A R2!, {R0,R1,R4|
00007ea0  2c 52 35 2c 52 36 2c 52  37 2c 52 38 2c 52 39 7d  |,R5,R6,R7,R8,R9}|
00007eb0  0d 47 ae 28 4c 44 4d 49  41 20 52 31 32 21 2c 7b  |.G.(LDMIA R12!,{|
00007ec0  52 30 2c 52 31 2c 52 34  2c 52 35 2c 52 36 2c 52  |R0,R1,R4,R5,R6,R|
00007ed0  37 2c 52 38 2c 52 39 7d  0d 47 b8 2a 53 54 4d 49  |7,R8,R9}.G.*STMI|
00007ee0  41 20 28 6d 65 6d 29 21  2c 7b 52 30 2c 52 31 2c  |A (mem)!,{R0,R1,|
00007ef0  52 34 2c 52 35 2c 52 36  2c 52 37 2c 52 38 2c 52  |R4,R5,R6,R7,R8,R|
00007f00  39 7d 0d 47 c2 15 53 55  42 53 20 52 31 33 2c 52  |9}.G..SUBS R13,R|
00007f10  31 33 2c 23 34 2a 38 0d  47 cc 12 42 47 54 20 6f  |13,#4*8.G..BGT o|
00007f20  73 5f 69 6e 5f 6c 6f 6f  70 0d 47 d6 16 53 55 42  |s_in_loop.G..SUB|
00007f30  20 6d 65 6d 2c 6d 65 6d  2c 23 26 45 30 30 30 0d  | mem,mem,#&E000.|
00007f40  47 e0 1e 4c 44 4d 45 41  20 6d 65 6d 2c 7b 52 30  |G..LDMEA mem,{R0|
00007f50  2d 52 32 2c 52 34 2d 52  39 2c 50 43 7d 0d 47 ea  |-R2,R4-R9,PC}.G.|
00007f60  04 0d 47 f4 11 2e 6f 73  5f 6f 75 74 20 3b 20 52  |..G...os_out ; R|
00007f70  4a 57 0d 47 fe 12 4d 4f  56 20 52 31 33 2c 23 26  |JW.G..MOV R13,#&|
00007f80  32 30 30 30 0d 48 08 15  53 55 42 20 52 32 2c 6d  |2000.H..SUB R2,m|
00007f90  65 6d 2c 23 26 42 30 30  30 0d 48 12 16 41 44 44  |em,#&B000.H..ADD|
00007fa0  20 6d 65 6d 2c 6d 65 6d  2c 23 26 43 30 30 30 0d  | mem,mem,#&C000.|
00007fb0  48 1c 10 2e 6f 73 5f 6f  75 74 5f 6c 6f 6f 70 0d  |H...os_out_loop.|
00007fc0  48 26 27 4c 44 4d 49 41  20 52 32 21 2c 7b 52 30  |H&'LDMIA R2!,{R0|
00007fd0  2c 52 31 2c 52 34 2c 52  35 2c 52 36 2c 52 37 2c  |,R1,R4,R5,R6,R7,|
00007fe0  52 38 2c 52 39 7d 0d 48  30 2a 53 54 4d 49 41 20  |R8,R9}.H0*STMIA |
00007ff0  28 6d 65 6d 29 21 2c 7b  52 30 2c 52 31 2c 52 34  |(mem)!,{R0,R1,R4|
00008000  2c 52 35 2c 52 36 2c 52  37 2c 52 38 2c 52 39 7d  |,R5,R6,R7,R8,R9}|
00008010  0d 48 3a 15 53 55 42 53  20 52 31 33 2c 52 31 33  |.H:.SUBS R13,R13|
00008020  2c 23 34 2a 38 0d 48 44  13 42 47 54 20 6f 73 5f  |,#4*8.HD.BGT os_|
00008030  6f 75 74 5f 6c 6f 6f 70  0d 48 4e 16 53 55 42 20  |out_loop.HN.SUB |
00008040  6d 65 6d 2c 6d 65 6d 2c  23 26 45 30 30 30 0d 48  |mem,mem,#&E000.H|
00008050  58 1e 4c 44 4d 45 41 20  6d 65 6d 2c 7b 52 30 2d  |X.LDMEA mem,{R0-|
00008060  52 32 2c 52 34 2d 52 39  2c 50 43 7d 0d 48 62 04  |R2,R4-R9,PC}.Hb.|
00008070  0d 48 6c 26 2e 73 74 72  62 38 30 30 30 20 20 20  |.Hl&.strb8000   |
00008080  20 20 20 3b 20 67 72 65  61 74 65 72 20 74 68 61  |   ; greater tha|
00008090  6e 20 38 30 30 30 0d 48  76 05 5d 0d 48 80 0e e7  |n 8000.Hv.].H...|
000080a0  20 6d 61 73 74 65 72 20  8c 0d 48 8a 09 5b 4f 50  | master ..H..[OP|
000080b0  54 70 0d 48 94 11 43 4d  50 20 52 31 2c 23 26 45  |Tp.H..CMP R1,#&E|
000080c0  30 30 30 0d 48 9e 14 42  47 45 20 73 74 72 62 5f  |000.H..BGE strb_|
000080d0  72 6f 6d 5f 72 65 74 0d  48 a8 11 43 4d 50 20 52  |rom_ret.H..CMP R|
000080e0  31 2c 23 26 43 30 30 30  0d 48 b2 15 42 47 45 20  |1,#&C000.H..BGE |
000080f0  73 74 72 62 5f 72 6f 6d  5f 72 65 74 32 0d 48 bc  |strb_rom_ret2.H.|
00008100  11 43 4d 50 20 52 31 2c  23 26 39 30 30 30 0d 48  |.CMP R1,#&9000.H|
00008110  c6 10 42 47 45 20 73 74  72 62 5f 72 6f 6d 0d 48  |..BGE strb_rom.H|
00008120  d0 05 5d 0d 48 da 05 cc  0d 48 e4 09 5b 4f 50 54  |..].H....H..[OPT|
00008130  70 0d 48 ee 11 43 4d 50  20 52 31 2c 23 26 43 30  |p.H..CMP R1,#&C0|
00008140  30 30 0d 48 f8 14 42 47  45 20 73 74 72 62 5f 72  |00.H..BGE strb_r|
00008150  6f 6d 5f 72 65 74 0d 49  02 05 5d 0d 49 0c 05 cd  |om_ret.I..].I...|
00008160  0d 49 16 09 5b 4f 50 54  70 0d 49 20 04 0d 49 2a  |.I..[OPTp.I ..I*|
00008170  17 4c 44 52 42 20 52 31  32 2c 5b 6d 65 6d 2c 23  |.LDRB R12,[mem,#|
00008180  72 6f 6d 5d 0d 49 34 10  54 53 54 20 52 31 32 2c  |rom].I4.TST R12,|
00008190  23 26 38 30 0d 49 3e 25  42 45 51 20 73 74 72 62  |#&80.I>%BEQ strb|
000081a0  5f 72 6f 6d 20 3b 20 69  65 20 6e 6f 74 20 70 72  |_rom ; ie not pr|
000081b0  69 76 61 74 65 20 52 41  4d 0d 49 48 04 0d 49 52  |ivate RAM.IH..IR|
000081c0  15 3b 53 54 52 42 20 52  30 2c 5b 6d 65 6d 2c 52  |.;STRB R0,[mem,R|
000081d0  31 5d 0d 49 5c 15 4d 4f  56 20 52 32 2c 23 70 61  |1].I\.MOV R2,#pa|
000081e0  67 65 74 61 62 6c 65 0d  49 66 1a 4c 44 52 42 20  |getable.If.LDRB |
000081f0  52 32 2c 5b 52 32 2c 52  31 2c 4c 53 52 23 31 32  |R2,[R2,R1,LSR#12|
00008200  5d 0d 49 70 28 53 54 52  42 20 52 30 2c 5b 52 31  |].Ip(STRB R0,[R1|
00008210  2c 52 32 2c 4c 53 4c 23  31 32 5d 20 3b 20 70 72  |,R2,LSL#12] ; pr|
00008220  69 76 61 74 65 20 52 41  4d 0d 49 7a 0e 4d 4f 56  |ivate RAM.Iz.MOV|
00008230  20 50 43 2c 52 31 34 0d  49 84 04 0d 49 8e 0d 2e  | PC,R14.I...I...|
00008240  73 74 72 62 5f 72 6f 6d  0d 49 98 18 53 55 42 20  |strb_rom.I..SUB |
00008250  52 31 32 2c 6d 65 6d 2c  23 2d 52 4f 4d 52 41 4d  |R12,mem,#-ROMRAM|
00008260  0d 49 a2 17 4c 44 52 42  20 52 31 33 2c 5b 6d 65  |.I..LDRB R13,[me|
00008270  6d 2c 23 72 6f 6d 5d 0d  49 ac 14 80 20 52 31 33  |m,#rom].I... R13|
00008280  2c 52 31 33 2c 23 25 31  31 31 31 0d 49 b6 16 4c  |,R13,#%1111.I..L|
00008290  44 52 42 20 52 31 33 2c  5b 52 31 32 2c 52 31 33  |DRB R13,[R12,R13|
000082a0  5d 0d 49 c0 0e 43 4d 50  20 52 31 33 2c 23 30 0d  |].I..CMP R13,#0.|
000082b0  49 ca 10 4d 4f 56 4e 45  20 50 43 2c 52 31 34 0d  |I..MOVNE PC,R14.|
000082c0  49 d4 17 3b 53 54 52 45  51 42 20 52 30 2c 5b 6d  |I..;STREQB R0,[m|
000082d0  65 6d 2c 52 31 5d 0d 49  de 15 4d 4f 56 20 52 32  |em,R1].I..MOV R2|
000082e0  2c 23 70 61 67 65 74 61  62 6c 65 0d 49 e8 1a 4c  |,#pagetable.I..L|
000082f0  44 52 42 20 52 32 2c 5b  52 32 2c 52 31 2c 4c 53  |DRB R2,[R2,R1,LS|
00008300  52 23 31 32 5d 0d 49 f2  1a 53 54 52 42 20 52 30  |R#12].I..STRB R0|
00008310  2c 5b 52 31 2c 52 32 2c  4c 53 4c 23 31 32 5d 0d  |,[R1,R2,LSL#12].|
00008320  49 fc 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 4a 06  |I..MOV PC,R14.J.|
00008330  13 3b 42 20 73 74 72 62  5f 72 6f 6d 5f 72 65 74  |.;B strb_rom_ret|
00008340  0d 4a 10 04 0d 4a 1a 0b  2e 72 6f 6d 73 65 6c 0d  |.J...J...romsel.|
00008350  4a 24 1d 4c 44 52 42 20  52 31 32 2c 5b 6d 65 6d  |J$.LDRB R12,[mem|
00008360  2c 23 52 4f 4d 53 45 4c  5f 4f 4e 5d 0d 4a 2e 0e  |,#ROMSEL_ON].J..|
00008370  43 4d 50 20 52 31 32 2c  23 30 0d 4a 38 10 4d 4f  |CMP R12,#0.J8.MO|
00008380  56 4e 45 20 50 43 2c 52  31 34 0d 4a 42 04 0d 4a  |VNE PC,R14.JB..J|
00008390  4c 16 80 20 52 30 2c 52  30 2c 23 25 31 30 30 30  |L.. R0,R0,#%1000|
000083a0  31 31 31 31 0d 4a 56 16  53 54 52 42 20 52 30 2c  |1111.JV.STRB R0,|
000083b0  5b 6d 65 6d 2c 23 72 6f  6d 5d 0d 4a 60 04 0d 4a  |[mem,#rom].J`..J|
000083c0  6a 16 4d 4f 56 20 52 31  32 2c 23 70 61 67 65 74  |j.MOV R12,#paget|
000083d0  61 62 6c 65 0d 4a 74 04  0d 4a 7e 23 4d 4f 56 20  |able.Jt..J~#MOV |
000083e0  52 31 2c 52 30 2c 4c 53  4c 23 32 20 3b 20 6d 75  |R1,R0,LSL#2 ; mu|
000083f0  6c 74 69 70 6c 79 20 62  79 20 34 0d 4a 88 1a 41  |ltiply by 4.J..A|
00008400  44 44 20 52 31 2c 52 31  2c 23 26 34 34 20 3b 20  |DD R1,R1,#&44 ; |
00008410  26 34 43 2d 38 0d 4a 92  15 53 54 52 42 20 52 31  |&4C-8.J..STRB R1|
00008420  2c 5b 52 31 32 2c 23 26  38 5d 0d 4a 9c 15 53 54  |,[R12,#&8].J..ST|
00008430  52 42 20 52 31 2c 5b 52  31 32 2c 23 26 39 5d 0d  |RB R1,[R12,#&9].|
00008440  4a a6 15 53 54 52 42 20  52 31 2c 5b 52 31 32 2c  |J..STRB R1,[R12,|
00008450  23 26 41 5d 0d 4a b0 15  53 54 52 42 20 52 31 2c  |#&A].J..STRB R1,|
00008460  5b 52 31 32 2c 23 26 42  5d 0d 4a ba 04 0d 4a c4  |[R12,#&B].J...J.|
00008470  15 54 53 54 20 52 30 2c  23 25 31 30 30 30 30 30  |.TST R0,#%100000|
00008480  30 30 0d 4a ce 2b 3b ec  51 20 52 31 33 2c 23 26  |00.J.+;.Q R13,#&|
00008490  41 30 20 3b 20 74 68 69  73 20 77 69 6c 6c 20 6e  |A0 ; this will n|
000084a0  65 65 64 20 74 6f 20 63  68 61 6e 67 65 0d 4a d8  |eed to change.J.|
000084b0  12 4d 4f 56 4e 45 20 52  31 33 2c 23 26 39 35 0d  |.MOVNE R13,#&95.|
000084c0  4a e2 17 3b 53 54 52 42  20 52 31 33 2c 5b 52 31  |J..;STRB R13,[R1|
000084d0  32 2c 23 26 38 5d 0d 4a  ec 18 53 54 52 4e 45 42  |2,#&8].J..STRNEB|
000084e0  20 52 31 33 2c 5b 52 31  32 2c 23 26 38 5d 0d 4a  | R13,[R12,#&8].J|
000084f0  f6 04 0d 4b 00 0e 4d 4f  56 20 50 43 2c 52 31 34  |...K..MOV PC,R14|
00008500  0d 4b 0a 04 0d 4b 14 16  4c 44 52 42 20 52 31 2c  |.K...K..LDRB R1,|
00008510  5b 6d 65 6d 2c 23 72 6f  6d 5d 0d 4b 1e 04 0d 4b  |[mem,#rom].K...K|
00008520  28 05 5d 0d 4b 32 0f e7  20 ac 6d 61 73 74 65 72  |(.].K2.. .master|
00008530  20 8c 0d 4b 3c 09 5b 4f  50 54 70 0d 4b 46 12 80  | ..K<.[OPTp.KF..|
00008540  20 52 30 2c 52 30 2c 23  25 31 31 31 31 0d 4b 50  | R0,R0,#%1111.KP|
00008550  44 43 4d 50 20 52 30 2c  52 31 20 3a 20 ec 51 20  |DCMP R0,R1 : .Q |
00008560  50 43 2c 52 31 34 20 3b  20 57 41 52 20 28 75 73  |PC,R14 ; WAR (us|
00008570  65 64 20 74 6f 29 20 6e  65 65 64 20 74 68 69 73  |ed to) need this|
00008580  20 63 6f 6d 6d 65 6e 74  65 64 20 6f 75 74 21 3f  | commented out!?|
00008590  21 0d 4b 5a 11 42 20 72  6f 6d 73 65 6c 5f 6e 65  |!.KZ.B romsel_ne|
000085a0  78 74 0d 4b 64 05 5d 0d  4b 6e 05 cd 0d 4b 78 09  |xt.Kd.].Kn...Kx.|
000085b0  5b 4f 50 54 70 0d 4b 82  04 0d 4b 8c 16 80 20 52  |[OPTp.K...K... R|
000085c0  30 2c 52 30 2c 23 25 31  30 30 30 31 31 31 31 0d  |0,R0,#%10001111.|
000085d0  4b 96 04 0d 4b a0 44 43  4d 50 20 52 30 2c 52 31  |K...K.DCMP R0,R1|
000085e0  20 3a 20 ec 51 20 50 43  2c 52 31 34 20 3b 20 57  | : .Q PC,R14 ; W|
000085f0  41 52 20 28 75 73 65 64  20 74 6f 29 20 6e 65 65  |AR (used to) nee|
00008600  64 20 74 68 69 73 20 63  6f 6d 6d 65 6e 74 65 64  |d this commented|
00008610  20 6f 75 74 21 3f 21 0d  4b aa 04 0d 4b b4 0f 3b  | out!?!.K...K..;|
00008620  82 20 52 32 2c 52 30 2c  52 31 0d 4b be 2a 3b 80  |. R2,R0,R1.K.*;.|
00008630  53 20 52 32 2c 52 32 2c  23 25 31 30 30 30 30 30  |S R2,R2,#%100000|
00008640  30 30 20 3b 20 70 72 69  76 61 74 65 20 52 41 4d  |00 ; private RAM|
00008650  20 62 69 74 0d 4b c8 26  3b 42 45 51 20 72 6f 6d  | bit.K.&;BEQ rom|
00008660  73 65 6c 5f 6e 65 78 74  20 3b 20 62 69 74 20 6e  |sel_next ; bit n|
00008670  6f 74 20 63 68 61 6e 67  65 64 0d 4b d2 04 0d 4b  |ot changed.K...K|
00008680  dc 16 3b 54 53 54 20 52  31 2c 23 25 31 30 30 30  |..;TST R1,#%1000|
00008690  30 30 30 30 0d 4b e6 2a  3b 42 4e 45 20 70 72 69  |0000.K.*;BNE pri|
000086a0  76 61 74 65 5f 6f 75 74  20 3b 20 6d 61 70 20 6f  |vate_out ; map o|
000086b0  75 74 20 70 72 69 76 61  74 65 20 52 41 4d 0d 4b  |ut private RAM.K|
000086c0  f0 29 3b 42 45 51 20 70  72 69 76 61 74 65 5f 69  |.);BEQ private_i|
000086d0  6e 20 20 3b 20 6d 61 70  20 69 6e 20 70 72 69 76  |n  ; map in priv|
000086e0  61 74 65 20 52 41 4d 0d  4b fa 04 0d 4c 04 04 0d  |ate RAM.K...L...|
000086f0  4c 0e 10 2e 72 6f 6d 73  65 6c 5f 6e 65 78 74 0d  |L...romsel_next.|
00008700  4c 18 15 4c 44 52 20 52  31 32 2c 72 6f 6d 73 5f  |L..LDR R12,roms_|
00008710  61 64 64 72 0d 4c 22 1f  80 20 52 32 2c 52 30 2c  |addr.L".. R2,R0,|
00008720  23 26 46 20 3b 20 73 6f  63 6b 65 74 20 6e 75 6d  |#&F ; socket num|
00008730  62 65 72 0d 4c 2c 16 4c  44 52 42 20 52 31 2c 5b  |ber.L,.LDRB R1,[|
00008740  6d 65 6d 2c 23 72 6f 6d  5d 0d 4c 36 0f 80 20 52  |mem,#rom].L6.. R|
00008750  31 2c 52 31 2c 23 26 46  0d 4c 40 16 53 54 52 42  |1,R1,#&F.L@.STRB|
00008760  20 52 30 2c 5b 6d 65 6d  2c 23 72 6f 6d 5d 0d 4c  | R0,[mem,#rom].L|
00008770  4a 18 53 55 42 20 52 31  33 2c 6d 65 6d 2c 23 2d  |J.SUB R13,mem,#-|
00008780  52 4f 4d 52 41 4d 0d 4c  54 15 4c 44 52 42 20 52  |ROMRAM.LT.LDRB R|
00008790  31 33 2c 5b 52 31 33 2c  52 31 5d 0d 4c 5e 31 43  |13,[R13,R1].L^1C|
000087a0  4d 50 20 52 31 33 2c 23  30 20 3b 20 69 73 20 74  |MP R13,#0 ; is t|
000087b0  68 65 20 62 61 6e 6b 20  62 65 69 6e 67 20 70 61  |he bank being pa|
000087c0  67 65 64 20 6f 75 74 20  52 41 4d 3f 0d 4c 68 0f  |ged out RAM?.Lh.|
000087d0  42 4e 45 20 72 6f 6d 73  65 6c 32 0d 4c 72 04 0d  |BNE romsel2.Lr..|
000087e0  4c 7c 2f 3b 54 53 54 20  52 30 2c 23 25 31 30 30  |L|/;TST R0,#%100|
000087f0  30 30 30 30 30 20 3b 20  70 72 69 76 61 74 65 20  |00000 ; private |
00008800  52 41 4d 20 6d 61 70 70  65 64 20 69 6e 3f 0d 4c  |RAM mapped in?.L|
00008810  86 12 3b ec 51 20 52 31  33 2c 23 26 38 30 30 30  |..;.Q R13,#&8000|
00008820  0d 4c 90 15 3b 4d 4f 56  4e 45 20 52 31 33 2c 23  |.L..;MOVNE R13,#|
00008830  26 39 30 30 30 0d 4c 9a  12 4d 4f 56 20 52 31 33  |&9000.L..MOV R13|
00008840  2c 23 26 38 30 30 30 0d  4c a4 0f 80 20 52 30 2c  |,#&8000.L... R0,|
00008850  52 30 2c 23 26 46 0d 4c  ae 04 0d 4c b8 18 41 44  |R0,#&F.L...L..AD|
00008860  44 20 52 32 2c 52 31 32  2c 52 31 2c 4c 53 4c 23  |D R2,R12,R1,LSL#|
00008870  31 34 0d 4c c2 17 3b 41  44 44 4e 45 20 52 32 2c  |14.L..;ADDNE R2,|
00008880  52 32 2c 23 26 31 30 30  30 0d 4c cc 26 41 44 44  |R2,#&1000.L.&ADD|
00008890  20 52 31 32 2c 52 31 32  2c 52 30 2c 4c 53 4c 23  | R12,R12,R0,LSL#|
000088a0  31 34 20 3b 20 52 30 2a  31 36 2a 31 30 32 34 0d  |14 ; R0*16*1024.|
000088b0  4c d6 19 3b 41 44 44 4e  45 20 52 31 32 2c 52 31  |L..;ADDNE R12,R1|
000088c0  32 2c 23 26 31 30 30 30  0d 4c e0 1b 41 44 52 20  |2,#&1000.L..ADR |
000088d0  52 31 2c 72 6f 6d 73 65  6c 5f 6c 6f 6f 70 5f 74  |R1,romsel_loop_t|
000088e0  65 6d 70 0d 4c ea 1b 53  54 4d 49 41 20 52 31 2c  |emp.L..STMIA R1,|
000088f0  7b 52 30 2c 52 34 2d 52  38 2c 52 31 34 7d 0d 4c  |{R0,R4-R8,R14}.L|
00008900  f4 13 41 44 44 20 6d 65  6d 2c 6d 65 6d 2c 52 31  |..ADD mem,mem,R1|
00008910  33 0d 4c fe 16 52 53 42  20 52 31 33 2c 52 31 33  |3.L..RSB R13,R13|
00008920  2c 23 26 43 30 30 30 0d  4d 08 10 2e 72 6f 6d 73  |,#&C000.M...roms|
00008930  65 6c 5f 6c 6f 6f 70 0d  4d 12 28 4c 44 4d 49 41  |el_loop.M.(LDMIA|
00008940  20 6d 65 6d 2c 7b 52 30  2c 52 31 2c 52 34 2c 52  | mem,{R0,R1,R4,R|
00008950  35 2c 52 36 2c 52 37 2c  52 38 2c 52 31 34 7d 0d  |5,R6,R7,R8,R14}.|
00008960  4d 1c 28 53 54 4d 49 41  20 52 32 21 2c 7b 52 30  |M.(STMIA R2!,{R0|
00008970  2c 52 31 2c 52 34 2c 52  35 2c 52 36 2c 52 37 2c  |,R1,R4,R5,R6,R7,|
00008980  52 38 2c 52 31 34 7d 0d  4d 26 29 4c 44 4d 49 41  |R8,R14}.M&)LDMIA|
00008990  20 52 31 32 21 2c 7b 52  30 2c 52 31 2c 52 34 2c  | R12!,{R0,R1,R4,|
000089a0  52 35 2c 52 36 2c 52 37  2c 52 38 2c 52 31 34 7d  |R5,R6,R7,R8,R14}|
000089b0  0d 4d 30 2b 53 54 4d 49  41 20 28 6d 65 6d 29 21  |.M0+STMIA (mem)!|
000089c0  2c 7b 52 30 2c 52 31 2c  52 34 2c 52 35 2c 52 36  |,{R0,R1,R4,R5,R6|
000089d0  2c 52 37 2c 52 38 2c 52  31 34 7d 0d 4d 3a 15 53  |,R7,R8,R14}.M:.S|
000089e0  55 42 53 20 52 31 33 2c  52 31 33 2c 23 34 2a 38  |UBS R13,R13,#4*8|
000089f0  0d 4d 44 13 42 4e 45 20  72 6f 6d 73 65 6c 5f 6c  |.MD.BNE romsel_l|
00008a00  6f 6f 70 0d 4d 4e 16 53  55 42 20 6d 65 6d 2c 6d  |oop.MN.SUB mem,m|
00008a10  65 6d 2c 23 26 43 30 30  30 0d 4d 58 1b 41 44 52  |em,#&C000.MX.ADR|
00008a20  20 52 31 2c 72 6f 6d 73  65 6c 5f 6c 6f 6f 70 5f  | R1,romsel_loop_|
00008a30  74 65 6d 70 0d 4d 62 1a  4c 44 4d 49 41 20 52 31  |temp.Mb.LDMIA R1|
00008a40  2c 7b 52 30 2c 52 34 2d  52 38 2c 50 43 7d 0d 4d  |,{R0,R4-R8,PC}.M|
00008a50  6c 15 2e 72 6f 6d 73 65  6c 5f 6c 6f 6f 70 5f 74  |l..romsel_loop_t|
00008a60  65 6d 70 0d 4d 76 1f 45  51 55 44 20 30 3a 45 51  |emp.Mv.EQUD 0:EQ|
00008a70  55 44 20 30 3a 45 51 55  44 20 30 3a 45 51 55 44  |UD 0:EQUD 0:EQUD|
00008a80  20 30 0d 4d 80 1f 45 51  55 44 20 30 3a 45 51 55  | 0.M..EQUD 0:EQU|
00008a90  44 20 30 3a 45 51 55 44  20 30 3a 45 51 55 44 20  |D 0:EQUD 0:EQUD |
00008aa0  30 0d 4d 8a 04 0d 4d 94  11 2e 72 6f 6d 73 65 6c  |0.M...M...romsel|
00008ab0  5f 65 6d 70 74 79 0d 4d  9e 17 41 44 44 20 52 31  |_empty.M..ADD R1|
00008ac0  33 2c 52 32 2c 52 32 2c  4c 53 4c 23 38 0d 4d a8  |3,R2,R2,LSL#8.M.|
00008ad0  1a 41 44 44 20 52 31 33  2c 52 31 33 2c 52 31 33  |.ADD R13,R13,R13|
00008ae0  2c 4c 53 4c 23 31 36 0d  4d b2 15 41 44 44 20 52  |,LSL#16.M..ADD R|
00008af0  30 2c 6d 65 6d 2c 23 26  38 30 30 30 0d 4d bc 13  |0,mem,#&8000.M..|
00008b00  53 54 52 20 52 31 33 2c  5b 52 30 2c 23 30 5d 0d  |STR R13,[R0,#0].|
00008b10  4d c6 13 53 54 52 20 52  31 33 2c 5b 52 30 2c 23  |M..STR R13,[R0,#|
00008b20  34 5d 0d 4d d0 13 53 54  52 20 52 31 33 2c 5b 52  |4].M..STR R13,[R|
00008b30  30 2c 23 38 5d 0d 4d da  14 53 54 52 20 52 31 33  |0,#8].M..STR R13|
00008b40  2c 5b 52 30 2c 23 31 32  5d 0d 4d e4 0e 4d 4f 56  |,[R0,#12].M..MOV|
00008b50  20 50 43 2c 52 31 34 0d  4d ee 04 0d 4d f8 0c 2e  | PC,R14.M...M...|
00008b60  72 6f 6d 73 65 6c 32 0d  4e 02 04 0d 4e 0c 18 53  |romsel2.N...N..S|
00008b70  55 42 20 52 31 33 2c 6d  65 6d 2c 23 2d 52 4f 4d  |UB R13,mem,#-ROM|
00008b80  52 41 4d 0d 4e 16 15 4c  44 52 42 20 52 31 33 2c  |RAM.N..LDRB R13,|
00008b90  5b 52 31 33 2c 52 32 5d  0d 4e 20 33 43 4d 50 20  |[R13,R2].N 3CMP |
00008ba0  52 31 33 2c 23 32 20 3b  20 69 73 20 74 68 65 20  |R13,#2 ; is the |
00008bb0  62 61 6e 6b 20 62 65 69  6e 67 20 70 61 67 65 64  |bank being paged|
00008bc0  20 6f 75 74 20 65 6d 70  74 79 3f 0d 4e 2a 14 42  | out empty?.N*.B|
00008bd0  45 51 20 72 6f 6d 73 65  6c 5f 65 6d 70 74 79 0d  |EQ romsel_empty.|
00008be0  4e 34 04 0d 4e 3e 2f 3b  54 53 54 20 52 30 2c 23  |N4..N>/;TST R0,#|
00008bf0  25 31 30 30 30 30 30 30  30 20 3b 20 70 72 69 76  |%10000000 ; priv|
00008c00  61 74 65 20 52 41 4d 20  6d 61 70 70 65 64 20 69  |ate RAM mapped i|
00008c10  6e 3f 0d 4e 48 12 3b ec  51 20 52 31 33 2c 23 26  |n?.NH.;.Q R13,#&|
00008c20  38 30 30 30 0d 4e 52 15  3b 4d 4f 56 4e 45 20 52  |8000.NR.;MOVNE R|
00008c30  31 33 2c 23 26 39 30 30  30 0d 4e 5c 12 4d 4f 56  |13,#&9000.N\.MOV|
00008c40  20 52 31 33 2c 23 26 38  30 30 30 0d 4e 66 0f 80  | R13,#&8000.Nf..|
00008c50  20 52 30 2c 52 30 2c 23  26 46 0d 4e 70 04 0d 4e  | R0,R0,#&F.Np..N|
00008c60  7a 04 0d 4e 84 26 41 44  44 20 52 31 32 2c 52 31  |z..N.&ADD R12,R1|
00008c70  32 2c 52 30 2c 4c 53 4c  23 31 34 20 3b 20 52 30  |2,R0,LSL#14 ; R0|
00008c80  2a 31 36 2a 31 30 32 34  0d 4e 8e 19 3b 41 44 44  |*16*1024.N..;ADD|
00008c90  4e 45 20 52 31 32 2c 52  31 32 2c 23 26 31 30 30  |NE R12,R12,#&100|
00008ca0  30 0d 4e 98 13 41 44 44  20 6d 65 6d 2c 6d 65 6d  |0.N..ADD mem,mem|
00008cb0  2c 52 31 33 0d 4e a2 16  52 53 42 20 52 31 33 2c  |,R13.N..RSB R13,|
00008cc0  52 31 33 2c 23 26 43 30  30 30 0d 4e ac 1b 41 44  |R13,#&C000.N..AD|
00008cd0  52 20 52 31 2c 72 6f 6d  73 65 6c 5f 6c 6f 6f 70  |R R1,romsel_loop|
00008ce0  5f 74 65 6d 70 0d 4e b6  1b 53 54 4d 49 41 20 52  |_temp.N..STMIA R|
00008cf0  31 2c 7b 52 30 2c 52 34  2d 52 38 2c 52 31 34 7d  |1,{R0,R4-R8,R14}|
00008d00  0d 4e c0 11 2e 72 6f 6d  73 65 6c 32 5f 6c 6f 6f  |.N...romsel2_loo|
00008d10  70 0d 4e ca 2b 4c 44 4d  49 41 20 20 52 31 32 20  |p.N.+LDMIA  R12 |
00008d20  21 2c 7b 52 30 2c 52 31  2c 52 34 2c 52 35 2c 52  |!,{R0,R1,R4,R5,R|
00008d30  36 2c 52 37 2c 52 38 2c  52 31 34 7d 0d 4e d4 2b  |6,R7,R8,R14}.N.+|
00008d40  53 54 4d 49 41 20 28 6d  65 6d 29 21 2c 7b 52 30  |STMIA (mem)!,{R0|
00008d50  2c 52 31 2c 52 34 2c 52  35 2c 52 36 2c 52 37 2c  |,R1,R4,R5,R6,R7,|
00008d60  52 38 2c 52 31 34 7d 0d  4e de 14 3b 4c 44 52 20  |R8,R14}.N..;LDR |
00008d70  52 31 2c 5b 52 31 32 5d  2c 23 34 0d 4e e8 3d 3b  |R1,[R12],#4.N.=;|
00008d80  53 54 52 20 52 31 2c 5b  6d 65 6d 5d 2c 23 34 20  |STR R1,[mem],#4 |
00008d90  3b 20 73 74 6f 72 65 20  62 79 74 65 20 66 72 6f  |; store byte fro|
00008da0  6d 20 52 4f 4d 20 69 6e  20 6d 61 69 6e 20 6d 65  |m ROM in main me|
00008db0  6d 6f 72 79 20 6d 61 70  0d 4e f2 15 53 55 42 53  |mory map.N..SUBS|
00008dc0  20 52 31 33 2c 52 31 33  2c 23 34 2a 38 0d 4e fc  | R13,R13,#4*8.N.|
00008dd0  14 42 4e 45 20 72 6f 6d  73 65 6c 32 5f 6c 6f 6f  |.BNE romsel2_loo|
00008de0  70 0d 4f 06 16 53 55 42  20 6d 65 6d 2c 6d 65 6d  |p.O..SUB mem,mem|
00008df0  2c 23 26 43 30 30 30 0d  4f 10 1b 41 44 52 20 52  |,#&C000.O..ADR R|
00008e00  31 2c 72 6f 6d 73 65 6c  5f 6c 6f 6f 70 5f 74 65  |1,romsel_loop_te|
00008e10  6d 70 0d 4f 1a 1a 4c 44  4d 49 41 20 52 31 2c 7b  |mp.O..LDMIA R1,{|
00008e20  52 30 2c 52 34 2d 52 38  2c 50 43 7d 0d 4f 24 04  |R0,R4-R8,PC}.O$.|
00008e30  0d 4f 2e 15 2e 70 72 69  76 61 74 65 5f 69 6e 20  |.O...private_in |
00008e40  3b 20 52 4a 57 0d 4f 38  1c 53 54 4d 46 44 20 6d  |; RJW.O8.STMFD m|
00008e50  65 6d 2c 7b 52 30 2d 52  32 2c 52 34 2d 52 31 30  |em,{R0-R2,R4-R10|
00008e60  7d 0d 4f 42 14 4c 44 52  20 52 32 2c 72 6f 6d 73  |}.OB.LDR R2,roms|
00008e70  5f 61 64 64 72 0d 4f 4c  0f 80 20 52 31 2c 52 31  |_addr.OL.. R1,R1|
00008e80  2c 23 26 46 0d 4f 56 24  41 44 44 20 52 32 2c 52  |,#&F.OV$ADD R2,R|
00008e90  32 2c 52 31 2c 4c 53 4c  23 31 34 20 3b 20 52 31  |2,R1,LSL#14 ; R1|
00008ea0  2a 31 36 2a 31 30 32 34  0d 4f 60 1c 53 55 42 20  |*16*1024.O`.SUB |
00008eb0  52 31 32 2c 6d 65 6d 2c  23 26 42 30 30 30 2d 26  |R12,mem,#&B000-&|
00008ec0  38 30 30 30 0d 4f 6a 12  4d 4f 56 20 52 31 33 2c  |8000.Oj.MOV R13,|
00008ed0  23 26 31 30 30 30 0d 4f  74 16 41 44 44 20 6d 65  |#&1000.Ot.ADD me|
00008ee0  6d 2c 6d 65 6d 2c 23 26  38 30 30 30 0d 4f 7e 11  |m,mem,#&8000.O~.|
00008ef0  2e 70 72 69 76 5f 69 6e  5f 6c 6f 6f 70 0d 4f 88  |.priv_in_loop.O.|
00008f00  2b 4c 44 4d 49 41 20 28  6d 65 6d 29 2c 20 7b 52  |+LDMIA (mem), {R|
00008f10  31 2c 52 34 2c 52 35 2c  52 36 2c 52 37 2c 52 38  |1,R4,R5,R6,R7,R8|
00008f20  2c 52 39 2c 52 31 30 7d  0d 4f 92 2b 53 54 4d 49  |,R9,R10}.O.+STMI|
00008f30  41 20 52 32 21 2c 20 20  20 7b 52 31 2c 52 34 2c  |A R2!,   {R1,R4,|
00008f40  52 35 2c 52 36 2c 52 37  2c 52 38 2c 52 39 2c 52  |R5,R6,R7,R8,R9,R|
00008f50  31 30 7d 0d 4f 9c 2b 4c  44 4d 49 41 20 52 31 32  |10}.O.+LDMIA R12|
00008f60  21 2c 20 20 7b 52 31 2c  52 34 2c 52 35 2c 52 36  |!,  {R1,R4,R5,R6|
00008f70  2c 52 37 2c 52 38 2c 52  39 2c 52 31 30 7d 0d 4f  |,R7,R8,R9,R10}.O|
00008f80  a6 2b 53 54 4d 49 41 20  28 6d 65 6d 29 21 2c 7b  |.+STMIA (mem)!,{|
00008f90  52 31 2c 52 34 2c 52 35  2c 52 36 2c 52 37 2c 52  |R1,R4,R5,R6,R7,R|
00008fa0  38 2c 52 39 2c 52 31 30  7d 0d 4f b0 14 53 55 42  |8,R9,R10}.O..SUB|
00008fb0  53 20 52 31 33 2c 31 33  2c 23 34 2a 38 0d 4f ba  |S R13,13,#4*8.O.|
00008fc0  14 42 4e 45 20 70 72 69  76 5f 69 6e 5f 6c 6f 6f  |.BNE priv_in_loo|
00008fd0  70 0d 4f c4 16 53 55 42  20 6d 65 6d 2c 6d 65 6d  |p.O..SUB mem,mem|
00008fe0  2c 23 26 39 30 30 30 0d  4f ce 1c 4c 44 4d 45 41  |,#&9000.O..LDMEA|
00008ff0  20 6d 65 6d 2c 7b 52 30  2d 52 32 2c 52 34 2d 52  | mem,{R0-R2,R4-R|
00009000  31 30 7d 0d 4f d8 11 42  20 72 6f 6d 73 65 6c 5f  |10}.O..B romsel_|
00009010  6e 65 78 74 0d 4f e2 04  0d 4f ec 16 2e 70 72 69  |next.O...O...pri|
00009020  76 61 74 65 5f 6f 75 74  20 3b 20 52 4a 57 0d 4f  |vate_out ; RJW.O|
00009030  f6 1c 53 54 4d 46 44 20  6d 65 6d 2c 7b 52 30 2d  |..STMFD mem,{R0-|
00009040  52 32 2c 52 34 2d 52 31  30 7d 0d 50 00 14 4c 44  |R2,R4-R10}.P..LD|
00009050  52 20 52 32 2c 72 6f 6d  73 5f 61 64 64 72 0d 50  |R R2,roms_addr.P|
00009060  0a 16 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |..LDRB R1,[mem,#|
00009070  72 6f 6d 5d 0d 50 14 0f  80 20 52 31 2c 52 30 2c  |rom].P... R1,R0,|
00009080  23 26 46 0d 50 1e 24 41  44 44 20 52 32 2c 52 32  |#&F.P.$ADD R2,R2|
00009090  2c 52 31 2c 4c 53 4c 23  31 34 20 3b 20 52 31 2a  |,R1,LSL#14 ; R1*|
000090a0  31 36 2a 31 30 32 34 0d  50 28 1c 53 55 42 20 52  |16*1024.P(.SUB R|
000090b0  31 32 2c 6d 65 6d 2c 23  26 42 30 30 30 2d 26 38  |12,mem,#&B000-&8|
000090c0  30 30 30 0d 50 32 12 4d  4f 56 20 52 31 33 2c 23  |000.P2.MOV R13,#|
000090d0  26 31 30 30 30 0d 50 3c  16 41 44 44 20 6d 65 6d  |&1000.P<.ADD mem|
000090e0  2c 6d 65 6d 2c 23 26 38  30 30 30 0d 50 46 12 2e  |,mem,#&8000.PF..|
000090f0  70 72 69 76 5f 6f 75 74  5f 6c 6f 6f 70 0d 50 50  |priv_out_loop.PP|
00009100  2b 4c 44 4d 49 41 20 28  6d 65 6d 29 2c 20 7b 52  |+LDMIA (mem), {R|
00009110  31 2c 52 34 2c 52 35 2c  52 36 2c 52 37 2c 52 38  |1,R4,R5,R6,R7,R8|
00009120  2c 52 39 2c 52 31 30 7d  0d 50 5a 2b 53 54 4d 49  |,R9,R10}.PZ+STMI|
00009130  41 20 52 31 32 21 2c 20  20 7b 52 31 2c 52 34 2c  |A R12!,  {R1,R4,|
00009140  52 35 2c 52 36 2c 52 37  2c 52 38 2c 52 39 2c 52  |R5,R6,R7,R8,R9,R|
00009150  31 30 7d 0d 50 64 2b 4c  44 4d 49 41 20 52 32 21  |10}.Pd+LDMIA R2!|
00009160  2c 20 20 20 7b 52 31 2c  52 34 2c 52 35 2c 52 36  |,   {R1,R4,R5,R6|
00009170  2c 52 37 2c 52 38 2c 52  39 2c 52 31 30 7d 0d 50  |,R7,R8,R9,R10}.P|
00009180  6e 2b 53 54 4d 49 41 20  28 6d 65 6d 29 21 2c 7b  |n+STMIA (mem)!,{|
00009190  52 31 2c 52 34 2c 52 35  2c 52 36 2c 52 37 2c 52  |R1,R4,R5,R6,R7,R|
000091a0  38 2c 52 39 2c 52 31 30  7d 0d 50 78 15 53 55 42  |8,R9,R10}.Px.SUB|
000091b0  53 20 52 31 33 2c 52 31  33 2c 23 34 2a 38 0d 50  |S R13,R13,#4*8.P|
000091c0  82 15 42 4e 45 20 70 72  69 76 5f 6f 75 74 5f 6c  |..BNE priv_out_l|
000091d0  6f 6f 70 0d 50 8c 16 53  55 42 20 6d 65 6d 2c 6d  |oop.P..SUB mem,m|
000091e0  65 6d 2c 23 26 39 30 30  30 0d 50 96 1c 4c 44 4d  |em,#&9000.P..LDM|
000091f0  45 41 20 6d 65 6d 2c 7b  52 30 2d 52 32 2c 52 34  |EA mem,{R0-R2,R4|
00009200  2d 52 31 30 7d 0d 50 a0  11 42 20 72 6f 6d 73 65  |-R10}.P..B romse|
00009210  6c 5f 6e 65 78 74 0d 50  aa 04 0d 50 b4 08 2e 63  |l_next.P...P...c|
00009220  72 74 0d 50 be 1c 53 55  42 20 52 31 2c 6d 65 6d  |rt.P..SUB R1,mem|
00009230  2c 23 35 31 32 20 3b 20  73 68 65 69 6c 61 0d 50  |,#512 ; sheila.P|
00009240  c8 14 4c 44 52 42 20 52  31 32 2c 5b 52 31 2c 23  |..LDRB R12,[R1,#|
00009250  30 5d 0d 50 d2 15 80 20  52 31 32 2c 52 31 32 2c  |0].P... R12,R12,|
00009260  23 25 31 31 31 31 31 0d  50 dc 0f 43 4d 50 20 52  |#%11111.P..CMP R|
00009270  31 32 2c 23 31 37 0d 50  e6 10 4d 4f 56 48 49 20  |12,#17.P..MOVHI |
00009280  50 43 2c 52 31 34 0d 50  f0 15 3b 41 44 52 20 52  |PC,R14.P..;ADR R|
00009290  31 33 2c 63 72 74 5f 72  65 67 73 0d 50 fa 1a 53  |13,crt_regs.P..S|
000092a0  55 42 20 52 31 33 2c 6d  65 6d 2c 23 2d 63 72 74  |UB R13,mem,#-crt|
000092b0  5f 72 65 67 73 0d 51 04  15 4c 44 52 42 20 52 31  |_regs.Q..LDRB R1|
000092c0  2c 5b 52 31 33 2c 52 31  32 5d 0d 51 0e 25 43 4d  |,[R13,R12].Q.%CM|
000092d0  50 20 52 31 2c 52 30 20  3a 20 ec 51 20 50 43 2c  |P R1,R0 : .Q PC,|
000092e0  52 31 34 20 3b 20 6e 6f  20 63 68 61 6e 67 65 0d  |R14 ; no change.|
000092f0  51 18 15 53 54 52 42 20  52 30 2c 5b 52 31 33 2c  |Q..STRB R0,[R13,|
00009300  52 31 32 5d 0d 51 22 17  41 44 44 20 50 43 2c 50  |R12].Q".ADD PC,P|
00009310  43 2c 52 31 32 2c 4c 53  4c 23 32 0d 51 2c 24 4d  |C,R12,LSL#2.Q,$M|
00009320  4f 56 20 52 30 2c 52 30  20 3b 20 70 61 64 64 69  |OV R0,R0 ; paddi|
00009330  6e 67 20 66 6f 72 20 70  69 70 65 6c 69 6e 65 0d  |ng for pipeline.|
00009340  51 36 29 4d 4f 56 20 50  43 2c 52 31 34 20 20 20  |Q6)MOV PC,R14   |
00009350  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00009360  20 3b 20 72 65 67 20 30  0d 51 40 29 42 20 6e 65  | ; reg 0.Q@)B ne|
00009370  77 5f 68 6f 72 69 7a 76  65 72 74 20 20 20 20 20  |w_horizvert     |
00009380  20 20 20 20 20 20 20 20  20 20 3b 20 72 65 67 20  |          ; reg |
00009390  31 0d 51 4a 29 4d 4f 56  20 50 43 2c 52 31 34 20  |1.QJ)MOV PC,R14 |
000093a0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000093b0  20 20 20 3b 20 72 65 67  20 32 0d 51 54 29 4d 4f  |   ; reg 2.QT)MO|
000093c0  56 20 50 43 2c 52 31 34  20 20 20 20 20 20 20 20  |V PC,R14        |
000093d0  20 20 20 20 20 20 20 20  20 20 20 20 3b 20 72 65  |            ; re|
000093e0  67 20 33 0d 51 5e 29 4d  4f 56 20 50 43 2c 52 31  |g 3.Q^)MOV PC,R1|
000093f0  34 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |4               |
00009400  20 20 20 20 20 3b 20 72  65 67 20 34 0d 51 68 29  |     ; reg 4.Qh)|
00009410  4d 4f 56 20 50 43 2c 52  31 34 20 20 20 20 20 20  |MOV PC,R14      |
00009420  20 20 20 20 20 20 20 20  20 20 20 20 20 20 3b 20  |              ; |
00009430  72 65 67 20 35 0d 51 72  29 42 20 6e 65 77 5f 68  |reg 5.Qr)B new_h|
00009440  6f 72 69 7a 76 65 72 74  20 20 20 20 20 20 20 20  |orizvert        |
00009450  20 20 20 20 20 20 20 3b  20 72 65 67 20 36 0d 51  |       ; reg 6.Q|
00009460  7c 29 4d 4f 56 20 50 43  2c 52 31 34 20 20 20 20  ||)MOV PC,R14    |
00009470  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00009480  3b 20 72 65 67 20 37 0d  51 86 29 4d 4f 56 20 50  |; reg 7.Q.)MOV P|
00009490  43 2c 52 31 34 20 20 20  20 20 20 20 20 20 20 20  |C,R14           |
000094a0  20 20 20 20 20 20 20 20  20 3b 20 72 65 67 20 38  |         ; reg 8|
000094b0  0d 51 90 29 4d 4f 56 20  50 43 2c 52 31 34 20 20  |.Q.)MOV PC,R14  |
000094c0  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
000094d0  20 20 3b 20 72 65 67 20  39 0d 51 9a 2a 42 20 63  |  ; reg 9.Q.*B c|
000094e0  75 72 73 6f 72 5f 73 74  61 72 74 20 20 20 20 20  |ursor_start     |
000094f0  20 20 20 20 20 20 20 20  20 20 20 3b 20 72 65 67  |           ; reg|
00009500  20 31 30 0d 51 a4 2a 42  20 63 75 72 73 6f 72 5f  | 10.Q.*B cursor_|
00009510  65 6e 64 20 20 20 20 20  20 20 20 20 20 20 20 20  |end             |
00009520  20 20 20 20 20 3b 20 72  65 67 20 31 31 0d 51 ae  |     ; reg 11.Q.|
00009530  2a 42 20 63 72 74 31 32  20 20 20 20 20 20 20 20  |*B crt12        |
00009540  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 3b  |               ;|
00009550  20 72 65 67 20 31 32 0d  51 b8 2a 42 20 63 72 74  | reg 12.Q.*B crt|
00009560  31 33 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |13              |
00009570  20 20 20 20 20 20 20 20  20 3b 20 72 65 67 20 31  |         ; reg 1|
00009580  33 0d 51 c2 2a 42 20 63  75 72 73 6f 72 5f 63 68  |3.Q.*B cursor_ch|
00009590  61 6e 67 65 64 20 20 20  20 20 20 20 20 20 20 20  |anged           |
000095a0  20 20 20 3b 20 72 65 67  20 31 34 0d 51 cc 2a 42  |   ; reg 14.Q.*B|
000095b0  20 63 75 72 73 6f 72 5f  63 68 61 6e 67 65 64 20  | cursor_changed |
000095c0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 72  |             ; r|
000095d0  65 67 20 31 35 0d 51 d6  2a 4d 4f 56 20 50 43 2c  |eg 15.Q.*MOV PC,|
000095e0  52 31 34 20 20 20 20 20  20 20 20 20 20 20 20 20  |R14             |
000095f0  20 20 20 20 20 20 20 3b  20 72 65 67 20 31 36 0d  |       ; reg 16.|
00009600  51 e0 2a 4d 4f 56 20 50  43 2c 52 31 34 20 20 20  |Q.*MOV PC,R14   |
00009610  20 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |                |
00009620  20 3b 20 72 65 67 20 31  37 0d 51 ea 04 0d 51 f4  | ; reg 17.Q...Q.|
00009630  04 0d 51 fe 04 0d 52 08  4a 43 4d 50 20 52 31 32  |..Q...R.JCMP R12|
00009640  2c 23 31 34 20 3a 20 43  4d 50 4e 45 20 52 31 32  |,#14 : CMPNE R12|
00009650  2c 23 31 35 20 3a 20 ec  51 20 52 30 2c 23 31 20  |,#15 : .Q R0,#1 |
00009660  3a 20 53 54 52 45 51 20  52 30 2c 5b 6d 65 6d 2c  |: STREQ R0,[mem,|
00009670  23 63 75 72 73 6f 72 5f  74 61 6d 70 65 72 5d 0d  |#cursor_tamper].|
00009680  52 12 22 43 4d 50 20 52  31 32 2c 23 31 30 20 3a  |R."CMP R12,#10 :|
00009690  20 42 45 51 20 63 75 72  73 6f 72 5f 73 74 61 72  | BEQ cursor_star|
000096a0  74 0d 52 1c 20 43 4d 50  20 52 31 32 2c 23 31 31  |t.R. CMP R12,#11|
000096b0  20 3a 20 42 45 51 20 63  75 72 73 6f 72 5f 65 6e  | : BEQ cursor_en|
000096c0  64 0d 52 26 28 43 4d 50  20 52 31 32 2c 23 31 32  |d.R&(CMP R12,#12|
000096d0  20 3a 20 42 45 51 20 63  72 74 31 32 20 3a 20 2e  | : BEQ crt12 : .|
000096e0  63 72 74 31 32 63 6f 6e  74 0d 52 30 0f 43 4d 50  |crt12cont.R0.CMP|
000096f0  20 52 31 32 2c 23 31 32  0d 52 3a 11 43 4d 50 4e  | R12,#12.R:.CMPN|
00009700  45 20 52 31 32 2c 23 31  33 0d 52 44 10 43 4d 50  |E R12,#13.RD.CMP|
00009710  4e 45 20 52 31 32 2c 23  31 0d 52 4e 10 43 4d 50  |NE R12,#1.RN.CMP|
00009720  4e 45 20 52 31 32 2c 23  36 0d 52 58 10 4d 4f 56  |NE R12,#6.RX.MOV|
00009730  4e 45 20 50 43 2c 52 31  34 0d 52 62 0e 4d 4f 56  |NE PC,R14.Rb.MOV|
00009740  20 52 31 33 2c 23 31 0d  52 6c 19 53 54 52 20 52  | R13,#1.Rl.STR R|
00009750  31 33 2c 5b 6d 65 6d 2c  23 74 61 6d 70 65 72 5d  |13,[mem,#tamper]|
00009760  0d 52 76 0e 43 4d 50 20  52 31 32 2c 23 31 0d 52  |.Rv.CMP R12,#1.R|
00009770  80 10 43 4d 50 4e 45 20  52 31 32 2c 23 36 0d 52  |..CMPNE R12,#6.R|
00009780  8a 15 42 45 51 20 6e 65  77 5f 68 6f 72 69 7a 76  |..BEQ new_horizv|
00009790  65 72 74 0d 52 94 10 3b  43 4d 50 20 52 31 32 2c  |ert.R..;CMP R12,|
000097a0  23 31 33 0d 52 9e 1e 3b  53 57 49 45 51 20 22 36  |#13.R..;SWIEQ "6|
000097b0  35 30 32 5f 55 70 64 61  74 65 53 63 72 65 65 6e  |502_UpdateScreen|
000097c0  22 0d 52 a8 0f 43 4d 50  20 52 31 32 2c 23 31 32  |".R..CMP R12,#12|
000097d0  0d 52 b2 11 43 4d 50 4e  45 20 52 31 32 2c 23 31  |.R..CMPNE R12,#1|
000097e0  33 0d 52 bc 10 4d 4f 56  4e 45 20 50 43 2c 52 31  |3.R..MOVNE PC,R1|
000097f0  34 0d 52 c6 11 42 20 72  65 63 61 6c 63 5f 77 72  |4.R..B recalc_wr|
00009800  61 70 0d 52 d0 04 0d 52  da 13 2e 63 75 72 73 6f  |ap.R...R...curso|
00009810  72 5f 63 68 61 6e 67 65  64 0d 52 e4 0d 4d 4f 56  |r_changed.R..MOV|
00009820  20 52 30 2c 23 31 0d 52  ee 20 53 54 52 42 20 52  | R0,#1.R. STRB R|
00009830  30 2c 5b 6d 65 6d 2c 23  63 75 72 73 6f 72 5f 74  |0,[mem,#cursor_t|
00009840  61 6d 70 65 72 5d 0d 52  f8 0e 4d 4f 56 20 50 43  |amper].R..MOV PC|
00009850  2c 52 31 34 0d 53 02 04  0d 53 0c 12 2e 6e 65 77  |,R14.S...S...new|
00009860  5f 68 6f 72 69 7a 76 65  72 74 0d 53 16 0e 4d 4f  |_horizvert.S..MO|
00009870  56 20 52 31 33 2c 23 31  0d 53 20 19 53 54 52 20  |V R13,#1.S .STR |
00009880  52 31 33 2c 5b 6d 65 6d  2c 23 74 61 6d 70 65 72  |R13,[mem,#tamper|
00009890  5d 0d 53 2a 11 53 55 42  20 52 31 32 2c 52 31 2c  |].S*.SUB R12,R1,|
000098a0  52 30 0d 53 34 0e 43 4d  50 20 52 31 32 2c 23 32  |R0.S4.CMP R12,#2|
000098b0  0d 53 3e 10 4d 4f 56 4c  45 20 50 43 2c 52 31 34  |.S>.MOVLE PC,R14|
000098c0  0d 53 48 2b 4d 4f 56 20  52 31 32 2c 23 32 35 35  |.SH+MOV R12,#255|
000098d0  20 3a 20 53 54 52 42 20  52 31 32 2c 5b 6d 65 6d  | : STRB R12,[mem|
000098e0  2c 23 6c 61 73 74 6d 6f  64 65 5d 0d 53 52 0e 4d  |,#lastmode].SR.M|
000098f0  4f 56 20 50 43 2c 52 31  34 0d 53 5c 04 0d 53 66  |OV PC,R14.S\..Sf|
00009900  0a 2e 63 72 74 31 32 0d  53 70 11 43 4d 50 20 52  |..crt12.Sp.CMP R|
00009910  30 2c 23 25 30 31 31 30  0d 53 7a 12 4d 4f 56 4c  |0,#%0110.Sz.MOVL|
00009920  54 20 52 30 2c 23 25 31  31 30 0d 53 84 15 53 54  |T R0,#%110.S..ST|
00009930  52 42 20 52 30 2c 5b 52  31 33 2c 52 31 32 5d 0d  |RB R0,[R13,R12].|
00009940  53 8e 10 3b 42 20 63 72  74 31 32 63 6f 6e 74 0d  |S..;B crt12cont.|
00009950  53 98 0a 2e 63 72 74 31  33 0d 53 a2 04 0d 53 ac  |S...crt13.S...S.|
00009960  10 54 53 54 20 46 2c 23  31 3c 3c 31 31 0d 53 b6  |.TST F,#1<<11.S.|
00009970  06 3b 5d 0d 53 c0 13 3b  e7 20 ac 20 48 57 53 63  |.;].S..;. . HWSc|
00009980  72 6f 6c 6c 20 8c 0d 53  ca 0a 3b 5b 4f 50 54 70  |roll ..S..;[OPTp|
00009990  0d 53 d4 0d ec 51 20 52  31 33 2c 23 31 0d 53 de  |.S...Q R13,#1.S.|
000099a0  3d 53 54 52 45 51 20 52  31 33 2c 5b 6d 65 6d 2c  |=STREQ R13,[mem,|
000099b0  23 74 61 6d 70 65 72 5d  20 20 20 3b 20 64 6f 6e  |#tamper]   ; don|
000099c0  27 74 20 77 61 6e 74 20  74 68 69 73 20 66 6f 72  |'t want this for|
000099d0  20 48 57 20 53 63 72 6f  6c 6c 0d 53 e8 13 42 45  | HW Scroll.S..BE|
000099e0  51 20 72 65 63 61 6c 63  5f 77 72 61 70 0d 53 f2  |Q recalc_wrap.S.|
000099f0  06 3b 5d 0d 53 fc 06 3b  8b 0d 54 06 04 0d 54 10  |.;].S..;..T...T.|
00009a00  0a 3b 5b 4f 50 54 70 0d  54 1a 0f 3b 20 48 57 20  |.;[OPTp.T..; HW |
00009a10  73 63 72 6f 6c 6c 0d 54  24 18 4c 44 52 20 52 31  |scroll.T$.LDR R1|
00009a20  32 2c 75 70 64 61 74 65  70 69 78 65 6c 56 0d 54  |2,updatepixelV.T|
00009a30  2e 1d 41 44 52 20 52 31  33 2c 64 6f 68 61 72 64  |..ADR R13,dohard|
00009a40  77 61 72 65 5f 73 63 72  6f 6c 6c 0d 54 38 0f 43  |ware_scroll.T8.C|
00009a50  4d 50 20 52 31 32 2c 52  31 33 0d 54 42 1a 53 54  |MP R12,R13.TB.ST|
00009a60  52 4e 45 20 52 31 33 2c  75 70 64 61 74 65 70 69  |RNE R13,updatepi|
00009a70  78 65 6c 56 0d 54 4c 04  0d 54 56 11 42 20 72 65  |xelV.TL..TV.B re|
00009a80  63 61 6c 63 5f 77 72 61  70 0d 54 60 04 0d 54 6a  |calc_wrap.T`..Tj|
00009a90  16 2e 64 6f 68 61 72 64  77 61 72 65 5f 73 63 72  |..dohardware_scr|
00009aa0  6f 6c 6c 0d 54 74 27 3b  20 48 65 72 65 20 77 65  |oll.Tt'; Here we|
00009ab0  20 64 6f 20 74 68 65 20  68 61 72 64 77 61 72 65  | do the hardware|
00009ac0  20 73 63 72 6f 6c 6c 69  6e 67 0d 54 7e 0f 53 54  | scrolling.T~.ST|
00009ad0  52 20 52 31 34 2c 79 75  6b 0d 54 88 17 42 4c 20  |R R14,yuk.T..BL |
00009ae0  64 6f 68 61 72 64 77 61  72 65 73 63 72 6f 6c 6c  |dohardwarescroll|
00009af0  0d 54 92 18 42 4c 20 70  6f 6b 65 5f 75 70 64 61  |.T..BL poke_upda|
00009b00  74 65 70 69 78 65 6c 56  0d 54 9c 0f 4c 44 52 20  |tepixelV.T..LDR |
00009b10  52 31 34 2c 79 75 6b 0d  54 a6 29 3b 20 54 68 65  |R14,yuk.T.); The|
00009b20  6e 20 77 65 20 67 6f 20  64 6f 20 74 68 65 20 75  |n we go do the u|
00009b30  70 64 61 74 65 20 61 73  20 6e 6f 72 6d 61 6c 2e  |pdate as normal.|
00009b40  0d 54 b0 34 3b 4c 44 52  20 50 43 2c 64 6f 68 61  |.T.4;LDR PC,doha|
00009b50  72 64 77 61 72 65 5f 73  63 72 6f 6c 6c 56 20 3b  |rdware_scrollV ;|
00009b60  20 6f 6c 64 20 63 6f 6e  74 65 6e 74 73 20 6f 66  | old contents of|
00009b70  20 75 70 56 0d 54 ba 17  4c 44 52 20 50 43 2c 75  | upV.T..LDR PC,u|
00009b80  70 64 61 74 65 70 69 78  65 6c 56 0d 54 c4 04 0d  |pdatepixelV.T...|
00009b90  54 ce 08 2e 79 75 6b 0d  54 d8 0a 45 51 55 44 20  |T...yuk.T..EQUD |
00009ba0  30 0d 54 e2 04 0d 54 ec  18 3b 2e 64 6f 68 61 72  |0.T...T..;.dohar|
00009bb0  64 77 61 72 65 5f 73 63  72 6f 6c 6c 56 0d 54 f6  |dware_scrollV.T.|
00009bc0  0b 3b 45 51 55 44 20 30  0d 55 00 04 0d 55 0a 15  |.;EQUD 0.U...U..|
00009bd0  2e 64 6f 68 61 72 64 77  61 72 65 73 63 72 6f 6c  |.dohardwarescrol|
00009be0  6c 0d 55 14 15 a4 64 6f  68 61 72 64 77 61 72 65  |l.U...dohardware|
00009bf0  73 63 72 6f 6c 6c 0d 55  1e 04 0d 55 28 18 3b 2e  |scroll.U...U(.;.|
00009c00  73 63 72 65 65 6e 77 69  64 74 68 63 68 61 6e 67  |screenwidthchang|
00009c10  65 64 0d 55 32 0f 3b 4d  4f 56 20 50 43 2c 52 31  |ed.U2.;MOV PC,R1|
00009c20  34 0d 55 3c 04 0d 55 46  20 2e 68 61 72 64 77 61  |4.U<..UF .hardwa|
00009c30  72 65 5f 73 63 72 6f 6c  6c 5f 73 74 61 63 6b 5f  |re_scroll_stack_|
00009c40  73 70 61 63 65 0d 55 50  1c 5d 3a 50 25 2b 3d 32  |space.UP.]:P%+=2|
00009c50  35 36 3a 4f 25 2b 3d 32  35 36 3a 5b 4f 50 54 20  |56:O%+=256:[OPT |
00009c60  70 0d 55 5a 24 2e 68 61  72 64 77 61 72 65 5f 73  |p.UZ$.hardware_s|
00009c70  63 72 6f 6c 6c 5f 73 74  61 63 6b 5f 73 70 61 63  |croll_stack_spac|
00009c80  65 5f 74 6f 70 0d 55 64  05 5d 0d 55 6e 04 0d 55  |e_top.Ud.].Un..U|
00009c90  78 05 cd 0d 55 82 04 0d  55 8c 09 5b 4f 50 54 70  |x...U...U..[OPTp|
00009ca0  0d 55 96 22 3b 20 65 6e  64 20 6f 66 20 68 61 72  |.U."; end of har|
00009cb0  64 77 61 72 65 20 73 63  72 6f 6c 6c 20 73 74 75  |dware scroll stu|
00009cc0  66 66 0d 55 a0 04 0d 55  aa 11 2e 63 75 72 73 6f  |ff.U...U...curso|
00009cd0  72 5f 73 74 61 72 74 0d  55 b4 1d 5c 4c 44 52 42  |r_start.U..\LDRB|
00009ce0  20 52 31 2c 5b 6d 65 6d  2c 23 63 75 72 73 6f 72  | R1,[mem,#cursor|
00009cf0  5f 6f 6e 5d 0d 55 be 1c  5c 43 4d 50 20 52 31 2c  |_on].U..\CMP R1,|
00009d00  23 30 3a 5c 4d 4f 56 4e  45 20 50 43 2c 52 31 34  |#0:\MOVNE PC,R14|
00009d10  0d 55 c8 1f 54 53 54 20  46 2c 23 31 20 3c 3c 20  |.U..TST F,#1 << |
00009d20  31 30 20 3b 20 63 75 72  73 6f 72 20 6f 6e 3f 0d  |10 ; cursor on?.|
00009d30  55 d2 0d ec 51 20 50 43  2c 52 31 34 0d 55 dc 1e  |U...Q PC,R14.U..|
00009d40  4c 44 52 42 20 52 31 2c  5b 6d 65 6d 2c 23 63 72  |LDRB R1,[mem,#cr|
00009d50  74 5f 72 65 67 73 2b 31  31 5d 0d 55 e6 13 80 20  |t_regs+11].U... |
00009d60  52 31 2c 52 31 2c 23 25  31 31 31 31 31 0d 55 f0  |R1,R1,#%11111.U.|
00009d70  13 80 20 52 32 2c 52 30  2c 23 25 31 31 31 31 31  |.. R2,R0,#%11111|
00009d80  0d 55 fa 0d 43 4d 50 20  52 32 2c 52 31 0d 56 04  |.U..CMP R2,R1.V.|
00009d90  14 42 47 54 20 62 6c 61  6e 6b 5f 63 75 72 73 6f  |.BGT blank_curso|
00009da0  72 0d 56 0e 04 0d 56 18  14 82 20 52 30 2c 52 30  |r.V...V... R0,R0|
00009db0  2c 23 25 31 30 30 30 30  30 0d 56 22 14 54 53 54  |,#%100000.V".TST|
00009dc0  20 52 30 2c 23 25 31 31  30 30 30 30 30 0d 56 2c  | R0,#%1100000.V,|
00009dd0  14 42 45 51 20 62 6c 61  6e 6b 5f 63 75 72 73 6f  |.BEQ blank_curso|
00009de0  72 0d 56 36 13 42 20 64  65 66 69 6e 65 5f 63 75  |r.V6.B define_cu|
00009df0  72 73 6f 72 0d 56 40 04  0d 56 4a 0f 2e 63 75 72  |rsor.V@..VJ..cur|
00009e00  73 6f 72 5f 65 6e 64 0d  56 54 1d 5c 4c 44 52 42  |sor_end.VT.\LDRB|
00009e10  20 52 31 2c 5b 6d 65 6d  2c 23 63 75 72 73 6f 72  | R1,[mem,#cursor|
00009e20  5f 6f 6e 5d 0d 56 5e 1c  5c 43 4d 50 20 52 31 2c  |_on].V^.\CMP R1,|
00009e30  23 30 3a 5c 4d 4f 56 4e  45 20 50 43 2c 52 31 34  |#0:\MOVNE PC,R14|
00009e40  0d 56 68 1f 54 53 54 20  46 2c 23 31 20 3c 3c 20  |.Vh.TST F,#1 << |
00009e50  31 30 20 3b 20 63 75 72  73 6f 72 20 6f 6e 3f 0d  |10 ; cursor on?.|
00009e60  56 72 0d ec 51 20 50 43  2c 52 31 34 0d 56 7c 13  |Vr..Q PC,R14.V|.|
00009e70  80 20 52 31 2c 52 30 2c  23 25 31 31 31 31 31 0d  |. R1,R0,#%11111.|
00009e80  56 86 1e 4c 44 52 42 20  52 32 2c 5b 6d 65 6d 2c  |V..LDRB R2,[mem,|
00009e90  23 63 72 74 5f 72 65 67  73 2b 31 30 5d 0d 56 90  |#crt_regs+10].V.|
00009ea0  13 80 20 52 32 2c 52 32  2c 23 25 31 31 31 31 31  |.. R2,R2,#%11111|
00009eb0  0d 56 9a 0d 43 4d 50 20  52 32 2c 52 31 0d 56 a4  |.V..CMP R2,R1.V.|
00009ec0  14 42 47 54 20 62 6c 61  6e 6b 5f 63 75 72 73 6f  |.BGT blank_curso|
00009ed0  72 0d 56 ae 13 42 20 64  65 66 69 6e 65 5f 63 75  |r.V..B define_cu|
00009ee0  72 73 6f 72 0d 56 b8 0f  3b 4d 4f 56 20 50 43 2c  |rsor.V..;MOV PC,|
00009ef0  52 31 34 0d 56 c2 04 0d  56 cc 09 2e 6c 69 6e 6b  |R14.V...V...link|
00009f00  0d 56 d6 0a 45 51 55 44  20 30 0d 56 e0 04 0d 56  |.V..EQUD 0.V...V|
00009f10  ea 0e 2e 63 61 70 73 5f  6c 6f 63 6b 0d 56 f4 12  |...caps_lock.V..|
00009f20  80 20 52 30 2c 52 30 2c  23 25 31 30 30 30 0d 56  |. R0,R0,#%1000.V|
00009f30  fe 13 4d 4f 56 20 52 31  2c 52 30 2c 4c 53 4c 23  |..MOV R1,R0,LSL#|
00009f40  31 0d 57 08 0f 4d 4f 56  20 52 30 2c 23 32 30 32  |1.W..MOV R0,#202|
00009f50  0d 57 12 15 4d 4f 56 20  52 32 2c 23 25 31 31 31  |.W..MOV R2,#%111|
00009f60  30 31 31 31 31 0d 57 1c  11 53 57 49 20 22 4f 53  |01111.W..SWI "OS|
00009f70  5f 42 79 74 65 22 0d 57  26 0f 4d 4f 56 20 52 30  |_Byte".W&.MOV R0|
00009f80  2c 23 31 31 38 0d 57 30  11 53 57 49 20 22 4f 53  |,#118.W0.SWI "OS|
00009f90  5f 42 79 74 65 22 0d 57  3a 0e 4d 4f 56 20 50 43  |_Byte".W:.MOV PC|
00009fa0  2c 52 31 34 0d 57 44 04  0d 57 4e 0a 2e 6c 61 74  |,R14.WD..WN..lat|
00009fb0  63 68 0d 57 58 16 3b 84  52 20 52 30 2c 52 30 2c  |ch.WX.;.R R0,R0,|
00009fc0  23 25 31 31 30 30 30 30  0d 57 62 27 3b 53 54 52  |#%110000.Wb';STR|
00009fd0  42 20 52 30 2c 5b 6d 65  6d 2c 52 31 5d 20 3b 20  |B R0,[mem,R1] ; |
00009fe0  6e 6f 20 66 69 72 65 20  62 75 74 74 6f 6e 73 0d  |no fire buttons.|
00009ff0  57 6c 12 80 53 20 52 32  2c 52 30 2c 23 25 31 31  |Wl..S R2,R0,#%11|
0000a000  31 0d 57 76 04 0d 57 80  08 3b 52 4a 57 0d 57 8a  |1.Wv..W..;RJW.W.|
0000a010  0e 3b 43 4d 50 20 52 32  2c 23 30 0d 57 94 1e 54  |.;CMP R2,#0.W..T|
0000a020  53 54 45 51 20 46 2c 23  31 3c 3c 31 32 20 3b 20  |STEQ F,#1<<12 ; |
0000a030  73 6f 75 6e 64 20 6f 6e  3f 0d 57 9e 13 42 45 51  |sound on?.W..BEQ|
0000a040  20 73 6f 75 6e 64 5f 6c  61 74 63 68 0d 57 a8 0d  | sound_latch.W..|
0000a050  43 4d 50 20 52 32 2c 23  33 0d 57 b2 12 42 45 51  |CMP R2,#3.W..BEQ|
0000a060  20 6c 61 74 63 68 5f 6b  65 79 62 0d 57 bc 0d 43  | latch_keyb.W..C|
0000a070  4d 50 20 52 32 2c 23 36  0d 57 c6 11 42 45 51 20  |MP R2,#6.W..BEQ |
0000a080  63 61 70 73 5f 6c 6f 63  6b 0d 57 d0 1f 4c 44 52  |caps_lock.W..LDR|
0000a090  42 20 52 31 32 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |B R12,[mem,#crt_|
0000a0a0  72 65 67 73 2b 31 39 5d  0d 57 da 0d 43 4d 50 20  |regs+19].W..CMP |
0000a0b0  52 32 2c 23 34 0d 57 e4  15 80 45 51 20 52 31 33  |R2,#4.W...EQ R13|
0000a0c0  2c 52 30 2c 23 25 31 30  30 30 0d 57 ee 15 42 49  |,R0,#%1000.W..BI|
0000a0d0  43 45 51 20 52 31 32 2c  52 31 32 2c 23 25 31 0d  |CEQ R12,R12,#%1.|
0000a0e0  57 f8 1a 84 52 45 51 20  52 31 32 2c 52 31 32 2c  |W...REQ R12,R12,|
0000a0f0  52 31 33 2c 4c 53 52 23  33 0d 58 02 0d 43 4d 50  |R13,LSR#3.X..CMP|
0000a100  20 52 32 2c 23 35 0d 58  0c 15 80 45 51 20 52 31  | R2,#5.X...EQ R1|
0000a110  33 2c 52 30 2c 23 25 31  30 30 30 0d 58 16 16 42  |3,R0,#%1000.X..B|
0000a120  49 43 45 51 20 52 31 32  2c 52 31 32 2c 23 25 31  |ICEQ R12,R12,#%1|
0000a130  30 0d 58 20 1a 84 52 45  51 20 52 31 32 2c 52 31  |0.X ..REQ R12,R1|
0000a140  32 2c 52 31 33 2c 4c 53  52 23 32 0d 58 2a 1f 53  |2,R13,LSR#2.X*.S|
0000a150  54 52 42 20 52 31 32 2c  5b 6d 65 6d 2c 23 63 72  |TRB R12,[mem,#cr|
0000a160  74 5f 72 65 67 73 2b 31  39 5d 0d 58 34 04 0d 58  |t_regs+19].X4..X|
0000a170  3e 10 2e 72 65 63 61 6c  63 5f 77 72 61 70 0d 58  |>..recalc_wrap.X|
0000a180  48 1f 4c 44 52 42 20 52  31 32 2c 5b 6d 65 6d 2c  |H.LDRB R12,[mem,|
0000a190  23 63 72 74 5f 72 65 67  73 2b 31 39 5d 0d 58 52  |#crt_regs+19].XR|
0000a1a0  13 80 53 20 52 31 32 2c  52 31 32 2c 23 25 31 31  |..S R12,R12,#%11|
0000a1b0  0d 58 5c 14 4d 4f 56 4e  45 20 52 31 33 2c 23 26  |.X\.MOVNE R13,#&|
0000a1c0  35 38 30 30 0d 58 66 11  ec 51 20 52 31 33 2c 23  |5800.Xf..Q R13,#|
0000a1d0  26 34 30 30 30 0d 58 70  10 43 4d 50 20 52 31 32  |&4000.Xp.CMP R12|
0000a1e0  2c 23 25 31 30 0d 58 7a  11 ec 51 20 52 31 33 2c  |,#%10.Xz..Q R13,|
0000a1f0  23 26 33 30 30 30 0d 58  84 10 43 4d 50 20 52 31  |#&3000.X..CMP R1|
0000a200  32 2c 23 25 30 31 0d 58  8e 11 ec 51 20 52 31 33  |2,#%01.X...Q R13|
0000a210  2c 23 26 36 30 30 30 0d  58 98 04 0d 58 a2 1f 4c  |,#&6000.X...X..L|
0000a220  44 52 42 20 52 31 32 2c  5b 6d 65 6d 2c 23 63 72  |DRB R12,[mem,#cr|
0000a230  74 5f 72 65 67 73 2b 31  33 5d 0d 58 ac 1e 4c 44  |t_regs+13].X..LD|
0000a240  52 42 20 52 32 2c 5b 6d  65 6d 2c 23 63 72 74 5f  |RB R2,[mem,#crt_|
0000a250  72 65 67 73 2b 31 32 5d  0d 58 b6 12 80 20 52 32  |regs+12].X... R2|
0000a260  2c 52 32 2c 23 25 31 31  31 31 0d 58 c0 18 41 44  |,R2,#%1111.X..AD|
0000a270  44 20 52 31 32 2c 52 31  32 2c 52 32 2c 4c 53 4c  |D R12,R12,R2,LSL|
0000a280  23 38 0d 58 ca 04 0d 58  d4 15 43 4d 50 20 52 31  |#8.X...X..CMP R1|
0000a290  33 2c 52 31 32 2c 4c 53  4c 23 33 0d 58 de 17 4d  |3,R12,LSL#3.X..M|
0000a2a0  4f 56 47 54 20 52 31 33  2c 52 31 32 2c 4c 53 4c  |OVGT R13,R12,LSL|
0000a2b0  23 33 0d 58 e8 04 0d 58  f2 1d 53 55 42 20 52 31  |#3.X...X..SUB R1|
0000a2c0  32 2c 6d 65 6d 2c 23 35  31 32 20 3b 20 73 68 65  |2,mem,#512 ; she|
0000a2d0  69 6c 61 0d 58 fc 17 4c  44 52 42 20 52 31 32 2c  |ila.X..LDRB R12,|
0000a2e0  5b 52 31 32 2c 23 26 32  30 5d 0d 59 06 04 0d 59  |[R12,#&20].Y...Y|
0000a2f0  10 1c 54 53 54 20 52 31  32 2c 23 25 31 30 20 3b  |..TST R12,#%10 ;|
0000a300  20 74 65 6c 65 74 65 78  74 3f 0d 59 1a 14 4d 4f  | teletext?.Y..MO|
0000a310  56 4e 45 20 52 31 33 2c  23 26 37 43 30 30 0d 59  |VNE R13,#&7C00.Y|
0000a320  24 04 0d 59 2e 0f 3b 80  20 46 2c 46 2c 23 26 46  |$..Y..;. F,F,#&F|
0000a330  46 0d 59 38 16 42 49 43  20 46 2c 46 2c 23 26 46  |F.Y8.BIC F,F,#&F|
0000a340  46 30 30 30 30 30 30 0d  59 42 14 42 49 43 20 46  |F000000.YB.BIC F|
0000a350  2c 46 2c 23 26 46 46 30  30 30 30 0d 59 4c 15 84  |,F,#&FF0000.YL..|
0000a360  52 20 46 2c 46 2c 52 31  33 2c 4c 53 4c 23 31 36  |R F,F,R13,LSL#16|
0000a370  0d 59 56 16 3b 53 54 52  20 52 31 33 2c 77 72 61  |.YV.;STR R13,wra|
0000a380  70 5f 61 64 64 72 0d 59  60 0e 4d 4f 56 20 50 43  |p_addr.Y`.MOV PC|
0000a390  2c 52 31 34 0d 59 6a 04  0d 59 74 04 0d 59 7e 0f  |,R14.Yj..Yt..Y~.|
0000a3a0  2e 6c 61 74 63 68 5f 6b  65 79 62 0d 59 88 04 0d  |.latch_keyb.Y...|
0000a3b0  59 92 12 80 20 52 32 2c  52 30 2c 23 25 31 30 30  |Y... R2,R0,#%100|
0000a3c0  30 0d 59 9c 19 53 54 52  42 20 52 32 2c 6b 65 79  |0.Y..STRB R2,key|
0000a3d0  5f 77 72 69 74 65 5f 65  6e 61 0d 59 a6 11 43 4d  |_write_ena.Y..CM|
0000a3e0  50 20 52 32 2c 23 25 31  30 30 30 0d 59 b0 10 4d  |P R2,#%1000.Y..M|
0000a3f0  4f 56 4e 45 20 50 43 2c  52 31 34 0d 59 ba 0d 4d  |OVNE PC,R14.Y..M|
0000a400  4f 56 20 52 32 2c 23 30  0d 59 c4 1a 53 54 52 42  |OV R2,#0.Y..STRB|
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 ce 0e 4d 4f  56 20 50 43 2c 52 31 34  |er.Y..MOV PC,R14|
0000a430  0d 59 d8 04 0d 59 e2 12  2e 70 72 69 6e 74 65 72  |.Y...Y...printer|
0000a440  5f 77 72 69 74 65 0d 59  ec 0c 53 57 49 20 26 31  |_write.Y..SWI &1|
0000a450  30 32 0d 59 f6 0c 53 57  49 20 26 31 30 31 0d 5a  |02.Y..SWI &101.Z|
0000a460  00 13 53 57 49 20 22 4f  53 5f 57 72 69 74 65 43  |..SWI "OS_WriteC|
0000a470  22 0d 5a 0a 1b 4d 4f 56  20 52 30 2c 23 31 35 32  |".Z..MOV R0,#152|
0000a480  20 3a 20 4d 4f 56 20 52  31 2c 23 33 0d 5a 14 28  | : MOV R1,#3.Z.(|
0000a490  53 57 49 20 22 4f 53 5f  42 79 74 65 22 20 3b 20  |SWI "OS_Byte" ; |
0000a4a0  63 68 65 63 6b 20 70 72  69 6e 74 65 72 20 62 75  |check printer bu|
0000a4b0  66 66 65 72 0d 5a 1e 12  42 43 53 20 70 72 69 6e  |ffer.Z..BCS prin|
0000a4c0  74 65 72 5f 6f 6e 0d 5a  28 1a 4d 4f 56 20 52 30  |ter_on.Z(.MOV R0|
0000a4d0  2c 23 32 31 20 3a 20 4d  4f 56 20 52 31 2c 23 33  |,#21 : MOV R1,#3|
0000a4e0  0d 5a 32 20 53 57 49 20  22 4f 53 5f 42 79 74 65  |.Z2 SWI "OS_Byte|
0000a4f0  22 20 3b 20 66 6c 75 73  68 20 62 75 66 66 65 72  |" ; flush buffer|
0000a500  0d 5a 3c 0f 2e 70 72 69  6e 74 65 72 5f 6f 6e 0d  |.Z<..printer_on.|
0000a510  5a 46 0c 53 57 49 20 26  31 30 33 0d 5a 50 17 4c  |ZF.SWI &103.ZP.L|
0000a520  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 69 66 72  |DRB R0,[mem,#ifr|
0000a530  32 5d 0d 5a 5a 11 84 52  20 52 30 2c 52 30 2c 23  |2].ZZ..R R0,R0,#|
0000a540  25 31 30 0d 5a 64 17 53  54 52 42 20 52 30 2c 5b  |%10.Zd.STRB R0,[|
0000a550  6d 65 6d 2c 23 69 66 72  32 5d 0d 5a 6e 0e 4d 4f  |mem,#ifr2].Zn.MO|
0000a560  56 20 50 43 2c 52 31 34  0d 5a 78 04 0d 5a 82 0c  |V PC,R14.Zx..Z..|
0000a570  2e 72 65 67 42 5f 34 31  0d 5a 8c 04 0d 5a 96 1d  |.regB_41.Z...Z..|
0000a580  53 55 42 20 52 31 32 2c  6d 65 6d 2c 23 35 31 32  |SUB R12,mem,#512|
0000a590  20 3b 20 73 68 65 69 6c  61 0d 5a a0 1b 4c 44 52  | ; sheila.Z..LDR|
0000a5a0  42 20 52 31 2c 5b 52 31  32 2c 23 26 43 5d 20 3b  |B R1,[R12,#&C] ;|
0000a5b0  20 50 43 52 0d 5a aa 16  4c 44 52 42 20 52 32 2c  | PCR.Z..LDRB R2,|
0000a5c0  5b 6d 65 6d 2c 23 69 66  72 5d 0d 5a b4 13 80 20  |[mem,#ifr].Z... |
0000a5d0  52 31 33 2c 52 31 2c 23  25 31 31 31 30 0d 5a be  |R13,R1,#%1110.Z.|
0000a5e0  15 54 45 51 20 52 31 33  2c 20 20 20 23 25 30 30  |.TEQ R13,   #%00|
0000a5f0  31 30 0d 5a c8 15 54 45  51 4e 45 20 52 31 33 2c  |10.Z..TEQNE R13,|
0000a600  20 23 25 30 31 31 30 0d  5a d2 14 42 49 43 45 51  | #%0110.Z..BICEQ|
0000a610  20 52 32 2c 52 32 2c 23  25 31 31 0d 5a dc 14 42  | R2,R2,#%11.Z..B|
0000a620  49 43 4e 45 20 52 32 2c  52 32 2c 23 25 31 30 0d  |ICNE R2,R2,#%10.|
0000a630  5a e6 16 53 54 52 42 20  52 32 2c 5b 6d 65 6d 2c  |Z..STRB R2,[mem,|
0000a640  23 69 66 72 5d 0d 5a f0  0c 2e 72 65 67 42 5f 34  |#ifr].Z...regB_4|
0000a650  46 0d 5a fa 1d 53 55 42  20 52 31 32 2c 6d 65 6d  |F.Z..SUB R12,mem|
0000a660  2c 23 35 31 32 20 3b 20  73 68 65 69 6c 61 0d 5b  |,#512 ; sheila.[|
0000a670  04 04 0d 5b 0e 3d 53 54  52 42 20 52 30 2c 73 6f  |...[.=STRB R0,so|
0000a680  75 6e 64 5f 64 61 74 61  20 20 20 20 20 20 20 20  |und_data        |
0000a690  20 20 20 20 3b 20 6b 65  65 70 20 61 20 63 6f 70  |    ; keep a cop|
0000a6a0  79 20 69 6e 20 73 6f 75  6e 64 5f 64 61 74 61 0d  |y in sound_data.|
0000a6b0  5b 18 04 0d 5b 22 2a 4c  44 52 42 20 52 32 2c 5b  |[...["*LDRB R2,[|
0000a6c0  52 31 32 2c 23 26 34 33  5d 20 3b 20 52 32 3d 64  |R12,#&43] ; R2=d|
0000a6d0  61 74 61 20 64 69 72 65  63 74 69 6f 6e 0d 5b 2c  |ata direction.[,|
0000a6e0  0e 80 20 52 31 2c 52 30  2c 52 32 0d 5b 36 0e 3b  |.. R1,R0,R2.[6.;|
0000a6f0  4d 4f 56 20 52 31 2c 52  30 0d 5b 40 40 80 53 20  |MOV R1,R0.[@@.S |
0000a700  52 30 2c 52 31 2c 23 25  30 31 31 31 30 30 30 30  |R0,R1,#%01110000|
0000a710  20 3a 20 4d 4f 56 4e 45  20 52 30 2c 23 30 20 3a  | : MOVNE R0,#0 :|
0000a720  20 53 54 52 4e 45 42 20  52 30 2c 63 6f 6c 75 6d  | STRNEB R0,colum|
0000a730  6e 5f 63 6f 75 6e 74 65  72 0d 5b 4a 11 3b 82 20  |n_counter.[J.;. |
0000a740  52 31 2c 52 31 2c 23 26  46 46 0d 5b 54 1a 3b 53  |R1,R1,#&FF.[T.;S|
0000a750  57 49 20 22 36 35 30 32  5f 47 65 74 6b 65 79 61  |WI "6502_Getkeya|
0000a760  64 64 72 22 0d 5b 5e 1a  4c 44 52 20 52 30 2c 5b  |ddr".[^.LDR R0,[|
0000a770  6d 65 6d 2c 23 6b 65 79  5f 61 64 64 72 5d 0d 5b  |mem,#key_addr].[|
0000a780  68 21 4c 44 52 42 20 52  32 2c 5b 52 30 5d 20 3b  |h!LDRB R2,[R0] ;|
0000a790  20 73 68 69 66 74 20 70  72 65 73 73 65 64 3f 0d  | shift pressed?.|
0000a7a0  5b 72 0d 43 4d 50 20 52  32 2c 23 30 0d 5b 7c 14  |[r.CMP R2,#0.[|.|
0000a7b0  41 44 44 4e 45 20 52 30  2c 52 30 2c 23 32 35 36  |ADDNE R0,R0,#256|
0000a7c0  0d 5b 86 04 0d 5b 90 0f  80 20 52 32 2c 52 31 2c  |.[...[... R2,R1,|
0000a7d0  23 26 46 0d 5b 9a 29 43  4d 50 20 52 32 2c 23 26  |#&F.[.)CMP R2,#&|
0000a7e0  46 20 3b 20 63 6f 6c 75  6d 6e 20 63 6f 75 6e 74  |F ; column count|
0000a7f0  65 72 20 64 69 73 61 62  6c 65 64 3f 0d 5b a4 1e  |er disabled?.[..|
0000a800  42 45 51 20 64 69 73 61  62 6c 65 5f 63 6f 6c 75  |BEQ disable_colu|
0000a810  6d 6e 5f 63 6f 75 6e 74  65 72 0d 5b ae 1a 4c 44  |mn_counter.[..LD|
0000a820  52 42 20 52 32 2c 63 6f  6c 75 6d 6e 5f 63 6f 75  |RB R2,column_cou|
0000a830  6e 74 65 72 0d 5b b8 0e  43 4d 50 20 52 32 2c 23  |nter.[..CMP R2,#|
0000a840  26 46 0d 5b c2 11 42 45  51 20 63 68 65 63 6b 5f  |&F.[..BEQ check_|
0000a850  72 6f 77 0d 5b cc 04 0d  5b d6 13 3b 42 49 43 20  |row.[...[..;BIC |
0000a860  52 31 2c 52 31 2c 23 26  38 30 0d 5b e0 13 4c 44  |R1,R1,#&80.[..LD|
0000a870  52 42 20 52 30 2c 5b 52  30 2c 52 31 5d 0d 5b ea  |RB R0,[R0,R1].[.|
0000a880  24 3b 82 20 52 30 2c 52  30 2c 52 31 2c 4c 53 52  |$;. R0,R0,R1,LSR|
0000a890  23 37 20 3b 20 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |#7 ; ***********|
0000a8a0  2a 0d 5b f4 0f 3b 82 20  52 30 2c 52 30 2c 23 31  |*.[..;. R0,R0,#1|
0000a8b0  0d 5b fe 1a 3b 43 4d 50  20 52 30 2c 23 30 20 3a  |.[..;CMP R0,#0 :|
0000a8c0  20 3b ec 51 20 52 31 2c  23 30 0d 5c 08 15 84 52  | ;.Q R1,#0.\...R|
0000a8d0  20 52 30 2c 52 31 2c 52  30 2c 4c 53 4c 23 37 0d  | R0,R1,R0,LSL#7.|
0000a8e0  5c 12 14 3b 4d 4f 56 20  52 30 2c 52 31 2c 4c 53  |\..;MOV R0,R1,LS|
0000a8f0  4c 23 37 0d 5c 1c 0e 3b  4d 4f 56 20 52 30 2c 52  |L#7.\..;MOV R0,R|
0000a900  31 0d 5c 26 17 3b 41 44  44 20 52 30 2c 52 31 2c  |1.\&.;ADD R0,R1,|
0000a910  52 31 2c 4c 53 4c 23 37  0d 5c 30 04 0d 5c 3a 10  |R1,LSL#7.\0..\:.|
0000a920  3b 4d 4f 56 20 52 30 2c  23 26 38 31 0d 5c 44 10  |;MOV R0,#&81.\D.|
0000a930  3b 4d 4f 56 20 52 32 2c  23 26 46 46 0d 5c 4e 12  |;MOV R2,#&FF.\N.|
0000a940  3b 53 57 49 20 22 4f 53  5f 42 79 74 65 22 0d 5c  |;SWI "OS_Byte".\|
0000a950  58 17 3b 43 4d 50 20 52  30 2c 23 39 38 20 3b 20  |X.;CMP R0,#98 ; |
0000a960  73 70 61 63 65 0d 5c 62  10 3b 43 4d 50 20 52 31  |space.\b.;CMP R1|
0000a970  2c 23 26 46 46 0d 5c 6c  0f 3b ec 51 20 52 30 2c  |,#&FF.\l.;.Q R0,|
0000a980  23 26 38 30 0d 5c 76 10  3b 4d 4f 56 4e 45 20 52  |#&80.\v.;MOVNE R|
0000a990  30 2c 23 30 0d 5c 80 16  53 54 52 42 20 52 30 2c  |0,#0.\..STRB R0,|
0000a9a0  5b 52 31 32 2c 23 26 34  46 5d 0d 5c 8a 16 53 54  |[R12,#&4F].\..ST|
0000a9b0  52 42 20 52 30 2c 5b 52  31 32 2c 23 26 34 31 5d  |RB R0,[R12,#&41]|
0000a9c0  0d 5c 94 0e 4d 4f 56 20  50 43 2c 52 31 34 0d 5c  |.\..MOV PC,R14.\|
0000a9d0  9e 04 0d 5c a8 13 2e 63  6f 6c 75 6d 6e 5f 63 6f  |...\...column_co|
0000a9e0  75 6e 74 65 72 0d 5c b2  0a 45 51 55 44 20 30 0d  |unter.\..EQUD 0.|
0000a9f0  5c bc 12 2e 6b 65 79 5f  77 72 69 74 65 5f 65 6e  |\...key_write_en|
0000aa00  61 0d 5c c6 0a 45 51 55  44 20 30 0d 5c d0 04 0d  |a.\..EQUD 0.\...|
0000aa10  5c da 1b 2e 64 69 73 61  62 6c 65 5f 63 6f 6c 75  |\...disable_colu|
0000aa20  6d 6e 5f 63 6f 75 6e 74  65 72 0d 5c e4 1a 53 54  |mn_counter.\..ST|
0000aa30  52 42 20 52 32 2c 63 6f  6c 75 6d 6e 5f 63 6f 75  |RB R2,column_cou|
0000aa40  6e 74 65 72 0d 5c ee 0e  2e 63 68 65 63 6b 5f 72  |nter.\...check_r|
0000aa50  6f 77 0d 5c f8 16 80 20  52 31 2c 52 31 2c 23 25  |ow.\... R1,R1,#%|
0000aa60  30 30 30 30 31 31 31 31  0d 5d 02 0e 4d 4f 56 20  |00001111.]..MOV |
0000aa70  52 31 33 2c 23 30 0d 5d  0c 1a 3b 53 57 49 20 22  |R13,#0.]..;SWI "|
0000aa80  36 35 30 32 5f 47 65 74  6b 65 79 61 64 64 72 22  |6502_Getkeyaddr"|
0000aa90  0d 5d 16 1a 4c 44 52 20  52 30 2c 5b 6d 65 6d 2c  |.]..LDR R0,[mem,|
0000aaa0  23 6b 65 79 5f 61 64 64  72 5d 0d 5d 20 21 4c 44  |#key_addr].] !LD|
0000aab0  52 42 20 52 32 2c 5b 52  30 5d 20 3b 20 73 68 69  |RB R2,[R0] ; shi|
0000aac0  66 74 20 70 72 65 73 73  65 64 3f 0d 5d 2a 0d 43  |ft pressed?.]*.C|
0000aad0  4d 50 20 52 32 2c 23 30  0d 5d 34 14 41 44 44 4e  |MP R2,#0.]4.ADDN|
0000aae0  45 20 52 30 2c 52 30 2c  23 32 35 36 0d 5d 3e 04  |E R0,R0,#256.]>.|
0000aaf0  0d 5d 48 0d 2e 72 6f 77  5f 6c 6f 6f 70 0d 5d 52  |.]H..row_loop.]R|
0000ab00  13 4c 44 52 42 20 52 32  2c 5b 52 30 2c 52 31 5d  |.LDRB R2,[R0,R1]|
0000ab10  0d 5d 5c 11 84 52 20 52  31 33 2c 52 31 33 2c 52  |.]\..R R13,R13,R|
0000ab20  32 0d 5d 66 15 41 44 44  20 52 31 2c 52 31 2c 23  |2.]f.ADD R1,R1,#|
0000ab30  25 31 30 30 30 30 0d 5d  70 14 54 53 54 20 52 31  |%10000.]p.TST R1|
0000ab40  2c 23 25 31 31 31 30 30  30 30 0d 5d 7a 10 42 4e  |,#%1110000.]z.BN|
0000ab50  45 20 72 6f 77 5f 6c 6f  6f 70 0d 5d 84 12 80 53  |E row_loop.]...S|
0000ab60  20 52 31 32 2c 52 31 33  2c 23 25 31 0d 5d 8e 19  | R12,R13,#%1.]..|
0000ab70  4c 44 52 4e 45 42 20 52  31 33 2c 5b 6d 65 6d 2c  |LDRNEB R13,[mem,|
0000ab80  23 69 66 72 5d 0d 5d 98  14 84 52 4e 45 20 52 31  |#ifr].]...RNE R1|
0000ab90  33 2c 52 31 33 2c 52 31  32 0d 5d a2 19 53 54 52  |3,R13,R12.]..STR|
0000aba0  4e 45 42 20 52 31 33 2c  5b 6d 65 6d 2c 23 69 66  |NEB R13,[mem,#if|
0000abb0  72 5d 0d 5d ac 1c 53 55  42 20 52 30 2c 6d 65 6d  |r].]..SUB R0,mem|
0000abc0  2c 23 35 31 32 20 3b 20  73 68 65 69 6c 61 0d 5d  |,#512 ; sheila.]|
0000abd0  b6 15 4c 44 52 42 20 52  31 2c 5b 52 30 2c 23 26  |..LDRB R1,[R0,#&|
0000abe0  34 46 5d 0d 5d c0 12 42  49 43 20 52 31 2c 52 31  |4F].]..BIC R1,R1|
0000abf0  2c 23 26 38 30 0d 5d ca  16 84 52 20 52 31 2c 52  |,#&80.]...R R1,R|
0000ac00  31 2c 52 31 32 2c 4c 53  4c 23 37 0d 5d d4 15 53  |1,R12,LSL#7.]..S|
0000ac10  54 52 42 20 52 31 2c 5b  52 30 2c 23 26 34 46 5d  |TRB R1,[R0,#&4F]|
0000ac20  0d 5d de 15 53 54 52 42  20 52 31 2c 5b 52 30 2c  |.]..STRB R1,[R0,|
0000ac30  23 26 34 31 5d 0d 5d e8  0e 4d 4f 56 20 50 43 2c  |#&41].]..MOV PC,|
0000ac40  52 31 34 0d 5d f2 04 0d  5d fc 13 2e 49 4f 70 6f  |R14.]...]...IOpo|
0000ac50  64 75 6c 65 5f 57 72 69  74 65 0d 5e 06 0f 80 20  |dule_Write.^... |
0000ac60  52 32 2c 52 32 2c 23 26  46 0d 5e 10 1a 53 57 49  |R2,R2,#&F.^..SWI|
0000ac70  20 22 36 35 30 32 5f 57  72 69 74 65 53 68 65 69  | "6502_WriteShei|
0000ac80  6c 61 22 0d 5e 1a 0e 4d  4f 56 20 50 43 2c 52 31  |la".^..MOV PC,R1|
0000ac90  34 0d 5e 24 04 0d 5e 2e  14 2e 69 6e 74 65 72 72  |4.^$..^...interr|
0000aca0  75 70 74 5f 66 6c 61 67  73 0d 5e 38 16 4c 44 52  |upt_flags.^8.LDR|
0000acb0  42 20 52 32 2c 5b 6d 65  6d 2c 23 69 66 72 5d 0d  |B R2,[mem,#ifr].|
0000acc0  5e 42 10 42 49 43 20 52  32 2c 52 32 2c 52 30 0d  |^B.BIC R2,R2,R0.|
0000acd0  5e 4c 16 53 54 52 42 20  52 32 2c 5b 6d 65 6d 2c  |^L.STRB R2,[mem,|
0000ace0  23 69 66 72 5d 0d 5e 56  0e 4d 4f 56 20 50 43 2c  |#ifr].^V.MOV PC,|
0000acf0  52 31 34 0d 5e 60 04 0d  5e 6a 04 0d 5e 74 15 2e  |R14.^`..^j..^t..|
0000ad00  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000ad10  0d 5e 7e 16 4c 44 52 42  20 52 31 2c 5b 6d 65 6d  |.^~.LDRB R1,[mem|
0000ad20  2c 23 69 65 72 5d 0d 5e  88 0f 54 53 54 20 52 30  |,#ier].^..TST R0|
0000ad30  2c 23 26 38 30 0d 5e 92  12 42 49 43 45 51 20 52  |,#&80.^..BICEQ R|
0000ad40  31 2c 52 31 2c 52 30 0d  5e 9c 11 84 52 4e 45 20  |1,R1,R0.^...RNE |
0000ad50  52 31 2c 52 31 2c 52 30  0d 5e a6 17 84 52 20 52  |R1,R1,R0.^...R R|
0000ad60  31 2c 52 31 2c 23 26 38  30 20 3b 20 26 38 31 0d  |1,R1,#&80 ; &81.|
0000ad70  5e b0 16 53 54 52 42 20  52 31 2c 5b 6d 65 6d 2c  |^..STRB R1,[mem,|
0000ad80  23 69 65 72 5d 0d 5e ba  11 3b 54 53 54 20 74 69  |#ier].^..;TST ti|
0000ad90  6d 65 2c 23 25 31 0d 5e  c4 17 3b 53 55 42 4e 45  |me,#%1.^..;SUBNE|
0000ada0  20 74 69 6d 65 2c 74 69  6d 65 2c 23 31 0d 5e ce  | time,time,#1.^.|
0000adb0  0e 4d 4f 56 20 50 43 2c  52 31 34 0d 5e d8 04 0d  |.MOV PC,R14.^...|
0000adc0  5e e2 15 2e 69 6e 74 65  72 72 75 70 74 5f 66 6c  |^...interrupt_fl|
0000add0  61 67 73 32 0d 5e ec 17  4c 44 52 42 20 52 32 2c  |ags2.^..LDRB R2,|
0000ade0  5b 6d 65 6d 2c 23 69 66  72 32 5d 0d 5e f6 10 42  |[mem,#ifr2].^..B|
0000adf0  49 43 20 52 32 2c 52 32  2c 52 30 0d 5f 00 17 53  |IC R2,R2,R0._..S|
0000ae00  54 52 42 20 52 32 2c 5b  6d 65 6d 2c 23 69 66 72  |TRB R2,[mem,#ifr|
0000ae10  32 5d 0d 5f 0a 0e 4d 4f  56 20 50 43 2c 52 31 34  |2]._..MOV PC,R14|
0000ae20  0d 5f 14 04 0d 5f 1e 04  0d 5f 28 16 2e 69 6e 74  |._..._..._(..int|
0000ae30  65 72 72 75 70 74 5f 65  6e 61 62 6c 65 32 0d 5f  |errupt_enable2._|
0000ae40  32 17 4c 44 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |2.LDRB R1,[mem,#|
0000ae50  69 65 72 32 5d 0d 5f 3c  0f 54 53 54 20 52 30 2c  |ier2]._<.TST R0,|
0000ae60  23 26 38 30 0d 5f 46 12  42 49 43 45 51 20 52 31  |#&80._F.BICEQ R1|
0000ae70  2c 52 31 2c 52 30 0d 5f  50 11 84 52 4e 45 20 52  |,R1,R0._P..RNE R|
0000ae80  31 2c 52 31 2c 52 30 0d  5f 5a 17 84 52 20 52 31  |1,R1,R0._Z..R R1|
0000ae90  2c 52 31 2c 23 26 38 30  20 3b 20 26 38 31 0d 5f  |,R1,#&80 ; &81._|
0000aea0  64 17 53 54 52 42 20 52  31 2c 5b 6d 65 6d 2c 23  |d.STRB R1,[mem,#|
0000aeb0  69 65 72 32 5d 0d 5f 6e  0e 4d 4f 56 20 50 43 2c  |ier2]._n.MOV PC,|
0000aec0  52 31 34 0d 5f 78 04 0d  5f 82 0a 2e 66 6c 61 73  |R14._x.._...flas|
0000aed0  68 0d 5f 8c 12 3b 4c 44  52 42 20 52 31 2c 65 6c  |h._..;LDRB R1,el|
0000aee0  69 74 65 0d 5f 96 0e 3b  43 4d 50 20 52 31 2c 23  |ite._..;CMP R1,#|
0000aef0  30 0d 5f a0 12 3b 42 4e  45 20 73 6b 69 70 5f 66  |0._..;BNE skip_f|
0000af00  65 32 30 0d 5f aa 1d 54  53 54 20 46 2c 23 31 20  |e20._..TST F,#1 |
0000af10  3c 3c 20 38 20 3b 20 70  61 74 63 68 20 6f 6e 3f  |<< 8 ; patch on?|
0000af20  0d 5f b4 11 42 4e 45 20  73 6b 69 70 5f 66 65 32  |._..BNE skip_fe2|
0000af30  30 0d 5f be 18 4c 44 52  42 20 52 31 32 2c 5b 6d  |0._..LDRB R12,[m|
0000af40  65 6d 2c 23 66 65 32 30  5d 0d 5f c8 14 80 20 52  |em,#fe20]._... R|
0000af50  31 2c 52 31 32 2c 23 25  31 31 31 30 30 0d 5f d2  |1,R12,#%11100._.|
0000af60  14 80 20 52 32 2c 52 30  2c 20 23 25 31 31 31 30  |.. R2,R0, #%1110|
0000af70  30 0d 5f dc 0d 43 4d 50  20 52 31 2c 52 32 0d 5f  |0._..CMP R1,R2._|
0000af80  e6 0f 4d 4f 56 4e 45 20  52 32 2c 23 31 0d 5f f0  |..MOVNE R2,#1._.|
0000af90  1b 53 54 52 4e 45 42 20  52 32 2c 5b 6d 65 6d 2c  |.STRNEB R2,[mem,|
0000afa0  23 74 61 6d 70 65 72 5d  0d 5f fa 04 0d 60 04 17  |#tamper]._...`..|
0000afb0  80 20 52 31 2c 52 31 32  2c 23 25 31 31 31 30 30  |. R1,R12,#%11100|
0000afc0  30 30 30 0d 60 0e 17 80  20 52 32 2c 52 30 2c 20  |000.`... R2,R0, |
0000afd0  23 25 31 31 31 30 30 30  30 30 0d 60 18 0d 43 4d  |#%11100000.`..CM|
0000afe0  50 20 52 31 2c 52 32 0d  60 22 0f 4d 4f 56 4e 45  |P R1,R2.`".MOVNE|
0000aff0  20 52 32 2c 23 31 0d 60  2c 22 53 54 52 4e 45 42  | R2,#1.`,"STRNEB|
0000b000  20 52 32 2c 5b 6d 65 6d  2c 23 63 75 72 73 6f 72  | R2,[mem,#cursor|
0000b010  5f 74 61 6d 70 65 72 5d  0d 60 36 04 0d 60 40 0e  |_tamper].`6..`@.|
0000b020  2e 73 6b 69 70 5f 66 65  32 30 0d 60 4a 18 4c 44  |.skip_fe20.`J.LD|
0000b030  52 42 20 52 31 32 2c 5b  6d 65 6d 2c 23 66 65 32  |RB R12,[mem,#fe2|
0000b040  30 5d 0d 60 54 17 53 54  52 42 20 52 30 2c 5b 6d  |0].`T.STRB R0,[m|
0000b050  65 6d 2c 23 66 65 32 30  5d 0d 60 5e 0e 54 53 54  |em,#fe20].`^.TST|
0000b060  20 52 30 2c 23 25 31 0d  60 68 0c ec 51 20 52 30  | R0,#%1.`h..Q R0|
0000b070  2c 23 39 0d 60 72 10 4d  4f 56 4e 45 20 52 30 2c  |,#9.`r.MOVNE R0,|
0000b080  23 31 30 0d 60 7c 0d 4d  4f 56 20 52 31 2c 23 30  |#10.`|.MOV R1,#0|
0000b090  0d 60 86 11 53 57 49 20  22 4f 53 5f 42 79 74 65  |.`..SWI "OS_Byte|
0000b0a0  22 0d 60 90 2d 42 20 70  6f 6b 65 5f 75 70 64 61  |".`.-B poke_upda|
0000b0b0  74 65 70 69 78 65 6c 56  20 3b 20 69 6e 63 6c 75  |tepixelV ; inclu|
0000b0c0  64 65 73 20 4d 4f 56 20  50 43 2c 52 31 34 0d 60  |des MOV PC,R14.`|
0000b0d0  9a 0f 3b 4d 4f 56 20 50  43 2c 52 31 34 0d 60 a4  |..;MOV PC,R14.`.|
0000b0e0  04 0d 60 ae 0a 3b 2e 66  65 32 30 0d 60 b8 0b 3b  |..`..;.fe20.`..;|
0000b0f0  45 51 55 44 20 30 0d 60  c2 04 0d 60 cc 0e 3b 2e  |EQUD 0.`...`..;.|
0000b100  63 72 74 5f 72 65 67 73  0d 60 d6 0b 3b 45 51 55  |crt_regs.`..;EQU|
0000b110  44 20 30 0d 60 e0 0b 3b  45 51 55 44 20 30 0d 60  |D 0.`..;EQUD 0.`|
0000b120  ea 0b 3b 45 51 55 44 20  30 0d 60 f4 0b 3b 45 51  |..;EQUD 0.`..;EQ|
0000b130  55 44 20 30 0d 60 fe 0b  3b 45 51 55 44 20 30 0d  |UD 0.`..;EQUD 0.|
0000b140  61 08 04 0d 61 12 40 3b  20 69 6e 63 6c 75 64 65  |a...a.@; include|
0000b150  20 74 68 65 20 73 6f 75  6e 64 20 63 6f 64 65 20  | the sound code |
0000b160  68 65 72 65 20 63 6f 6e  74 61 69 6e 65 64 20 69  |here contained i|
0000b170  6e 20 74 68 65 20 53 6f  75 6e 64 20 6c 69 62 72  |n the Sound libr|
0000b180  61 72 79 0d 61 1c 10 a4  73 6f 75 6e 64 5f 6c 61  |ary.a...sound_la|
0000b190  74 63 68 0d 61 26 04 0d  61 30 04 0d 61 3a 0b a4  |tch.a&..a0..a:..|
0000b1a0  73 63 72 65 65 6e 0d 61  44 04 0d 61 4e 05 5d 0d  |screen.aD..aN.].|
0000b1b0  61 58 28 e7 20 48 57 53  63 72 6f 6c 6c 20 8c 20  |aX(. HWScroll . |
0000b1c0  5b 4f 50 54 70 3a a4 68  61 72 64 77 61 72 65 73  |[OPTp:.hardwares|
0000b1d0  63 72 6f 6c 6c 3a 5d 0d  61 62 09 5b 4f 50 54 70  |croll:].ab.[OPTp|
0000b1e0  0d 61 6c 04 0d 61 76 04  0d 61 80 0b 2e 46 46 70  |.al..av..a...FFp|
0000b1f0  61 67 65 0d 61 8a 15 3b  53 55 42 20 74 69 6d 65  |age.a..;SUB time|
0000b200  2c 74 69 6d 65 2c 23 31  0d 61 94 0e 4d 4f 56 20  |,time,#1.a..MOV |
0000b210  50 43 2c 52 31 34 0d 61  9e 04 0d 61 a8 0f 2e 75  |PC,R14.a...a...u|
0000b220  70 64 61 74 65 5f 70 61  6c 0d 61 b2 1a 4c 44 52  |pdate_pal.a..LDR|
0000b230  42 20 52 31 2c 5b 6d 65  6d 2c 23 50 61 6c 65 74  |B R1,[mem,#Palet|
0000b240  74 65 5d 0d 61 bc 0d 43  4d 50 20 52 31 2c 23 30  |te].a..CMP R1,#0|
0000b250  0d 61 c6 10 4d 4f 56 4e  45 20 50 43 2c 52 31 34  |.a..MOVNE PC,R14|
0000b260  0d 61 d0 15 2e 66 6f 72  63 65 5f 75 70 64 61 74  |.a...force_updat|
0000b270  65 5f 70 61 6c 0d 61 da  1c 53 54 52 20 52 31 34  |e_pal.a..STR R14|
0000b280  2c 5b 6d 65 6d 2c 23 50  61 6c 65 74 74 65 2b 34  |,[mem,#Palette+4|
0000b290  5d 0d 61 e4 1a 53 55 42  20 52 31 33 2c 6d 65 6d  |].a..SUB R13,mem|
0000b2a0  2c 23 2d 70 61 6c 5f 72  65 67 73 0d 61 ee 14 4c  |,#-pal_regs.a..L|
0000b2b0  44 52 42 20 52 30 2c 5b  52 31 33 2c 23 30 5d 0d  |DRB R0,[R13,#0].|
0000b2c0  61 f8 0d 42 4c 20 64 6f  5f 70 61 6c 0d 62 02 14  |a..BL do_pal.b..|
0000b2d0  4c 44 52 42 20 52 30 2c  5b 52 31 33 2c 23 31 5d  |LDRB R0,[R13,#1]|
0000b2e0  0d 62 0c 0d 42 4c 20 64  6f 5f 70 61 6c 0d 62 16  |.b..BL do_pal.b.|
0000b2f0  14 4c 44 52 42 20 52 30  2c 5b 52 31 33 2c 23 32  |.LDRB R0,[R13,#2|
0000b300  5d 0d 62 20 0d 42 4c 20  64 6f 5f 70 61 6c 0d 62  |].b .BL do_pal.b|
0000b310  2a 14 4c 44 52 42 20 52  30 2c 5b 52 31 33 2c 23  |*.LDRB R0,[R13,#|
0000b320  33 5d 0d 62 34 0d 42 4c  20 64 6f 5f 70 61 6c 0d  |3].b4.BL do_pal.|
0000b330  62 3e 14 4c 44 52 42 20  52 30 2c 5b 52 31 33 2c  |b>.LDRB R0,[R13,|
0000b340  23 34 5d 0d 62 48 0d 42  4c 20 64 6f 5f 70 61 6c  |#4].bH.BL do_pal|
0000b350  0d 62 52 14 4c 44 52 42  20 52 30 2c 5b 52 31 33  |.bR.LDRB R0,[R13|
0000b360  2c 23 35 5d 0d 62 5c 0d  42 4c 20 64 6f 5f 70 61  |,#5].b\.BL do_pa|
0000b370  6c 0d 62 66 14 4c 44 52  42 20 52 30 2c 5b 52 31  |l.bf.LDRB R0,[R1|
0000b380  33 2c 23 36 5d 0d 62 70  0d 42 4c 20 64 6f 5f 70  |3,#6].bp.BL do_p|
0000b390  61 6c 0d 62 7a 14 4c 44  52 42 20 52 30 2c 5b 52  |al.bz.LDRB R0,[R|
0000b3a0  31 33 2c 23 37 5d 0d 62  84 0d 42 4c 20 64 6f 5f  |13,#7].b..BL do_|
0000b3b0  70 61 6c 0d 62 8e 14 4c  44 52 42 20 52 30 2c 5b  |pal.b..LDRB R0,[|
0000b3c0  52 31 33 2c 23 38 5d 0d  62 98 0d 42 4c 20 64 6f  |R13,#8].b..BL do|
0000b3d0  5f 70 61 6c 0d 62 a2 14  4c 44 52 42 20 52 30 2c  |_pal.b..LDRB R0,|
0000b3e0  5b 52 31 33 2c 23 39 5d  0d 62 ac 0d 42 4c 20 64  |[R13,#9].b..BL d|
0000b3f0  6f 5f 70 61 6c 0d 62 b6  15 4c 44 52 42 20 52 30  |o_pal.b..LDRB R0|
0000b400  2c 5b 52 31 33 2c 23 31  30 5d 0d 62 c0 0d 42 4c  |,[R13,#10].b..BL|
0000b410  20 64 6f 5f 70 61 6c 0d  62 ca 15 4c 44 52 42 20  | do_pal.b..LDRB |
0000b420  52 30 2c 5b 52 31 33 2c  23 31 31 5d 0d 62 d4 0d  |R0,[R13,#11].b..|
0000b430  42 4c 20 64 6f 5f 70 61  6c 0d 62 de 15 4c 44 52  |BL do_pal.b..LDR|
0000b440  42 20 52 30 2c 5b 52 31  33 2c 23 31 32 5d 0d 62  |B R0,[R13,#12].b|
0000b450  e8 0d 42 4c 20 64 6f 5f  70 61 6c 0d 62 f2 15 4c  |..BL do_pal.b..L|
0000b460  44 52 42 20 52 30 2c 5b  52 31 33 2c 23 31 33 5d  |DRB R0,[R13,#13]|
0000b470  0d 62 fc 0d 42 4c 20 64  6f 5f 70 61 6c 0d 63 06  |.b..BL do_pal.c.|
0000b480  15 4c 44 52 42 20 52 30  2c 5b 52 31 33 2c 23 31  |.LDRB R0,[R13,#1|
0000b490  34 5d 0d 63 10 0d 42 4c  20 64 6f 5f 70 61 6c 0d  |4].c..BL do_pal.|
0000b4a0  63 1a 15 4c 44 52 42 20  52 30 2c 5b 52 31 33 2c  |c..LDRB R0,[R13,|
0000b4b0  23 31 35 5d 0d 63 24 0d  42 4c 20 64 6f 5f 70 61  |#15].c$.BL do_pa|
0000b4c0  6c 0d 63 2e 29 4d 4f 56  20 52 31 34 2c 23 30 3a  |l.c.)MOV R14,#0:|
0000b4d0  53 54 52 42 20 52 31 34  2c 5b 6d 65 6d 2c 23 70  |STRB R14,[mem,#p|
0000b4e0  61 6c 5f 74 61 6d 70 65  72 5d 0d 63 38 1b 4c 44  |al_tamper].c8.LD|
0000b4f0  52 20 50 43 2c 5b 6d 65  6d 2c 23 50 61 6c 65 74  |R PC,[mem,#Palet|
0000b500  74 65 2b 34 5d 0d 63 42  04 0d 63 4c 04 0d 63 56  |te+4].cB..cL..cV|
0000b510  0c 2e 70 61 6c 65 74 74  65 0d 63 60 1a 53 55 42  |..palette.c`.SUB|
0000b520  20 52 31 32 2c 6d 65 6d  2c 23 2d 70 61 6c 5f 72  | R12,mem,#-pal_r|
0000b530  65 67 73 0d 63 6a 1a 53  54 52 42 20 52 30 2c 5b  |egs.cj.STRB R0,[|
0000b540  52 31 32 2c 52 30 2c 4c  53 52 23 34 5d 0d 63 74  |R12,R0,LSR#4].ct|
0000b550  04 0d 63 7e 1a 4c 44 52  42 20 52 31 2c 5b 6d 65  |..c~.LDRB R1,[me|
0000b560  6d 2c 23 50 61 6c 65 74  74 65 5d 0d 63 88 0d 43  |m,#Palette].c..C|
0000b570  4d 50 20 52 31 2c 23 30  0d 63 92 10 4d 4f 56 4e  |MP R1,#0.c..MOVN|
0000b580  45 20 50 43 2c 52 31 34  0d 63 9c 04 0d 63 a6 29  |E PC,R14.c...c.)|
0000b590  4d 4f 56 20 52 31 2c 23  32 35 35 3a 53 54 52 42  |MOV R1,#255:STRB|
0000b5a0  20 52 31 2c 5b 6d 65 6d  2c 23 70 61 6c 5f 74 61  | R1,[mem,#pal_ta|
0000b5b0  6d 70 65 72 5d 0d 63 b0  0e 4d 4f 56 20 50 43 2c  |mper].c..MOV PC,|
0000b5c0  52 31 34 0d 63 ba 04 0d  63 c4 0b 2e 64 6f 5f 70  |R14.c...c...do_p|
0000b5d0  61 6c 0d 63 ce 17 4c 44  52 42 20 52 31 2c 5b 6d  |al.c..LDRB R1,[m|
0000b5e0  65 6d 2c 23 66 65 32 30  5d 0d 63 d8 0f 54 53 54  |em,#fe20].c..TST|
0000b5f0  20 52 31 2c 23 25 31 30  0d 63 e2 19 4d 4f 56 4e  | R1,#%10.c..MOVN|
0000b600  45 20 50 43 2c 52 31 34  20 3b 20 6d 6f 64 65 20  |E PC,R14 ; mode |
0000b610  37 0d 63 ec 13 80 20 52  31 2c 52 31 2c 23 25 31  |7.c... R1,R1,#%1|
0000b620  31 31 30 30 0d 63 f6 22  43 4d 50 20 52 31 2c 23  |1100.c."CMP R1,#|
0000b630  25 31 31 31 30 30 20 3a  20 42 45 51 20 74 77 6f  |%11100 : BEQ two|
0000b640  63 6f 6c 70 61 6c 0d 64  00 22 43 4d 50 20 52 31  |colpal.d."CMP R1|
0000b650  2c 23 25 30 31 30 30 30  20 3a 20 42 45 51 20 74  |,#%01000 : BEQ t|
0000b660  77 6f 63 6f 6c 70 61 6c  0d 64 0a 23 43 4d 50 20  |wocolpal.d.#CMP |
0000b670  52 31 2c 23 25 31 31 30  30 30 20 3a 20 42 45 51  |R1,#%11000 : BEQ|
0000b680  20 66 6f 75 72 63 6f 6c  70 61 6c 0d 64 14 23 43  | fourcolpal.d.#C|
0000b690  4d 50 20 52 31 2c 23 25  30 30 31 30 30 20 3a 20  |MP R1,#%00100 : |
0000b6a0  42 45 51 20 66 6f 75 72  63 6f 6c 70 61 6c 0d 64  |BEQ fourcolpal.d|
0000b6b0  1e 04 0d 64 28 04 0d 64  32 12 2e 73 69 78 74 65  |...d(..d2..sixte|
0000b6c0  65 6e 63 6f 6c 70 61 6c  0d 64 3c 0f 80 20 52 31  |encolpal.d<.. R1|
0000b6d0  2c 52 30 2c 23 26 46 0d  64 46 13 4d 4f 56 20 52  |,R0,#&F.dF.MOV R|
0000b6e0  30 2c 52 30 2c 4c 53 52  23 34 0d 64 50 0e 82 20  |0,R0,LSR#4.dP.. |
0000b6f0  52 31 2c 52 31 2c 23 37  0d 64 5a 04 0d 64 64 1a  |R1,R1,#7.dZ..dd.|
0000b700  3b 43 4d 50 20 52 30 2c  23 30 20 3b 20 66 6f 72  |;CMP R0,#0 ; for|
0000b710  20 45 78 69 6c 65 0d 64  6e 12 3b 53 57 49 4e 45  | Exile.dn.;SWINE|
0000b720  20 45 54 43 20 45 54 43  0d 64 78 04 0d 64 82 0f  | ETC ETC.dx..d..|
0000b730  53 57 49 20 26 31 30 30  2b 31 39 0d 64 8c 13 53  |SWI &100+19.d..S|
0000b740  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 64  |WI "OS_WriteC".d|
0000b750  96 0d 4d 4f 56 20 52 30  2c 52 31 0d 64 a0 13 53  |..MOV R0,R1.d..S|
0000b760  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 64  |WI "OS_WriteC".d|
0000b770  aa 0c 53 57 49 20 26 31  30 30 0d 64 b4 0c 53 57  |..SWI &100.d..SW|
0000b780  49 20 26 31 30 30 0d 64  be 0c 53 57 49 20 26 31  |I &100.d..SWI &1|
0000b790  30 30 0d 64 c8 0e 4d 4f  56 20 50 43 2c 52 31 34  |00.d..MOV PC,R14|
0000b7a0  0d 64 d2 04 0d 64 dc 0e  2e 74 77 6f 63 6f 6c 70  |.d...d...twocolp|
0000b7b0  61 6c 0d 64 e6 0f 80 20  52 31 2c 52 30 2c 23 26  |al.d... R1,R0,#&|
0000b7c0  46 0d 64 f0 13 4d 4f 56  20 52 30 2c 52 30 2c 4c  |F.d..MOV R0,R0,L|
0000b7d0  53 52 23 37 0d 64 fa 0e  82 20 52 31 2c 52 31 2c  |SR#7.d... R1,R1,|
0000b7e0  23 37 0d 65 04 0d 43 4d  50 20 52 30 2c 23 31 0d  |#7.e..CMP R0,#1.|
0000b7f0  65 0e 19 ec 51 20 52 30  2c 23 33 20 3b 20 6d 6f  |e...Q R0,#3 ; mo|
0000b800  64 65 20 34 20 66 69 78  0d 65 18 0f 53 57 49 20  |de 4 fix.e..SWI |
0000b810  26 31 30 30 2b 31 39 0d  65 22 13 53 57 49 20 22  |&100+19.e".SWI "|
0000b820  4f 53 5f 57 72 69 74 65  43 22 0d 65 2c 0d 4d 4f  |OS_WriteC".e,.MO|
0000b830  56 20 52 30 2c 52 31 0d  65 36 13 53 57 49 20 22  |V R0,R1.e6.SWI "|
0000b840  4f 53 5f 57 72 69 74 65  43 22 0d 65 40 0c 53 57  |OS_WriteC".e@.SW|
0000b850  49 20 26 31 30 30 0d 65  4a 0c 53 57 49 20 26 31  |I &100.eJ.SWI &1|
0000b860  30 30 0d 65 54 0c 53 57  49 20 26 31 30 30 0d 65  |00.eT.SWI &100.e|
0000b870  5e 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 65 68 04  |^.MOV PC,R14.eh.|
0000b880  0d 65 72 0f 2e 66 6f 75  72 63 6f 6c 70 61 6c 0d  |.er..fourcolpal.|
0000b890  65 7c 0f 80 20 52 31 2c  52 30 2c 23 26 46 0d 65  |e|.. R1,R0,#&F.e|
0000b8a0  86 18 80 20 52 30 2c 52  30 2c 20 20 23 25 31 30  |... R0,R0,  #%10|
0000b8b0  31 30 30 30 30 30 0d 65  90 1a 54 53 54 20 52 30  |100000.e..TST R0|
0000b8c0  2c 20 20 20 20 20 23 25  31 30 30 30 30 30 30 30  |,     #%10000000|
0000b8d0  0d 65 9a 19 84 52 4e 45  20 52 30 2c 52 30 2c 23  |.e...RNE R0,R0,#|
0000b8e0  25 30 31 30 30 30 30 30  30 0d 65 a4 1a 42 49 43  |%01000000.e..BIC|
0000b8f0  4e 45 20 52 30 2c 52 30  2c 23 25 31 30 30 30 30  |NE R0,R0,#%10000|
0000b900  30 30 30 0d 65 ae 13 4d  4f 56 20 52 30 2c 52 30  |000.e..MOV R0,R0|
0000b910  2c 4c 53 52 23 35 0d 65  b8 0e 82 20 52 31 2c 52  |,LSR#5.e... R1,R|
0000b920  31 2c 23 37 0d 65 c2 0f  53 57 49 20 26 31 30 30  |1,#7.e..SWI &100|
0000b930  2b 31 39 0d 65 cc 13 53  57 49 20 22 4f 53 5f 57  |+19.e..SWI "OS_W|
0000b940  72 69 74 65 43 22 0d 65  d6 0d 4d 4f 56 20 52 30  |riteC".e..MOV R0|
0000b950  2c 52 31 0d 65 e0 13 53  57 49 20 22 4f 53 5f 57  |,R1.e..SWI "OS_W|
0000b960  72 69 74 65 43 22 0d 65  ea 0c 53 57 49 20 26 31  |riteC".e..SWI &1|
0000b970  30 30 0d 65 f4 0c 53 57  49 20 26 31 30 30 0d 65  |00.e..SWI &100.e|
0000b980  fe 0c 53 57 49 20 26 31  30 30 0d 66 08 0e 4d 4f  |..SWI &100.f..MO|
0000b990  56 20 50 43 2c 52 31 34  0d 66 12 04 0d 66 1c 0b  |V PC,R14.f...f..|
0000b9a0  2e 6f 73 62 70 75 74 0d  66 26 13 4d 4f 56 20 52  |.osbput.f&.MOV R|
0000b9b0  30 2c 41 2c 4c 53 52 23  32 34 0d 66 30 13 4d 4f  |0,A,LSR#24.f0.MO|
0000b9c0  56 20 52 31 2c 59 2c 4c  53 52 23 32 34 0d 66 3a  |V R1,Y,LSR#24.f:|
0000b9d0  12 53 57 49 20 22 58 4f  53 5f 42 50 75 74 22 0d  |.SWI "XOS_BPut".|
0000b9e0  66 44 11 42 56 53 20 73  77 69 5f 65 72 72 6f 72  |fD.BVS swi_error|
0000b9f0  0d 66 4e 17 42 20 6f 70  63 6f 64 65 28 26 36 30  |.fN.B opcode(&60|
0000ba00  29 20 3b 20 72 74 73 0d  66 58 04 0d 66 62 0b 2e  |) ; rts.fX..fb..|
0000ba10  6f 73 62 67 65 74 0d 66  6c 13 4d 4f 56 20 52 30  |osbget.fl.MOV R0|
0000ba20  2c 41 2c 4c 53 52 23 32  34 0d 66 76 13 4d 4f 56  |,A,LSR#24.fv.MOV|
0000ba30  20 52 31 2c 59 2c 4c 53  52 23 32 34 0d 66 80 12  | R1,Y,LSR#24.f..|
0000ba40  53 57 49 20 22 58 4f 53  5f 42 47 65 74 22 0d 66  |SWI "XOS_BGet".f|
0000ba50  8a 11 42 56 53 20 73 77  69 5f 65 72 72 6f 72 0d  |..BVS swi_error.|
0000ba60  66 94 13 4d 4f 56 20 41  2c 52 30 2c 4c 53 4c 23  |f..MOV A,R0,LSL#|
0000ba70  32 34 0d 66 9e 0b a4 73  65 74 75 70 43 0d 66 a8  |24.f...setupC.f.|
0000ba80  17 42 20 6f 70 63 6f 64  65 28 26 36 30 29 20 3b  |.B opcode(&60) ;|
0000ba90  20 72 74 73 0d 66 b2 04  0d 66 bc 0e 2e 73 77 69  | rts.f...f...swi|
0000baa0  5f 65 72 72 6f 72 0d 66  c6 15 41 44 44 20 6d 65  |_error.f..ADD me|
0000bab0  6d 2c 6d 65 6d 2c 23 26  31 30 30 0d 66 d0 15 41  |m,mem,#&100.f..A|
0000bac0  44 44 20 6d 65 6d 2c 6d  65 6d 2c 23 26 30 30 32  |DD mem,mem,#&002|
0000bad0  0d 66 da 13 4d 4f 56 20  52 31 2c 23 30 20 3b 20  |.f..MOV R1,#0 ; |
0000bae0  42 52 4b 0d 66 e4 15 53  54 52 42 20 52 31 2c 5b  |BRK.f..STRB R1,[|
0000baf0  6d 65 6d 2c 23 2d 32 5d  0d 66 ee 1b 4c 44 52 42  |mem,#-2].f..LDRB|
0000bb00  20 52 31 2c 5b 52 30 5d  20 3b 20 65 72 72 6f 72  | R1,[R0] ; error|
0000bb10  20 6e 6f 0d 66 f8 15 53  54 52 42 20 52 31 2c 5b  | no.f..STRB R1,[|
0000bb20  6d 65 6d 2c 23 2d 31 5d  0d 67 02 10 41 44 44 20  |mem,#-1].g..ADD |
0000bb30  52 30 2c 52 30 2c 23 34  0d 67 0c 0e 4d 4f 56 20  |R0,R0,#4.g..MOV |
0000bb40  52 31 34 2c 23 30 0d 67  16 04 0d 67 20 11 2e 73  |R14,#0.g...g ..s|
0000bb50  77 69 5f 65 72 72 5f 6c  6f 6f 70 0d 67 2a 15 4c  |wi_err_loop.g*.L|
0000bb60  44 52 42 20 52 31 33 2c  5b 52 30 2c 52 31 34 5d  |DRB R13,[R0,R14]|
0000bb70  0d 67 34 0e 43 4d 50 20  52 31 33 2c 23 30 0d 67  |.g4.CMP R13,#0.g|
0000bb80  3e 12 3b 4d 4f 56 20 52  31 33 2c 23 97 22 41 22  |>.;MOV R13,#."A"|
0000bb90  0d 67 48 16 53 54 52 42  20 52 31 33 2c 5b 6d 65  |.gH.STRB R13,[me|
0000bba0  6d 2c 52 31 34 5d 0d 67  52 12 41 44 44 20 52 31  |m,R14].gR.ADD R1|
0000bbb0  34 2c 52 31 34 2c 23 31  0d 67 5c 0f ec 51 20 52  |4,R14,#1.g\..Q R|
0000bbc0  31 34 2c 23 32 35 35 0d  67 66 10 43 4d 50 20 52  |14,#255.gf.CMP R|
0000bbd0  31 34 2c 23 32 35 33 0d  67 70 14 42 4c 45 20 73  |14,#253.gp.BLE s|
0000bbe0  77 69 5f 65 72 72 5f 6c  6f 6f 70 0d 67 7a 04 0d  |wi_err_loop.gz..|
0000bbf0  67 84 17 4d 4f 56 20 7a  70 63 2c 23 26 31 30 30  |g..MOV zpc,#&100|
0000bc00  20 3c 3c 20 31 36 0d 67  8e 15 53 55 42 20 6d 65  | << 16.g..SUB me|
0000bc10  6d 2c 6d 65 6d 2c 23 26  31 30 30 0d 67 98 15 53  |m,mem,#&100.g..S|
0000bc20  55 42 20 6d 65 6d 2c 6d  65 6d 2c 23 26 30 30 32  |UB mem,mem,#&002|
0000bc30  0d 67 a2 0b a4 66 65 74  63 68 32 0d 67 ac 04 0d  |.g...fetch2.g...|
0000bc40  67 b6 12 2e 72 65 74 75  72 6e 5f 52 4f 4d 53 45  |g...return_ROMSE|
0000bc50  4c 0d 67 c0 16 4c 44 52  42 20 52 30 2c 5b 6d 65  |L.g..LDRB R0,[me|
0000bc60  6d 2c 23 72 6f 6d 5d 0d  67 ca 0e 4d 4f 56 20 50  |m,#rom].g..MOV P|
0000bc70  43 2c 52 31 34 0d 67 d4  04 0d 67 de 12 2e 72 65  |C,R14.g...g...re|
0000bc80  74 75 72 6e 5f 41 43 43  43 4f 4e 0d 67 e8 19 4c  |turn_ACCCON.g..L|
0000bc90  44 52 42 20 52 30 2c 5b  6d 65 6d 2c 23 41 43 43  |DRB R0,[mem,#ACC|
0000bca0  43 4f 4e 5d 0d 67 f2 0e  4d 4f 56 20 50 43 2c 52  |CON].g..MOV PC,R|
0000bcb0  31 34 0d 67 fc 04 0d 68  06 04 0d 68 10 04 0d 68  |14.g...h...h...h|
0000bcc0  1a 11 2e 73 74 72 62 5f  72 6f 6d 5f 72 65 74 0d  |...strb_rom_ret.|
0000bcd0  68 24 04 0d 68 2e 0b 2e  73 68 65 69 6c 61 0d 68  |h$..h...sheila.h|
0000bce0  38 15 53 55 42 53 20 52  32 2c 52 31 2c 23 26 46  |8.SUBS R2,R1,#&F|
0000bcf0  45 30 30 0d 68 42 10 4d  4f 56 4c 54 20 50 43 2c  |E00.hB.MOVLT PC,|
0000bd00  52 31 34 0d 68 4c 14 53  55 42 53 20 52 32 2c 52  |R14.hL.SUBS R2,R|
0000bd10  32 2c 23 26 31 30 30 0d  68 56 10 4d 4f 56 47 45  |2,#&100.hV.MOVGE|
0000bd20  20 50 43 2c 52 31 34 0d  68 60 0f 3b 42 47 45 20  | PC,R14.h`.;BGE |
0000bd30  46 46 70 61 67 65 0d 68  6a 04 0d 68 74 10 54 53  |FFpage.hj..ht.TS|
0000bd40  54 20 74 69 6d 65 2c 23  25 31 0d 68 7e 16 53 55  |T time,#%1.h~.SU|
0000bd50  42 4e 45 20 74 69 6d 65  2c 74 69 6d 65 2c 23 31  |BNE time,time,#1|
0000bd60  0d 68 88 16 53 55 42 45  51 20 74 69 6d 65 2c 74  |.h..SUBEQ time,t|
0000bd70  69 6d 65 2c 23 32 0d 68  92 04 0d 68 9c 15 3b 53  |ime,#2.h...h..;S|
0000bd80  54 52 42 20 52 30 2c 5b  6d 65 6d 2c 52 31 5d 0d  |TRB R0,[mem,R1].|
0000bd90  68 a6 26 53 55 42 20 52  32 2c 6d 65 6d 2c 23 26  |h.&SUB R2,mem,#&|
0000bda0  31 30 30 30 30 3a 53 54  52 42 20 52 30 2c 5b 52  |10000:STRB R0,[R|
0000bdb0  32 2c 52 31 5d 0d 68 b0  04 0d 68 ba 10 80 20 52  |2,R1].h...h... R|
0000bdc0  32 2c 52 31 2c 23 26 46  46 0d 68 c4 1b 3b 41 44  |2,R1,#&FF.h..;AD|
0000bdd0  52 20 52 31 2c 73 68 65  69 6c 61 5f 77 72 69 74  |R R1,sheila_writ|
0000bde0  65 74 61 62 0d 68 ce 18  4c 44 52 20 50 43 2c 5b  |etab.h..LDR PC,[|
0000bdf0  50 43 2c 52 32 2c 4c 53  4c 23 32 5d 0d 68 d8 21  |PC,R2,LSL#2].h.!|
0000be00  45 51 55 44 20 30 20 3b  20 70 61 64 64 69 6e 67  |EQUD 0 ; padding|
0000be10  20 66 6f 72 20 70 69 70  65 6c 69 6e 65 0d 68 e2  | for pipeline.h.|
0000be20  14 2e 73 68 65 69 6c 61  5f 77 72 69 74 65 74 61  |..sheila_writeta|
0000be30  62 0d 68 ec 09 3b 20 30  2d 46 0d 68 f6 0e 45 51  |b.h..; 0-F.h..EQ|
0000be40  55 44 20 64 75 6d 6d 79  0d 69 00 0c 45 51 55 44  |UD dummy.i..EQUD|
0000be50  20 63 72 74 0d 69 0a 0e  45 51 55 44 20 64 75 6d  | crt.i..EQUD dum|
0000be60  6d 79 0d 69 14 0c 45 51  55 44 20 63 72 74 0d 69  |my.i..EQUD crt.i|
0000be70  1e 0e 45 51 55 44 20 64  75 6d 6d 79 0d 69 28 0c  |..EQUD dummy.i(.|
0000be80  45 51 55 44 20 63 72 74  0d 69 32 0e 45 51 55 44  |EQUD crt.i2.EQUD|
0000be90  20 64 75 6d 6d 79 0d 69  3c 0c 45 51 55 44 20 63  | dummy.i<.EQUD c|
0000bea0  72 74 0d 69 46 12 45 51  55 44 20 77 72 69 74 65  |rt.iF.EQUD write|
0000beb0  46 45 30 38 0d 69 50 12  45 51 55 44 20 77 72 69  |FE08.iP.EQUD wri|
0000bec0  74 65 46 45 30 39 0d 69  5a 12 a4 65 71 75 64 28  |teFE09.iZ..equd(|
0000bed0  36 2c 64 75 6d 6d 79 29  0d 69 64 0b 3b 20 31 30  |6,dummy).id.; 10|
0000bee0  2d 31 37 0d 69 6e 12 45  51 55 44 20 77 72 69 74  |-17.in.EQUD writ|
0000bef0  65 46 45 31 30 0d 69 78  12 a4 65 71 75 64 28 37  |eFE10.ix..equd(7|
0000bf00  2c 64 75 6d 6d 79 29 0d  69 82 0b 3b 20 31 38 2d  |,dummy).i..; 18-|
0000bf10  31 46 0d 69 8c 19 45 51  55 44 20 77 72 69 74 65  |1F.i..EQUD write|
0000bf20  5f 41 44 43 5f 73 74 61  74 75 73 0d 69 96 12 a4  |_ADC_status.i...|
0000bf30  65 71 75 64 28 37 2c 64  75 6d 6d 79 29 0d 69 a0  |equd(7,dummy).i.|
0000bf40  0b 3b 20 32 30 2d 32 46  0d 69 aa 0e 45 51 55 44  |.; 20-2F.i..EQUD|
0000bf50  20 66 6c 61 73 68 0d 69  b4 10 45 51 55 44 20 70  | flash.i..EQUD p|
0000bf60  61 6c 65 74 74 65 0d 69  be 13 a4 65 71 75 64 28  |alette.i...equd(|
0000bf70  31 34 2c 64 75 6d 6d 79  29 0d 69 c8 0b 3b 20 33  |14,dummy).i..; 3|
0000bf80  30 2d 33 46 0d 69 d2 13  a4 65 71 75 64 28 34 2c  |0-3F.i...equd(4,|
0000bf90  72 6f 6d 73 65 6c 29 0d  69 dc 0f 45 51 55 44 20  |romsel).i..EQUD |
0000bfa0  61 63 63 63 6f 6e 0d 69  e6 14 a4 65 71 75 64 28  |acccon.i...equd(|
0000bfb0  31 31 2c 72 6f 6d 73 65  6c 29 0d 69 f0 0b 3b 20  |11,romsel).i..; |
0000bfc0  34 30 2d 34 46 0d 69 fa  0e 45 51 55 44 20 6c 61  |40-4F.i..EQUD la|
0000bfd0  74 63 68 0d 6a 04 10 45  51 55 44 20 72 65 67 42  |tch.j..EQUD regB|
0000bfe0  5f 34 31 0d 6a 0e 0e 45  51 55 44 20 64 75 6d 6d  |_41.j..EQUD dumm|
0000bff0  79 0d 6a 18 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |y.j..EQUD dummy.|
0000c000  6a 22 19 45 51 55 44 20  77 72 69 74 65 54 31 6c  |j".EQUD writeT1l|
0000c010  6f 77 5f 6c 61 74 63 68  0d 6a 2c 1a 45 51 55 44  |ow_latch.j,.EQUD|
0000c020  20 77 72 69 74 65 54 31  68 69 67 68 5f 63 6f 75  | writeT1high_cou|
0000c030  6e 74 0d 6a 36 19 45 51  55 44 20 77 72 69 74 65  |nt.j6.EQUD write|
0000c040  54 31 6c 6f 77 5f 6c 61  74 63 68 0d 6a 40 1a 45  |T1low_latch.j@.E|
0000c050  51 55 44 20 77 72 69 74  65 54 31 68 69 67 68 5f  |QUD writeT1high_|
0000c060  6c 61 74 63 68 0d 6a 4a  19 45 51 55 44 20 77 72  |latch.jJ.EQUD wr|
0000c070  69 74 65 54 32 6c 6f 77  5f 6c 61 74 63 68 0d 6a  |iteT2low_latch.j|
0000c080  54 1a 45 51 55 44 20 77  72 69 74 65 54 32 68 69  |T.EQUD writeT2hi|
0000c090  67 68 5f 63 6f 75 6e 74  0d 6a 5e 0e 45 51 55 44  |gh_count.j^.EQUD|
0000c0a0  20 64 75 6d 6d 79 0d 6a  68 0e 45 51 55 44 20 64  | dummy.jh.EQUD d|
0000c0b0  75 6d 6d 79 0d 6a 72 0e  45 51 55 44 20 64 75 6d  |ummy.jr.EQUD dum|
0000c0c0  6d 79 0d 6a 7c 18 45 51  55 44 20 69 6e 74 65 72  |my.j|.EQUD inter|
0000c0d0  72 75 70 74 5f 66 6c 61  67 73 0d 6a 86 19 45 51  |rupt_flags.j..EQ|
0000c0e0  55 44 20 69 6e 74 65 72  72 75 70 74 5f 65 6e 61  |UD interrupt_ena|
0000c0f0  62 6c 65 0d 6a 90 10 45  51 55 44 20 72 65 67 42  |ble.j..EQUD regB|
0000c100  5f 34 46 0d 6a 9a 0b 3b  20 35 30 2d 35 46 0d 6a  |_4F.j..; 50-5F.j|
0000c110  a4 0e 45 51 55 44 20 6c  61 74 63 68 0d 6a ae 10  |..EQUD latch.j..|
0000c120  45 51 55 44 20 72 65 67  42 5f 34 31 0d 6a b8 0e  |EQUD regB_41.j..|
0000c130  45 51 55 44 20 64 75 6d  6d 79 0d 6a c2 0e 45 51  |EQUD dummy.j..EQ|
0000c140  55 44 20 64 75 6d 6d 79  0d 6a cc 19 45 51 55 44  |UD dummy.j..EQUD|
0000c150  20 77 72 69 74 65 54 31  6c 6f 77 5f 6c 61 74 63  | writeT1low_latc|
0000c160  68 0d 6a d6 1a 45 51 55  44 20 77 72 69 74 65 54  |h.j..EQUD writeT|
0000c170  31 68 69 67 68 5f 63 6f  75 6e 74 0d 6a e0 19 45  |1high_count.j..E|
0000c180  51 55 44 20 77 72 69 74  65 54 31 6c 6f 77 5f 6c  |QUD writeT1low_l|
0000c190  61 74 63 68 0d 6a ea 1a  45 51 55 44 20 77 72 69  |atch.j..EQUD wri|
0000c1a0  74 65 54 31 68 69 67 68  5f 6c 61 74 63 68 0d 6a  |teT1high_latch.j|
0000c1b0  f4 19 45 51 55 44 20 77  72 69 74 65 54 32 6c 6f  |..EQUD writeT2lo|
0000c1c0  77 5f 6c 61 74 63 68 0d  6a fe 1a 45 51 55 44 20  |w_latch.j..EQUD |
0000c1d0  77 72 69 74 65 54 32 68  69 67 68 5f 63 6f 75 6e  |writeT2high_coun|
0000c1e0  74 0d 6b 08 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |t.k..EQUD dummy.|
0000c1f0  6b 12 0e 45 51 55 44 20  64 75 6d 6d 79 0d 6b 1c  |k..EQUD dummy.k.|
0000c200  0e 45 51 55 44 20 64 75  6d 6d 79 0d 6b 26 18 45  |.EQUD dummy.k&.E|
0000c210  51 55 44 20 69 6e 74 65  72 72 75 70 74 5f 66 6c  |QUD interrupt_fl|
0000c220  61 67 73 0d 6b 30 19 45  51 55 44 20 69 6e 74 65  |ags.k0.EQUD inte|
0000c230  72 72 75 70 74 5f 65 6e  61 62 6c 65 0d 6b 3a 10  |rrupt_enable.k:.|
0000c240  45 51 55 44 20 72 65 67  42 5f 34 46 0d 6b 44 0b  |EQUD regB_4F.kD.|
0000c250  3b 20 36 30 2d 37 46 0d  6b 4e 05 5d 0d 6b 58 12  |; 60-7F.kN.].kX.|
0000c260  e7 20 49 4f 5f 50 6f 64  75 6c 65 25 20 8c 0d 6b  |. IO_Podule% ..k|
0000c270  62 09 5b 4f 50 54 70 0d  6b 6c 1d a4 65 71 75 64  |b.[OPTp.kl..equd|
0000c280  28 26 32 30 2c 49 4f 70  6f 64 75 6c 65 5f 57 72  |(&20,IOpodule_Wr|
0000c290  69 74 65 29 0d 6b 76 05  5d 0d 6b 80 05 cc 0d 6b  |ite).kv.].k....k|
0000c2a0  8a 09 5b 4f 50 54 70 0d  6b 94 0e 45 51 55 44 20  |..[OPTp.k..EQUD |
0000c2b0  64 75 6d 6d 79 0d 6b 9e  16 45 51 55 44 20 70 72  |dummy.k..EQUD pr|
0000c2c0  69 6e 74 65 72 5f 77 72  69 74 65 0d 6b a8 0e 45  |inter_write.k..E|
0000c2d0  51 55 44 20 64 75 6d 6d  79 0d 6b b2 0e 45 51 55  |QUD dummy.k..EQU|
0000c2e0  44 20 64 75 6d 6d 79 0d  6b bc 19 45 51 55 44 20  |D dummy.k..EQUD |
0000c2f0  77 72 69 74 65 54 33 6c  6f 77 5f 6c 61 74 63 68  |writeT3low_latch|
0000c300  0d 6b c6 1a 45 51 55 44  20 77 72 69 74 65 54 33  |.k..EQUD writeT3|
0000c310  68 69 67 68 5f 63 6f 75  6e 74 0d 6b d0 19 45 51  |high_count.k..EQ|
0000c320  55 44 20 77 72 69 74 65  54 33 6c 6f 77 5f 6c 61  |UD writeT3low_la|
0000c330  74 63 68 0d 6b da 1a 45  51 55 44 20 77 72 69 74  |tch.k..EQUD writ|
0000c340  65 54 33 68 69 67 68 5f  6c 61 74 63 68 0d 6b e4  |eT3high_latch.k.|
0000c350  19 45 51 55 44 20 77 72  69 74 65 54 34 6c 6f 77  |.EQUD writeT4low|
0000c360  5f 6c 61 74 63 68 0d 6b  ee 1a 45 51 55 44 20 77  |_latch.k..EQUD w|
0000c370  72 69 74 65 54 34 68 69  67 68 5f 63 6f 75 6e 74  |riteT4high_count|
0000c380  0d 6b f8 0e 45 51 55 44  20 64 75 6d 6d 79 0d 6c  |.k..EQUD dummy.l|
0000c390  02 12 45 51 55 44 20 77  72 69 74 65 41 43 52 32  |..EQUD writeACR2|
0000c3a0  0d 6c 0c 0e 45 51 55 44  20 64 75 6d 6d 79 0d 6c  |.l..EQUD dummy.l|
0000c3b0  16 19 45 51 55 44 20 69  6e 74 65 72 72 75 70 74  |..EQUD interrupt|
0000c3c0  5f 66 6c 61 67 73 32 0d  6c 20 1a 45 51 55 44 20  |_flags2.l .EQUD |
0000c3d0  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000c3e0  32 0d 6c 2a 16 45 51 55  44 20 70 72 69 6e 74 65  |2.l*.EQUD printe|
0000c3f0  72 5f 77 72 69 74 65 0d  6c 34 04 0d 6c 3e 0e 45  |r_write.l4..l>.E|
0000c400  51 55 44 20 64 75 6d 6d  79 0d 6c 48 16 45 51 55  |QUD dummy.lH.EQU|
0000c410  44 20 70 72 69 6e 74 65  72 5f 77 72 69 74 65 0d  |D printer_write.|
0000c420  6c 52 0e 45 51 55 44 20  64 75 6d 6d 79 0d 6c 5c  |lR.EQUD dummy.l\|
0000c430  0e 45 51 55 44 20 64 75  6d 6d 79 0d 6c 66 19 45  |.EQUD dummy.lf.E|
0000c440  51 55 44 20 77 72 69 74  65 54 33 6c 6f 77 5f 6c  |QUD writeT3low_l|
0000c450  61 74 63 68 0d 6c 70 1a  45 51 55 44 20 77 72 69  |atch.lp.EQUD wri|
0000c460  74 65 54 33 68 69 67 68  5f 63 6f 75 6e 74 0d 6c  |teT3high_count.l|
0000c470  7a 19 45 51 55 44 20 77  72 69 74 65 54 33 6c 6f  |z.EQUD writeT3lo|
0000c480  77 5f 6c 61 74 63 68 0d  6c 84 1a 45 51 55 44 20  |w_latch.l..EQUD |
0000c490  77 72 69 74 65 54 33 68  69 67 68 5f 6c 61 74 63  |writeT3high_latc|
0000c4a0  68 0d 6c 8e 19 45 51 55  44 20 77 72 69 74 65 54  |h.l..EQUD writeT|
0000c4b0  34 6c 6f 77 5f 6c 61 74  63 68 0d 6c 98 1a 45 51  |4low_latch.l..EQ|
0000c4c0  55 44 20 77 72 69 74 65  54 34 68 69 67 68 5f 63  |UD writeT4high_c|
0000c4d0  6f 75 6e 74 0d 6c a2 0e  45 51 55 44 20 64 75 6d  |ount.l..EQUD dum|
0000c4e0  6d 79 0d 6c ac 0e 45 51  55 44 20 64 75 6d 6d 79  |my.l..EQUD dummy|
0000c4f0  0d 6c b6 0e 45 51 55 44  20 64 75 6d 6d 79 0d 6c  |.l..EQUD dummy.l|
0000c500  c0 19 45 51 55 44 20 69  6e 74 65 72 72 75 70 74  |..EQUD interrupt|
0000c510  5f 66 6c 61 67 73 32 0d  6c ca 1a 45 51 55 44 20  |_flags2.l..EQUD |
0000c520  69 6e 74 65 72 72 75 70  74 5f 65 6e 61 62 6c 65  |interrupt_enable|
0000c530  32 0d 6c d4 16 45 51 55  44 20 70 72 69 6e 74 65  |2.l..EQUD printe|
0000c540  72 5f 77 72 69 74 65 0d  6c de 05 5d 0d 6c e8 05  |r_write.l..].l..|
0000c550  cd 0d 6c f2 04 0d 6c fc  09 5b 4f 50 54 70 0d 6d  |..l...l..[OPTp.m|
0000c560  06 0b 3b 20 38 30 2d 42  46 0d 6d 10 14 a4 65 71  |..; 80-BF.m...eq|
0000c570  75 64 28 26 34 30 2c 64  75 6d 6d 79 29 0d 6d 1a  |ud(&40,dummy).m.|
0000c580  0b 3b 20 43 30 2d 43 46  0d 6d 24 19 45 51 55 44  |.; C0-CF.m$.EQUD|
0000c590  20 77 72 69 74 65 5f 41  44 43 5f 73 74 61 74 75  | write_ADC_statu|
0000c5a0  73 0d 6d 2e 13 a4 65 71  75 64 28 31 35 2c 64 75  |s.m...equd(15,du|
0000c5b0  6d 6d 79 29 0d 6d 38 0b  3b 20 44 30 2d 46 46 0d  |mmy).m8.; D0-FF.|
0000c5c0  6d 42 14 a4 65 71 75 64  28 26 33 30 2c 64 75 6d  |mB..equd(&30,dum|
0000c5d0  6d 79 29 0d 6d 4c 04 0d  6d 56 10 2e 6c 64 72 62  |my).mL..mV..ldrb|
0000c5e0  5f 46 46 70 61 67 65 0d  6d 60 15 3b 53 55 42 20  |_FFpage.m`.;SUB |
0000c5f0  74 69 6d 65 2c 74 69 6d  65 2c 23 31 0d 6d 6a 0e  |time,time,#1.mj.|
0000c600  4d 4f 56 20 50 43 2c 52  31 34 0d 6d 74 04 0d 6d  |MOV PC,R14.mt..m|
0000c610  7e 21 2e 6c 64 72 62 38  30 30 30 20 3b 20 67 72  |~!.ldrb8000 ; gr|
0000c620  65 61 74 65 72 20 74 68  61 6e 20 38 30 30 30 0d  |eater than 8000.|
0000c630  6d 88 04 0d 6d 92 11 43  4d 50 20 52 31 2c 23 26  |m...m..CMP R1,#&|
0000c640  46 45 30 30 0d 6d 9c 13  42 48 53 20 6c 64 72 62  |FE00.m..BHS ldrb|
0000c650  5f 73 68 65 69 6c 61 0d  6d a6 04 0d 6d b0 15 3b  |_sheila.m...m..;|
0000c660  4c 44 52 42 20 52 30 2c  5b 6d 65 6d 2c 52 31 5d  |LDRB R0,[mem,R1]|
0000c670  0d 6d ba 15 4d 4f 56 20  52 30 2c 23 70 61 67 65  |.m..MOV R0,#page|
0000c680  74 61 62 6c 65 0d 6d c4  1a 4c 44 52 42 20 52 30  |table.m..LDRB R0|
0000c690  2c 5b 52 30 2c 52 31 2c  4c 53 52 23 31 32 5d 0d  |,[R0,R1,LSR#12].|
0000c6a0  6d ce 1a 4c 44 52 42 20  52 30 2c 5b 52 31 2c 52  |m..LDRB R0,[R1,R|
0000c6b0  30 2c 4c 53 4c 23 31 32  5d 0d 6d d8 0e 4d 4f 56  |0,LSL#12].m..MOV|
0000c6c0  20 50 43 2c 52 31 34 0d  6d e2 04 0d 6d ec 04 0d  | PC,R14.m...m...|
0000c6d0  6d f6 15 3b 4d 4f 56 20  52 31 2c 52 31 2c 4c 53  |m..;MOV R1,R1,LS|
0000c6e0  52 23 31 36 0d 6e 00 05  5d 0d 6e 0a 0e e7 20 6d  |R#16.n..].n... m|
0000c6f0  61 73 74 65 72 20 8c 0d  6e 14 09 5b 4f 50 54 70  |aster ..n..[OPTp|
0000c700  0d 6e 1e 24 2e 6c 64 72  62 31 36 5f 38 30 30 30  |.n.$.ldrb16_8000|
0000c710  20 3b 20 67 72 65 61 74  65 72 20 74 68 61 6e 20  | ; greater than |
0000c720  38 30 30 30 0d 6e 28 04  0d 6e 32 17 43 4d 50 20  |8000.n(..n2.CMP |
0000c730  52 31 2c 23 26 46 45 30  30 20 3c 3c 20 31 36 0d  |R1,#&FE00 << 16.|
0000c740  6e 3c 15 42 48 53 20 6c  64 72 62 31 36 5f 73 68  |n<.BHS ldrb16_sh|
0000c750  65 69 6c 61 0d 6e 46 04  0d 6e 50 1c 3b 4c 44 52  |eila.nF..nP.;LDR|
0000c760  42 20 52 30 2c 5b 6d 65  6d 2c 52 31 2c 4c 53 52  |B R0,[mem,R1,LSR|
0000c770  23 31 36 5d 0d 6e 5a 15  4d 4f 56 20 52 30 2c 23  |#16].nZ.MOV R0,#|
0000c780  70 61 67 65 74 61 62 6c  65 0d 6e 64 1a 4c 44 52  |pagetable.nd.LDR|
0000c790  42 20 52 30 2c 5b 52 30  2c 52 31 2c 4c 53 52 23  |B R0,[R0,R1,LSR#|
0000c7a0  32 38 5d 0d 6e 6e 14 4d  4f 56 20 52 30 2c 52 30  |28].nn.MOV R0,R0|
0000c7b0  2c 4c 53 4c 23 31 32 0d  6e 78 1a 4c 44 52 42 20  |,LSL#12.nx.LDRB |
0000c7c0  52 30 2c 5b 52 30 2c 52  31 2c 4c 53 52 23 31 36  |R0,[R0,R1,LSR#16|
0000c7d0  5d 0d 6e 82 04 0d 6e 8c  0e 4d 4f 56 20 50 43 2c  |].n...n..MOV PC,|
0000c7e0  52 31 34 0d 6e 96 04 0d  6e a0 12 2e 6c 64 72 62  |R14.n...n...ldrb|
0000c7f0  31 36 5f 73 63 72 65 65  6e 0d 6e aa 17 43 4d 50  |16_screen.n..CMP|
0000c800  20 52 31 2c 23 26 38 30  30 30 20 3c 3c 20 31 36  | R1,#&8000 << 16|
0000c810  0d 6e b4 13 42 48 53 20  6c 64 72 62 31 36 5f 38  |.n..BHS ldrb16_8|
0000c820  30 30 30 0d 6e be 04 0d  6e c8 1a 4c 44 52 42 20  |000.n...n..LDRB |
0000c830  52 31 32 2c 5b 6d 65 6d  2c 23 41 43 43 43 4f 4e  |R12,[mem,#ACCCON|
0000c840  5d 0d 6e d2 04 0d 6e dc  18 43 4d 50 20 7a 70 63  |].n...n..CMP zpc|
0000c850  2c 23 26 43 30 30 30 20  3c 3c 20 31 36 0d 6e e6  |,#&C000 << 16.n.|
0000c860  17 4d 4f 56 4c 54 20 52  31 33 2c 52 31 32 2c 4c  |.MOVLT R13,R12,L|
0000c870  53 52 23 31 0d 6e f0 11  4d 4f 56 47 45 20 52 31  |SR#1.n..MOVGE R1|
0000c880  33 2c 52 31 32 0d 6e fa  18 43 4d 50 20 7a 70 63  |3,R12.n..CMP zpc|
0000c890  2c 23 26 45 30 30 30 20  3c 3c 20 31 36 0d 6f 04  |,#&E000 << 16.o.|
0000c8a0  35 4d 4f 56 47 45 20 52  31 33 2c 52 31 32 2c 4c  |5MOVGE R13,R12,L|
0000c8b0  53 52 23 31 20 20 20 20  3b 20 6e 6f 77 20 62 69  |SR#1    ; now bi|
0000c8c0  74 20 31 20 6f 66 20 52  31 33 20 69 73 20 77 68  |t 1 of R13 is wh|
0000c8d0  61 74 0d 6f 0e 2c 20 20  20 20 20 20 20 20 20 20  |at.o.,          |
0000c8e0  20 20 20 20 20 20 20 20  20 20 20 20 20 3b 20 77  |             ; w|
0000c8f0  65 20 6d 75 73 74 20 6c  6f 6f 6b 20 61 74 0d 6f  |e must look at.o|
0000c900  18 04 0d 6f 22 19 3b 43  4d 50 20 7a 70 63 2c 23  |...o".;CMP zpc,#|
0000c910  26 43 30 30 30 20 3c 3c  20 31 36 0d 6f 2c 11 3b  |&C000 << 16.o,.;|
0000c920  4d 4f 56 4c 54 20 52 31  33 2c 23 30 0d 6f 36 1a  |MOVLT R13,#0.o6.|
0000c930  3b 82 47 45 20 52 31 33  2c 52 31 32 2c 52 31 32  |;.GE R13,R12,R12|
0000c940  2c 4c 53 52 23 31 0d 6f  40 19 3b 43 4d 50 20 7a  |,LSR#1.o@.;CMP z|
0000c950  70 63 2c 23 26 45 30 30  30 20 3c 3c 20 31 36 0d  |pc,#&E000 << 16.|
0000c960  6f 4a 2c 3b 4d 4f 56 47  45 20 52 31 33 2c 23 30  |oJ,;MOVGE R13,#0|
0000c970  20 3b 20 6e 6f 77 20 6c  6f 6f 6b 20 61 74 20 62  | ; now look at b|
0000c980  69 74 20 31 20 6f 66 20  52 31 33 0d 6f 54 04 0d  |it 1 of R13.oT..|
0000c990  6f 5e 11 3b 54 53 54 20  52 31 33 2c 23 25 31 30  |o^.;TST R13,#%10|
0000c9a0  0d 6f 68 39 3b 53 55 42  4e 45 20 52 31 33 2c 6d  |.oh9;SUBNE R13,m|
0000c9b0  65 6d 2c 23 28 26 33 30  30 30 2b 26 31 30 30 30  |em,#(&3000+&1000|
0000c9c0  30 29 20 3b 20 73 68 61  64 6f 77 20 73 63 72 65  |0) ; shadow scre|
0000c9d0  65 6e 20 6d 65 6d 6f 72  79 0d 6f 72 1e 3b 4c 44  |en memory.or.;LD|
0000c9e0  52 4e 45 42 20 52 30 2c  5b 52 31 33 2c 52 31 2c  |RNEB R0,[R13,R1,|
0000c9f0  4c 53 52 23 31 36 5d 0d  6f 7c 1e 3b 4c 44 52 45  |LSR#16].o|.;LDRE|
0000ca00  51 42 20 52 30 2c 5b 6d  65 6d 2c 52 31 2c 4c 53  |QB R0,[mem,R1,LS|
0000ca10  52 23 31 36 5d 0d 6f 86  0f 3b 4d 4f 56 20 50 43  |R#16].o..;MOV PC|
0000ca20  2c 52 31 34 0d 6f 90 04  0d 6f 9a 15 4d 4f 56 20  |,R14.o...o..MOV |
0000ca30  52 32 2c 23 70 61 67 65  74 61 62 6c 65 0d 6f a4  |R2,#pagetable.o.|
0000ca40  1a 4c 44 52 42 20 52 32  2c 5b 52 32 2c 52 31 2c  |.LDRB R2,[R2,R1,|
0000ca50  4c 53 52 23 32 38 5d 0d  6f ae 10 54 53 54 20 52  |LSR#28].o..TST R|
0000ca60  31 33 2c 23 25 31 30 0d  6f b8 11 4d 4f 56 4e 45  |13,#%10.o..MOVNE|
0000ca70  20 52 32 2c 23 26 38 44  0d 6f c2 14 4d 4f 56 20  | R2,#&8D.o..MOV |
0000ca80  52 32 2c 52 32 2c 4c 53  4c 23 31 32 0d 6f cc 1a  |R2,R2,LSL#12.o..|
0000ca90  4c 44 52 42 20 52 30 2c  5b 52 32 2c 52 31 2c 4c  |LDRB R0,[R2,R1,L|
0000caa0  53 52 23 31 36 5d 0d 6f  d6 0e 4d 4f 56 20 50 43  |SR#16].o..MOV PC|
0000cab0  2c 52 31 34 0d 6f e0 05  5d 0d 6f ea 05 cc 0d 6f  |,R14.o..].o....o|
0000cac0  f4 09 5b 4f 50 54 70 0d  6f fe 12 2e 6c 64 72 62  |..[OPTp.o...ldrb|
0000cad0  31 36 5f 73 63 72 65 65  6e 0d 70 08 17 43 4d 50  |16_screen.p..CMP|
0000cae0  20 52 31 2c 23 26 46 45  30 30 20 3c 3c 20 31 36  | R1,#&FE00 << 16|
0000caf0  0d 70 12 15 42 48 53 20  6c 64 72 62 31 36 5f 73  |.p..BHS ldrb16_s|
0000cb00  68 65 69 6c 61 0d 70 1c  04 0d 70 26 1b 4c 44 52  |heila.p...p&.LDR|
0000cb10  42 20 52 30 2c 5b 6d 65  6d 2c 52 31 2c 4c 53 52  |B R0,[mem,R1,LSR|
0000cb20  23 31 36 5d 0d 70 30 0e  4d 4f 56 20 50 43 2c 52  |#16].p0.MOV PC,R|
0000cb30  31 34 0d 70 3a 05 5d 0d  70 44 05 cd 0d 70 4e 04  |14.p:.].pD...pN.|
0000cb40  0d 70 58 0e e7 20 6d 61  73 74 65 72 20 8c 0d 70  |.pX.. master ..p|
0000cb50  62 09 5b 4f 50 54 70 0d  70 6c 04 0d 70 76 10 2e  |b.[OPTp.pl..pv..|
0000cb60  6c 64 72 62 5f 73 63 72  65 65 6e 0d 70 80 21 2e  |ldrb_screen.p.!.|
0000cb70  6c 64 72 62 33 30 30 30  20 3b 20 67 72 65 61 74  |ldrb3000 ; great|
0000cb80  65 72 20 74 68 61 6e 20  33 30 30 30 0d 70 8a 04  |er than 3000.p..|
0000cb90  0d 70 94 11 43 4d 50 20  52 31 2c 23 26 38 30 30  |.p..CMP R1,#&800|
0000cba0  30 0d 70 9e 10 42 48 53  20 6c 64 72 62 38 30 30  |0.p..BHS ldrb800|
0000cbb0  30 0d 70 a8 04 0d 70 b2  1a 4c 44 52 42 20 52 31  |0.p...p..LDRB R1|
0000cbc0  32 2c 5b 6d 65 6d 2c 23  41 43 43 43 4f 4e 5d 0d  |2,[mem,#ACCCON].|
0000cbd0  70 bc 04 0d 70 c6 18 43  4d 50 20 7a 70 63 2c 23  |p...p..CMP zpc,#|
0000cbe0  26 43 30 30 30 20 3c 3c  20 31 36 0d 70 d0 17 4d  |&C000 << 16.p..M|
0000cbf0  4f 56 4c 54 20 52 31 33  2c 52 31 32 2c 4c 53 52  |OVLT R13,R12,LSR|
0000cc00  23 31 0d 70 da 11 4d 4f  56 47 45 20 52 31 33 2c  |#1.p..MOVGE R13,|
0000cc10  52 31 32 0d 70 e4 18 43  4d 50 20 7a 70 63 2c 23  |R12.p..CMP zpc,#|
0000cc20  26 45 30 30 30 20 3c 3c  20 31 36 0d 70 ee 35 4d  |&E000 << 16.p.5M|
0000cc30  4f 56 47 45 20 52 31 33  2c 52 31 32 2c 4c 53 52  |OVGE R13,R12,LSR|
0000cc40  23 31 20 20 20 20 3b 20  6e 6f 77 20 62 69 74 20  |#1    ; now bit |
0000cc50  31 20 6f 66 20 52 31 33  20 69 73 20 77 68 61 74  |1 of R13 is what|
0000cc60  0d 70 f8 2c 20 20 20 20  20 20 20 20 20 20 20 20  |.p.,            |
0000cc70  20 20 20 20 20 20 20 20  20 20 20 3b 20 77 65 20  |           ; we |
0000cc80  6d 75 73 74 20 6c 6f 6f  6b 20 61 74 0d 71 02 04  |must look at.q..|
0000cc90  0d 71 0c 19 3b 43 4d 50  20 7a 70 63 2c 23 26 43  |.q..;CMP zpc,#&C|
0000cca0  30 30 30 20 3c 3c 20 31  36 0d 71 16 11 3b 4d 4f  |000 << 16.q..;MO|
0000ccb0  56 4c 54 20 52 31 33 2c  23 30 0d 71 20 1a 3b 82  |VLT R13,#0.q .;.|
0000ccc0  47 45 20 52 31 33 2c 52  31 32 2c 52 31 32 2c 4c  |GE R13,R12,R12,L|
0000ccd0  53 52 23 31 0d 71 2a 19  3b 43 4d 50 20 7a 70 63  |SR#1.q*.;CMP zpc|
0000cce0  2c 23 26 45 30 30 30 20  3c 3c 20 31 36 0d 71 34  |,#&E000 << 16.q4|
0000ccf0  2c 3b 4d 4f 56 47 45 20  52 31 33 2c 23 30 20 3b  |,;MOVGE R13,#0 ;|
0000cd00  20 6e 6f 77 20 6c 6f 6f  6b 20 61 74 20 62 69 74  | now look at bit|
0000cd10  20 31 20 6f 66 20 52 31  33 0d 71 3e 04 0d 71 48  | 1 of R13.q>..qH|
0000cd20  11 3b 54 53 54 20 52 31  33 2c 23 25 31 30 0d 71  |.;TST R13,#%10.q|
0000cd30  52 39 3b 53 55 42 4e 45  20 52 31 33 2c 6d 65 6d  |R9;SUBNE R13,mem|
0000cd40  2c 23 28 26 33 30 30 30  2b 26 31 30 30 30 30 29  |,#(&3000+&10000)|
0000cd50  20 3b 20 73 68 61 64 6f  77 20 73 63 72 65 65 6e  | ; shadow screen|
0000cd60  20 6d 65 6d 6f 72 79 0d  71 5c 17 3b 4c 44 52 4e  | memory.q\.;LDRN|
0000cd70  45 42 20 52 30 2c 5b 52  31 33 2c 52 31 5d 0d 71  |EB R0,[R13,R1].q|
0000cd80  66 17 3b 4c 44 52 45 51  42 20 52 30 2c 5b 6d 65  |f.;LDREQB R0,[me|
0000cd90  6d 2c 52 31 5d 0d 71 70  0f 3b 4d 4f 56 20 50 43  |m,R1].qp.;MOV PC|
0000cda0  2c 52 31 34 0d 71 7a 04  0d 71 84 15 4d 4f 56 20  |,R14.qz..q..MOV |
0000cdb0  52 32 2c 23 70 61 67 65  74 61 62 6c 65 0d 71 8e  |R2,#pagetable.q.|
0000cdc0  1a 4c 44 52 42 20 52 32  2c 5b 52 32 2c 52 31 2c  |.LDRB R2,[R2,R1,|
0000cdd0  4c 53 52 23 31 32 5d 0d  71 98 10 54 53 54 20 52  |LSR#12].q..TST R|
0000cde0  31 33 2c 23 25 31 30 0d  71 a2 11 4d 4f 56 4e 45  |13,#%10.q..MOVNE|
0000cdf0  20 52 32 2c 23 26 38 44  0d 71 ac 1a 4c 44 52 42  | R2,#&8D.q..LDRB|
0000ce00  20 52 30 2c 5b 52 31 2c  52 32 2c 4c 53 4c 23 31  | R0,[R1,R2,LSL#1|
0000ce10  32 5d 0d 71 b6 0e 4d 4f  56 20 50 43 2c 52 31 34  |2].q..MOV PC,R14|
0000ce20  0d 71 c0 05 5d 0d 71 ca  05 cc 0d 71 d4 09 5b 4f  |.q..].q....q..[O|
0000ce30  50 54 70 0d 71 de 10 2e  6c 64 72 62 5f 73 63 72  |PTp.q...ldrb_scr|
0000ce40  65 65 6e 0d 71 e8 21 2e  6c 64 72 62 33 30 30 30  |een.q.!.ldrb3000|
0000ce50  20 3b 20 67 72 65 61 74  65 72 20 74 68 61 6e 20  | ; greater than |
0000ce60  33 30 30 30 0d 71 f2 11  43 4d 50 20 52 31 2c 23  |3000.q..CMP R1,#|
0000ce70  26 46 45 30 30 0d 71 fc  13 42 48 53 20 6c 64 72  |&FE00.q..BHS ldr|
0000ce80  62 5f 73 68 65 69 6c 61  0d 72 06 14 4c 44 52 42  |b_sheila.r..LDRB|
0000ce90  20 52 30 2c 5b 6d 65 6d  2c 52 31 5d 0d 72 10 0e  | R0,[mem,R1].r..|
0000cea0  4d 4f 56 20 50 43 2c 52  31 34 0d 72 1a 05 5d 0d  |MOV PC,R14.r..].|
0000ceb0  72 24 05 cd 0d 72 2e 04  0d 72 38 09 5b 4f 50 54  |r$...r...r8.[OPT|
0000cec0  70 0d 72 42 04 0d 72 4c  12 2e 6c 64 72 62 31 36  |p.rB..rL..ldrb16|
0000ced0  5f 73 68 65 69 6c 61 0d  72 56 15 4d 4f 56 20 52  |_sheila.rV.MOV R|
0000cee0  31 32 2c 52 31 2c 4c 53  52 23 31 36 0d 72 60 12  |12,R1,LSR#16.r`.|
0000cef0  42 20 6c 64 72 62 5f 73  68 65 69 6c 61 32 0d 72  |B ldrb_sheila2.r|
0000cf00  6a 04 0d 72 74 10 2e 6c  64 72 62 5f 73 68 65 69  |j..rt..ldrb_shei|
0000cf10  6c 61 0d 72 7e 0e 4d 4f  56 20 52 31 32 2c 52 31  |la.r~.MOV R12,R1|
0000cf20  0d 72 88 04 0d 72 92 11  2e 6c 64 72 62 5f 73 68  |.r...r...ldrb_sh|
0000cf30  65 69 6c 61 32 0d 72 9c  16 3b 4c 44 52 42 20 52  |eila2.r..;LDRB R|
0000cf40  30 2c 5b 6d 65 6d 2c 52  31 32 5d 0d 72 a6 15 4d  |0,[mem,R12].r..M|
0000cf50  4f 56 20 52 30 2c 23 70  61 67 65 74 61 62 6c 65  |OV R0,#pagetable|
0000cf60  0d 72 b0 1b 4c 44 52 42  20 52 30 2c 5b 52 30 2c  |.r..LDRB R0,[R0,|
0000cf70  52 31 32 2c 4c 53 52 23  31 32 5d 0d 72 ba 1b 4c  |R12,LSR#12].r..L|
0000cf80  44 52 42 20 52 30 2c 5b  52 31 32 2c 52 30 2c 4c  |DRB R0,[R12,R0,L|
0000cf90  53 4c 23 31 32 5d 0d 72  c4 04 0d 72 ce 16 53 55  |SL#12].r...r..SU|
0000cfa0  42 53 20 52 32 2c 52 31  32 2c 23 26 46 45 30 30  |BS R2,R12,#&FE00|
0000cfb0  0d 72 d8 10 4d 4f 56 4c  54 20 50 43 2c 52 31 34  |.r..MOVLT PC,R14|
0000cfc0  0d 72 e2 14 53 55 42 53  20 52 32 2c 52 32 2c 23  |.r..SUBS R2,R2,#|
0000cfd0  26 31 30 30 0d 72 ec 13  42 47 45 20 6c 64 72 62  |&100.r..BGE ldrb|
0000cfe0  5f 46 46 70 61 67 65 0d  72 f6 04 0d 73 00 27 53  |_FFpage.r...s.'S|
0000cff0  55 42 20 52 32 2c 6d 65  6d 2c 23 26 31 30 30 30  |UB R2,mem,#&1000|
0000d000  30 3a 4c 44 52 42 20 52  30 2c 5b 52 32 2c 52 31  |0:LDRB R0,[R2,R1|
0000d010  32 5d 0d 73 0a 04 0d 73  14 14 53 55 42 20 74 69  |2].s...s..SUB ti|
0000d020  6d 65 2c 74 69 6d 65 2c  23 31 0d 73 1e 04 0d 73  |me,time,#1.s...s|
0000d030  28 11 80 20 52 32 2c 52  31 32 2c 23 26 46 46 0d  |(.. R2,R12,#&FF.|
0000d040  73 32 1a 3b 41 44 52 20  52 31 2c 73 68 65 69 6c  |s2.;ADR R1,sheil|
0000d050  61 5f 72 65 61 64 74 61  62 0d 73 3c 18 4c 44 52  |a_readtab.s<.LDR|
0000d060  20 50 43 2c 5b 50 43 2c  52 32 2c 4c 53 4c 23 32  | PC,[PC,R2,LSL#2|
0000d070  5d 0d 73 46 21 45 51 55  44 20 30 20 3b 20 70 61  |].sF!EQUD 0 ; pa|
0000d080  64 64 69 6e 67 20 66 6f  72 20 70 69 70 65 6c 69  |dding for pipeli|
0000d090  6e 65 0d 73 50 13 2e 73  68 65 69 6c 61 5f 72 65  |ne.sP..sheila_re|
0000d0a0  61 64 74 61 62 0d 73 5a  09 3b 20 30 2d 46 0d 73  |adtab.sZ.; 0-F.s|
0000d0b0  64 12 a4 65 71 75 64 28  38 2c 64 75 6d 6d 79 29  |d..equd(8,dummy)|
0000d0c0  0d 73 6e 11 45 51 55 44  20 72 65 61 64 46 45 30  |.sn.EQUD readFE0|
0000d0d0  38 0d 73 78 11 45 51 55  44 20 72 65 61 64 46 45  |8.sx.EQUD readFE|
0000d0e0  30 39 0d 73 82 12 a4 65  71 75 64 28 36 2c 64 75  |09.s...equd(6,du|
0000d0f0  6d 6d 79 29 0d 73 8c 0b  3b 20 31 30 2d 32 46 0d  |mmy).s..; 10-2F.|
0000d100  73 96 11 45 51 55 44 20  72 65 61 64 46 45 31 30  |s..EQUD readFE10|
0000d110  0d 73 a0 14 a4 65 71 75  64 28 26 31 46 2c 64 75  |.s...equd(&1F,du|
0000d120  6d 6d 79 29 0d 73 aa 0b  3b 20 33 30 2d 33 46 0d  |mmy).s..; 30-3F.|
0000d130  73 b4 1a a4 65 71 75 64  28 34 2c 72 65 74 75 72  |s...equd(4,retur|
0000d140  6e 5f 52 4f 4d 53 45 4c  29 0d 73 be 1a a4 65 71  |n_ROMSEL).s...eq|
0000d150  75 64 28 34 2c 72 65 74  75 72 6e 5f 41 43 43 43  |ud(4,return_ACCC|
0000d160  4f 4e 29 0d 73 c8 12 a4  65 71 75 64 28 38 2c 64  |ON).s...equd(8,d|
0000d170  75 6d 6d 79 29 0d 73 d2  0b 3b 20 34 30 2d 34 46  |ummy).s..; 40-4F|
0000d180  0d 73 dc 0f 45 51 55 44  20 6c 64 72 62 34 30 0d  |.s..EQUD ldrb40.|
0000d190  73 e6 0f 45 51 55 44 20  6c 64 72 62 34 31 0d 73  |s..EQUD ldrb41.s|
0000d1a0  f0 0e 45 51 55 44 20 64  75 6d 6d 79 0d 73 fa 0e  |..EQUD dummy.s..|
0000d1b0  45 51 55 44 20 64 75 6d  6d 79 0d 74 04 18 45 51  |EQUD dummy.t..EQ|
0000d1c0  55 44 20 72 65 61 64 54  31 6c 6f 77 5f 63 6f 75  |UD readT1low_cou|
0000d1d0  6e 74 0d 74 0e 19 45 51  55 44 20 72 65 61 64 54  |nt.t..EQUD readT|
0000d1e0  31 68 69 67 68 5f 63 6f  75 6e 74 0d 74 18 18 45  |1high_count.t..E|
0000d1f0  51 55 44 20 72 65 61 64  54 31 6c 6f 77 5f 6c 61  |QUD readT1low_la|
0000d200  74 63 68 0d 74 22 19 45  51 55 44 20 72 65 61 64  |tch.t".EQUD read|
0000d210  54 31 68 69 67 68 5f 6c  61 74 63 68 0d 74 2c 18  |T1high_latch.t,.|
0000d220  45 51 55 44 20 72 65 61  64 54 32 6c 6f 77 5f 63  |EQUD readT2low_c|
0000d230  6f 75 6e 74 0d 74 36 19  45 51 55 44 20 72 65 61  |ount.t6.EQUD rea|
0000d240  64 54 32 68 69 67 68 5f  63 6f 75 6e 74 0d 74 40  |dT2high_count.t@|
0000d250  0e 45 51 55 44 20 64 75  6d 6d 79 0d 74 4a 0e 45  |.EQUD dummy.tJ.E|
0000d260  51 55 44 20 64 75 6d 6d  79 0d 74 54 0e 45 51 55  |QUD dummy.tT.EQU|
0000d270  44 20 64 75 6d 6d 79 0d  74 5e 11 45 51 55 44 20  |D dummy.t^.EQUD |
0000d280  72 65 61 64 5f 69 66 72  0d 74 68 11 45 51 55 44  |read_ifr.th.EQUD|
0000d290  20 72 65 61 64 5f 69 65  72 0d 74 72 0f 45 51 55  | read_ier.tr.EQU|
0000d2a0  44 20 6c 64 72 62 34 46  0d 74 7c 0b 3b 20 35 30  |D ldrb4F.t|.; 50|
0000d2b0  2d 35 46 0d 74 86 0f 45  51 55 44 20 6c 64 72 62  |-5F.t..EQUD ldrb|
0000d2c0  34 30 0d 74 90 0f 45 51  55 44 20 6c 64 72 62 34  |40.t..EQUD ldrb4|
0000d2d0  31 0d 74 9a 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |1.t..EQUD dummy.|
0000d2e0  74 a4 0e 45 51 55 44 20  64 75 6d 6d 79 0d 74 ae  |t..EQUD dummy.t.|
0000d2f0  18 45 51 55 44 20 72 65  61 64 54 31 6c 6f 77 5f  |.EQUD readT1low_|
0000d300  63 6f 75 6e 74 0d 74 b8  19 45 51 55 44 20 72 65  |count.t..EQUD re|
0000d310  61 64 54 31 68 69 67 68  5f 63 6f 75 6e 74 0d 74  |adT1high_count.t|
0000d320  c2 18 45 51 55 44 20 72  65 61 64 54 31 6c 6f 77  |..EQUD readT1low|
0000d330  5f 6c 61 74 63 68 0d 74  cc 19 45 51 55 44 20 72  |_latch.t..EQUD r|
0000d340  65 61 64 54 31 68 69 67  68 5f 6c 61 74 63 68 0d  |eadT1high_latch.|
0000d350  74 d6 18 45 51 55 44 20  72 65 61 64 54 32 6c 6f  |t..EQUD readT2lo|
0000d360  77 5f 63 6f 75 6e 74 0d  74 e0 19 45 51 55 44 20  |w_count.t..EQUD |
0000d370  72 65 61 64 54 32 68 69  67 68 5f 63 6f 75 6e 74  |readT2high_count|
0000d380  0d 74 ea 0e 45 51 55 44  20 64 75 6d 6d 79 0d 74  |.t..EQUD dummy.t|
0000d390  f4 0e 45 51 55 44 20 64  75 6d 6d 79 0d 74 fe 0e  |..EQUD dummy.t..|
0000d3a0  45 51 55 44 20 64 75 6d  6d 79 0d 75 08 11 45 51  |EQUD dummy.u..EQ|
0000d3b0  55 44 20 72 65 61 64 5f  69 66 72 0d 75 12 11 45  |UD read_ifr.u..E|
0000d3c0  51 55 44 20 72 65 61 64  5f 69 65 72 0d 75 1c 0f  |QUD read_ier.u..|
0000d3d0  45 51 55 44 20 6c 64 72  62 34 46 0d 75 26 0b 3b  |EQUD ldrb4F.u&.;|
0000d3e0  20 36 30 2d 36 46 0d 75  30 05 5d 0d 75 3a 12 e7  | 60-6F.u0.].u:..|
0000d3f0  20 49 4f 5f 50 6f 64 75  6c 65 25 20 8c 0d 75 44  | IO_Podule% ..uD|
0000d400  09 5b 4f 50 54 70 0d 75  4e 1c a4 65 71 75 64 28  |.[OPTp.uN..equd(|
0000d410  26 32 30 2c 49 4f 70 6f  64 75 6c 65 5f 52 65 61  |&20,IOpodule_Rea|
0000d420  64 29 0d 75 58 05 5d 0d  75 62 05 cc 0d 75 6c 09  |d).uX.].ub...ul.|
0000d430  5b 4f 50 54 70 0d 75 76  0e 45 51 55 44 20 64 75  |[OPTp.uv.EQUD du|
0000d440  6d 6d 79 0d 75 80 0e 45  51 55 44 20 64 75 6d 6d  |mmy.u..EQUD dumm|
0000d450  79 0d 75 8a 0e 45 51 55  44 20 64 75 6d 6d 79 0d  |y.u..EQUD dummy.|
0000d460  75 94 0e 45 51 55 44 20  64 75 6d 6d 79 0d 75 9e  |u..EQUD dummy.u.|
0000d470  18 45 51 55 44 20 72 65  61 64 54 33 6c 6f 77 5f  |.EQUD readT3low_|
0000d480  63 6f 75 6e 74 0d 75 a8  19 45 51 55 44 20 72 65  |count.u..EQUD re|
0000d490  61 64 54 33 68 69 67 68  5f 63 6f 75 6e 74 0d 75  |adT3high_count.u|
0000d4a0  b2 18 45 51 55 44 20 72  65 61 64 54 33 6c 6f 77  |..EQUD readT3low|
0000d4b0  5f 6c 61 74 63 68 0d 75  bc 19 45 51 55 44 20 72  |_latch.u..EQUD r|
0000d4c0  65 61 64 54 33 68 69 67  68 5f 6c 61 74 63 68 0d  |eadT3high_latch.|
0000d4d0  75 c6 18 45 51 55 44 20  72 65 61 64 54 34 6c 6f  |u..EQUD readT4lo|
0000d4e0  77 5f 63 6f 75 6e 74 0d  75 d0 19 45 51 55 44 20  |w_count.u..EQUD |
0000d4f0  72 65 61 64 54 34 68 69  67 68 5f 63 6f 75 6e 74  |readT4high_count|
0000d500  0d 75 da 0e 45 51 55 44  20 64 75 6d 6d 79 0d 75  |.u..EQUD dummy.u|
0000d510  e4 0e 45 51 55 44 20 64  75 6d 6d 79 0d 75 ee 0e  |..EQUD dummy.u..|
0000d520  45 51 55 44 20 64 75 6d  6d 79 0d 75 f8 12 45 51  |EQUD dummy.u..EQ|
0000d530  55 44 20 72 65 61 64 5f  69 66 72 32 0d 76 02 12  |UD read_ifr2.v..|
0000d540  45 51 55 44 20 72 65 61  64 5f 69 65 72 32 0d 76  |EQUD read_ier2.v|
0000d550  0c 0e 45 51 55 44 20 64  75 6d 6d 79 0d 76 16 04  |..EQUD dummy.v..|
0000d560  0d 76 20 0e 45 51 55 44  20 64 75 6d 6d 79 0d 76  |.v .EQUD dummy.v|
0000d570  2a 0e 45 51 55 44 20 64  75 6d 6d 79 0d 76 34 0e  |*.EQUD dummy.v4.|
0000d580  45 51 55 44 20 64 75 6d  6d 79 0d 76 3e 0e 45 51  |EQUD dummy.v>.EQ|
0000d590  55 44 20 64 75 6d 6d 79  0d 76 48 18 45 51 55 44  |UD dummy.vH.EQUD|
0000d5a0  20 72 65 61 64 54 33 6c  6f 77 5f 63 6f 75 6e 74  | readT3low_count|
0000d5b0  0d 76 52 19 45 51 55 44  20 72 65 61 64 54 33 68  |.vR.EQUD readT3h|
0000d5c0  69 67 68 5f 63 6f 75 6e  74 0d 76 5c 18 45 51 55  |igh_count.v\.EQU|
0000d5d0  44 20 72 65 61 64 54 33  6c 6f 77 5f 6c 61 74 63  |D readT3low_latc|
0000d5e0  68 0d 76 66 19 45 51 55  44 20 72 65 61 64 54 33  |h.vf.EQUD readT3|
0000d5f0  68 69 67 68 5f 6c 61 74  63 68 0d 76 70 18 45 51  |high_latch.vp.EQ|
0000d600  55 44 20 72 65 61 64 54  34 6c 6f 77 5f 63 6f 75  |UD readT4low_cou|
0000d610  6e 74 0d 76 7a 19 45 51  55 44 20 72 65 61 64 54  |nt.vz.EQUD readT|
0000d620  34 68 69 67 68 5f 63 6f  75 6e 74 0d 76 84 0e 45  |4high_count.v..E|
0000d630  51 55 44 20 64 75 6d 6d  79 0d 76 8e 0e 45 51 55  |QUD dummy.v..EQU|
0000d640  44 20 64 75 6d 6d 79 0d  76 98 0e 45 51 55 44 20  |D dummy.v..EQUD |
0000d650  64 75 6d 6d 79 0d 76 a2  12 45 51 55 44 20 72 65  |dummy.v..EQUD re|
0000d660  61 64 5f 69 66 72 32 0d  76 ac 12 45 51 55 44 20  |ad_ifr2.v..EQUD |
0000d670  72 65 61 64 5f 69 65 72  32 0d 76 b6 0e 45 51 55  |read_ier2.v..EQU|
0000d680  44 20 64 75 6d 6d 79 0d  76 c0 05 5d 0d 76 ca 05  |D dummy.v..].v..|
0000d690  cd 0d 76 d4 04 0d 76 de  09 5b 4f 50 54 70 0d 76  |..v...v..[OPTp.v|
0000d6a0  e8 0b 3b 20 38 30 2d 46  46 0d 76 f2 14 a4 65 71  |..; 80-FF.v...eq|
0000d6b0  75 64 28 26 38 30 2c 64  75 6d 6d 79 29 0d 76 fc  |ud(&80,dummy).v.|
0000d6c0  04 0d 77 06 0f a4 73 6f  75 6e 64 5f 6d 69 73 63  |..w...sound_misc|
0000d6d0  0d 77 10 04 0d 77 1a 0c  2e 6f 70 63 6f 64 65 37  |.w...w...opcode7|
0000d6e0  0d 77 24 11 53 57 49 20  26 31 30 30 2b 97 22 4f  |.w$.SWI &100+."O|
0000d6f0  22 0d 77 2e 11 53 57 49  20 26 31 30 30 2b 97 22  |".w..SWI &100+."|
0000d700  70 22 0d 77 38 11 53 57  49 20 26 31 30 30 2b 97  |p".w8.SWI &100+.|
0000d710  22 37 22 0d 77 42 11 53  57 49 20 26 31 30 30 2b  |"7".wB.SWI &100+|
0000d720  97 22 20 22 0d 77 4c 0f  a4 70 72 69 6e 74 28 7a  |." ".wL..print(z|
0000d730  70 63 29 0d 77 56 0d 42  20 6f 70 63 6f 64 65 37  |pc).wV.B opcode7|
0000d740  0d 77 60 04 0d 77 6a 25  a4 61 6c 69 67 6e 31 36  |.w`..wj%.align16|
0000d750  20 3b 20 66 69 74 20 69  6e 74 6f 20 63 61 63 68  | ; fit into cach|
0000d760  65 20 62 65 74 74 65 72  3f 0d 77 74 04 0d 77 7e  |e better?.wt..w~|
0000d770  0c a4 6f 70 63 6f 64 65  73 0d 77 88 04 0d 77 92  |..opcodes.w...w.|
0000d780  11 2e 70 61 74 63 68 5f  73 63 72 65 65 6e 0d 77  |..patch_screen.w|
0000d790  9c 0e 4d 4f 56 20 50 43  2c 52 31 34 0d 77 a6 10  |..MOV PC,R14.w..|
0000d7a0  2e 70 61 74 63 68 5f 70  69 78 65 6c 0d 77 b0 0e  |.patch_pixel.w..|
0000d7b0  4d 4f 56 20 50 43 2c 52  31 34 0d 77 ba 04 0d 77  |MOV PC,R14.w...w|
0000d7c0  c4 08 2e 65 6e 64 0d 77  ce 05 5d 0d 77 d8 05 ed  |...end.w..].w...|
0000d7d0  0d 77 e2 38 ff 22 4c 6f  61 64 20 3c 36 35 30 32  |.w.8."Load <6502|
0000d7e0  45 6d 24 44 69 72 3e 2e  53 52 43 2e 72 65 76 74  |Em$Dir>.SRC.revt|
0000d7f0  61 62 6c 65 20 22 2b c3  7e 28 63 6f 64 65 2b 6d  |able "+.~(code+m|
0000d800  6f 64 65 30 74 61 62 29  0d 77 ec 38 ff 22 4c 6f  |ode0tab).w.8."Lo|
0000d810  61 64 20 3c 36 35 30 32  45 6d 24 44 69 72 3e 2e  |ad <6502Em$Dir>.|
0000d820  53 52 43 2e 6d 6f 64 65  31 74 61 62 20 22 2b c3  |SRC.mode1tab "+.|
0000d830  7e 28 63 6f 64 65 2b 6d  6f 64 65 31 74 61 62 29  |~(code+mode1tab)|
0000d840  0d 77 f6 39 ff 22 4c 6f  61 64 20 3c 36 35 30 32  |.w.9."Load <6502|
0000d850  45 6d 24 44 69 72 3e 2e  53 52 43 2e 48 6d 6f 64  |Em$Dir>.SRC.Hmod|
0000d860  65 32 74 61 62 20 22 2b  c3 7e 28 63 6f 64 65 2b  |e2tab "+.~(code+|
0000d870  6d 6f 64 65 32 74 61 62  29 0d 78 00 39 ff 22 4c  |mode2tab).x.9."L|
0000d880  6f 61 64 20 3c 36 35 30  32 45 6d 24 44 69 72 3e  |oad <6502Em$Dir>|
0000d890  2e 53 52 43 2e 48 6d 6f  64 65 34 74 61 62 20 22  |.SRC.Hmode4tab "|
0000d8a0  2b c3 7e 28 63 6f 64 65  2b 6d 6f 64 65 34 74 61  |+.~(code+mode4ta|
0000d8b0  62 29 0d 78 0a 39 ff 22  4c 6f 61 64 20 3c 36 35  |b).x.9."Load <65|
0000d8c0  30 32 45 6d 24 44 69 72  3e 2e 53 52 43 2e 48 6d  |02Em$Dir>.SRC.Hm|
0000d8d0  6f 64 65 35 74 61 62 20  22 2b c3 7e 28 63 6f 64  |ode5tab "+.~(cod|
0000d8e0  65 2b 6d 6f 64 65 35 74  61 62 29 0d 78 14 04 0d  |e+mode5tab).x...|
0000d8f0  78 1e 05 e1 0d 78 28 04  0d 78 32 06 44 45 0d 78  |x....x(..x2.DE.x|
0000d900  3c 06 dd 46 0d 78 46 04  0d 78 50 04 0d 78 5a 10  |<..F.xF..xP..xZ.|
0000d910  dd a4 6c 64 72 62 32 28  52 2c 53 29 0d 78 64 15  |..ldrb2(R,S).xd.|
0000d920  e7 20 52 3c 3e 30 20 84  20 53 3c 3e 31 20 8c 20  |. R<>0 . S<>1 . |
0000d930  fa 0d 78 6e 0e e7 20 6d  61 73 74 65 72 20 8c 0d  |..xn.. master ..|
0000d940  78 78 09 5b 4f 50 54 70  0d 78 82 10 43 4d 50 20  |xx.[OPTp.x..CMP |
0000d950  53 2c 23 26 33 30 30 30  0d 78 8c 15 3b 4c 44 52  |S,#&3000.x..;LDR|
0000d960  4c 4f 42 20 52 2c 5b 6d  65 6d 2c 53 5d 0d 78 96  |LOB R,[mem,S].x.|
0000d970  16 4d 4f 56 4c 4f 20 52  2c 23 70 61 67 65 74 61  |.MOVLO R,#pageta|
0000d980  62 6c 65 0d 78 a0 19 4c  44 52 4c 4f 42 20 52 2c  |ble.x..LDRLOB R,|
0000d990  5b 52 2c 53 2c 4c 53 52  23 31 32 5d 0d 78 aa 19  |[R,S,LSR#12].x..|
0000d9a0  4c 44 52 4c 4f 42 20 52  2c 5b 53 2c 52 2c 4c 53  |LDRLOB R,[S,R,LS|
0000d9b0  4c 23 31 32 5d 0d 78 b4  14 42 4c 48 53 20 6c 64  |L#12].x..BLHS ld|
0000d9c0  72 62 5f 73 63 72 65 65  6e 0d 78 be 05 5d 0d 78  |rb_screen.x..].x|
0000d9d0  c8 05 cc 0d 78 d2 09 5b  4f 50 54 70 0d 78 dc 12  |....x..[OPTp.x..|
0000d9e0  4c 44 52 42 20 52 2c 5b  6d 65 6d 2c 53 5d 0d 78  |LDRB R,[mem,S].x|
0000d9f0  e6 10 43 4d 50 20 53 2c  23 26 46 45 30 30 0d 78  |..CMP S,#&FE00.x|
0000da00  f0 14 42 4c 48 53 20 6c  64 72 62 5f 73 68 65 69  |..BLHS ldrb_shei|
0000da10  6c 61 0d 78 fa 05 5d 0d  79 04 05 cd 0d 79 0e 07  |la.x..].y....y..|
0000da20  3d 22 22 0d 79 18 04 0d  79 22 11 dd a4 6c 64 72  |="".y...y"...ldr|
0000da30  62 31 36 28 52 2c 53 29  0d 79 2c 15 e7 20 52 3c  |b16(R,S).y,.. R<|
0000da40  3e 30 20 84 20 53 3c 3e  31 20 8c 20 fa 0d 79 36  |>0 . S<>1 . ..y6|
0000da50  0e e7 20 6d 61 73 74 65  72 20 8c 0d 79 40 09 5b  |.. master ..y@.[|
0000da60  4f 50 54 70 0d 79 4a 16  43 4d 50 20 53 2c 23 26  |OPTp.yJ.CMP S,#&|
0000da70  33 30 30 30 20 3c 3c 20  31 36 0d 79 54 1c 3b 4c  |3000 << 16.yT.;L|
0000da80  44 52 4c 4f 42 20 52 2c  5b 6d 65 6d 2c 53 2c 4c  |DRLOB R,[mem,S,L|
0000da90  53 52 23 31 36 5d 0d 79  5e 16 4d 4f 56 4c 4f 20  |SR#16].y^.MOVLO |
0000daa0  52 2c 23 70 61 67 65 74  61 62 6c 65 0d 79 68 19  |R,#pagetable.yh.|
0000dab0  4c 44 52 4c 4f 42 20 52  2c 5b 52 2c 53 2c 4c 53  |LDRLOB R,[R,S,LS|
0000dac0  52 23 32 38 5d 0d 79 72  14 4d 4f 56 4c 4f 20 52  |R#28].yr.MOVLO R|
0000dad0  2c 52 2c 4c 53 4c 23 31  32 0d 79 7c 19 4c 44 52  |,R,LSL#12.y|.LDR|
0000dae0  4c 4f 42 20 52 2c 5b 52  2c 53 2c 4c 53 52 23 31  |LOB R,[R,S,LSR#1|
0000daf0  36 5d 0d 79 86 16 42 4c  48 53 20 6c 64 72 62 31  |6].y..BLHS ldrb1|
0000db00  36 5f 73 63 72 65 65 6e  0d 79 90 05 5d 0d 79 9a  |6_screen.y..].y.|
0000db10  05 cc 0d 79 a4 09 5b 4f  50 54 70 0d 79 ae 19 4c  |...y..[OPTp.y..L|
0000db20  44 52 42 20 52 2c 5b 6d  65 6d 2c 53 2c 4c 53 52  |DRB R,[mem,S,LSR|
0000db30  23 31 36 5d 0d 79 b8 16  43 4d 50 20 53 2c 23 26  |#16].y..CMP S,#&|
0000db40  46 45 30 30 20 3c 3c 20  31 36 0d 79 c2 16 42 4c  |FE00 << 16.y..BL|
0000db50  48 53 20 6c 64 72 62 31  36 5f 73 68 65 69 6c 61  |HS ldrb16_sheila|
0000db60  0d 79 cc 05 5d 0d 79 d6  05 cd 0d 79 e0 07 3d 22  |.y..].y....y..="|
0000db70  22 0d 79 ea 04 0d 79 f4  0f dd a4 73 74 72 62 28  |".y...y....strb(|
0000db80  52 2c 53 29 0d 79 fe 15  e7 20 52 3c 3e 30 20 84  |R,S).y... R<>0 .|
0000db90  20 53 3c 3e 31 20 8c 20  85 0d 7a 08 09 5b 4f 50  | S<>1 . ..z..[OP|
0000dba0  54 70 0d 7a 12 1e 43 4d  50 20 53 2c 46 2c 4c 53  |Tp.z..CMP S,F,LS|
0000dbb0  52 23 31 36 20 3b 20 77  72 61 70 5f 61 64 64 72  |R#16 ; wrap_addr|
0000dbc0  0d 7a 1c 15 3b 53 54 52  4c 54 42 20 52 2c 5b 6d  |.z..;STRLTB R,[m|
0000dbd0  65 6d 2c 53 5d 0d 7a 26  17 4d 4f 56 4c 54 20 52  |em,S].z&.MOVLT R|
0000dbe0  32 2c 23 70 61 67 65 74  61 62 6c 65 0d 7a 30 1b  |2,#pagetable.z0.|
0000dbf0  4c 44 52 4c 54 42 20 52  32 2c 5b 52 32 2c 53 2c  |LDRLTB R2,[R2,S,|
0000dc00  4c 53 52 23 31 32 5d 0d  7a 3a 1a 53 54 52 4c 54  |LSR#12].z:.STRLT|
0000dc10  42 20 52 2c 5b 53 2c 52  32 2c 4c 53 4c 23 31 32  |B R,[S,R2,LSL#12|
0000dc20  5d 0d 7a 44 0d 42 4c 47  45 20 73 74 72 62 0d 7a  |].zD.BLGE strb.z|
0000dc30  4e 05 5d 0d 7a 58 07 3d  22 22 0d 7a 62 04 0d 7a  |N.].zX.="".zb..z|
0000dc40  6c 11 dd a4 73 74 72 62  31 36 28 52 2c 53 29 0d  |l...strb16(R,S).|
0000dc50  7a 76 15 e7 20 52 3c 3e  30 20 84 20 53 3c 3e 31  |zv.. R<>0 . S<>1|
0000dc60  20 8c 20 85 0d 7a 80 09  5b 4f 50 54 70 0d 7a 8a  | . ..z..[OPTp.z.|
0000dc70  12 4d 4f 56 20 53 2c 53  2c 4c 53 52 23 31 36 0d  |.MOV S,S,LSR#16.|
0000dc80  7a 94 0e a4 73 74 72 62  28 52 2c 53 29 0d 7a 9e  |z...strb(R,S).z.|
0000dc90  05 5d 0d 7a a8 07 3d 22  22 0d 7a b2 04 0d 7a bc  |.].z..="".z...z.|
0000dca0  0e dd a4 73 68 6f 77 72  65 67 73 0d 7a c6 09 5b  |...showregs.z..[|
0000dcb0  4f 50 54 70 0d 7a d0 0f  a4 70 72 69 6e 74 28 7a  |OPTp.z...print(z|
0000dcc0  70 63 29 0d 7a da 0d a4  70 72 69 6e 74 28 41 29  |pc).z...print(A)|
0000dcd0  0d 7a e4 0d a4 70 72 69  6e 74 28 58 29 0d 7a ee  |.z...print(X).z.|
0000dce0  0d a4 70 72 69 6e 74 28  59 29 0d 7a f8 0e a4 70  |..print(Y).z...p|
0000dcf0  72 69 6e 74 28 53 50 29  0d 7b 02 0d a4 70 72 69  |rint(SP).{...pri|
0000dd00  6e 74 28 46 29 0d 7b 0c  16 41 44 44 20 52 31 32  |nt(F).{..ADD R12|
0000dd10  2c 6d 65 6d 2c 23 26 44  46 30 30 0d 7b 16 17 4c  |,mem,#&DF00.{..L|
0000dd20  44 52 42 20 52 31 32 2c  5b 52 31 32 2c 23 26 44  |DRB R12,[R12,#&D|
0000dd30  41 5d 0d 7b 20 16 4d 4f  56 20 52 31 32 2c 52 31  |A].{ .MOV R12,R1|
0000dd40  32 2c 4c 53 4c 23 32 34  0d 7b 2a 0f a4 70 72 69  |2,LSL#24.{*..pri|
0000dd50  6e 74 32 28 31 32 29 0d  7b 34 0c 53 57 49 20 26  |nt2(12).{4.SWI &|
0000dd60  31 30 41 0d 7b 3e 15 3b  53 57 49 20 22 4f 53 5f  |10A.{>.;SWI "OS_|
0000dd70  4e 65 77 4c 69 6e 65 22  0d 7b 48 05 5d 0d 7b 52  |NewLine".{H.].{R|
0000dd80  07 3d 22 22 0d 7b 5c 04  0d 7b 66 0e dd a4 70 72  |.="".{\..{f...pr|
0000dd90  69 6e 74 28 52 29 0d 7b  70 0a c8 8e 20 52 20 ca  |int(R).{p... R .|
0000dda0  0d 7b 7a 19 c9 20 7a 70  63 20 3a 20 41 24 3d a4  |.{z.. zpc : A$=.|
0000ddb0  70 72 69 6e 74 34 28 52  29 0d 7b 84 2e c9 20 46  |print4(R).{... F|
0000ddc0  20 20 20 3a 20 5b 4f 50  54 70 3a 4d 4f 56 20 52  |   : [OPTp:MOV R|
0000ddd0  32 2c 46 2c 4c 53 4c 23  32 34 3a a4 70 72 69 6e  |2,F,LSL#24:.prin|
0000dde0  74 32 28 32 29 3a 5d 0d  7b 8e 05 7f 0d 7b 98 11  |t2(2):].{....{..|
0000ddf0  41 24 3d a4 70 72 69 6e  74 32 28 52 29 0d 7b a2  |A$=.print2(R).{.|
0000de00  05 cb 0d 7b ac 07 3d 22  22 0d 7b b6 04 0d 7b c0  |...{..="".{...{.|
0000de10  19 c9 20 41 20 20 20 3a  20 41 24 3d a4 70 72 69  |.. A   : A$=.pri|
0000de20  6e 74 32 28 52 29 0d 7b  ca 19 c9 20 58 20 20 20  |nt2(R).{... X   |
0000de30  3a 20 41 24 3d a4 70 72  69 6e 74 32 28 52 29 0d  |: A$=.print2(R).|
0000de40  7b d4 19 c9 20 59 20 20  20 3a 20 41 24 3d a4 70  |{... Y   : A$=.p|
0000de50  72 69 6e 74 32 28 52 29  0d 7b de 2d c9 20 53 50  |rint2(R).{.-. SP|
0000de60  20 20 3a 20 5b 4f 50 54  70 3a 53 57 49 20 26 31  |  : [OPTp:SWI &1|
0000de70  30 30 2b 97 22 31 22 3a  a4 70 72 69 6e 74 32 28  |00+."1":.print2(|
0000de80  53 50 29 3a 5d 0d 7b e8  1a c9 20 46 20 20 20 3a  |SP):].{... F   :|
0000de90  20 41 24 3d a4 70 72 69  6e 74 66 6c 61 67 73 0d  | A$=.printflags.|
0000dea0  7b f2 05 cb 0d 7b fc 07  3d 22 22 0d 7c 06 04 0d  |{....{..="".|...|
0000deb0  7c 10 10 dd a4 70 72 69  6e 74 66 6c 61 67 73 0d  ||....printflags.|
0000dec0  7c 1a 09 5b 4f 50 54 70  0d 7c 24 34 54 53 54 20  ||..[OPTp.|$4TST |
0000ded0  46 2c 23 25 31 3c 3c 37  20 3a 20 53 57 49 45 51  |F,#%1<<7 : SWIEQ|
0000dee0  20 26 31 30 30 2b 97 22  6e 22 20 3a 20 53 57 49  | &100+."n" : SWI|
0000def0  4e 45 20 26 31 30 30 2b  97 22 4e 22 0d 7c 2e 34  |NE &100+."N".|.4|
0000df00  54 53 54 20 46 2c 23 25  31 3c 3c 36 20 3a 20 53  |TST F,#%1<<6 : S|
0000df10  57 49 45 51 20 26 31 30  30 2b 97 22 76 22 20 3a  |WIEQ &100+."v" :|
0000df20  20 53 57 49 4e 45 20 26  31 30 30 2b 97 22 56 22  | SWINE &100+."V"|
0000df30  0d 7c 38 34 54 53 54 20  46 2c 23 25 31 3c 3c 35  |.|84TST F,#%1<<5|
0000df40  20 3a 20 53 57 49 45 51  20 26 31 30 30 2b 97 22  | : SWIEQ &100+."|
0000df50  30 22 20 3a 20 53 57 49  4e 45 20 26 31 30 30 2b  |0" : SWINE &100+|
0000df60  97 22 31 22 0d 7c 42 34  54 53 54 20 46 2c 23 25  |."1".|B4TST F,#%|
0000df70  31 3c 3c 34 20 3a 20 53  57 49 45 51 20 26 31 30  |1<<4 : SWIEQ &10|
0000df80  30 2b 97 22 62 22 20 3a  20 53 57 49 4e 45 20 26  |0+."b" : SWINE &|
0000df90  31 30 30 2b 97 22 42 22  0d 7c 4c 34 54 53 54 20  |100+."B".|L4TST |
0000dfa0  46 2c 23 25 31 3c 3c 33  20 3a 20 53 57 49 45 51  |F,#%1<<3 : SWIEQ|
0000dfb0  20 26 31 30 30 2b 97 22  64 22 20 3a 20 53 57 49  | &100+."d" : SWI|
0000dfc0  4e 45 20 26 31 30 30 2b  97 22 44 22 0d 7c 56 34  |NE &100+."D".|V4|
0000dfd0  54 53 54 20 46 2c 23 25  31 3c 3c 32 20 3a 20 53  |TST F,#%1<<2 : S|
0000dfe0  57 49 45 51 20 26 31 30  30 2b 97 22 69 22 20 3a  |WIEQ &100+."i" :|
0000dff0  20 53 57 49 4e 45 20 26  31 30 30 2b 97 22 49 22  | SWINE &100+."I"|
0000e000  0d 7c 60 34 54 53 54 20  46 2c 23 25 31 3c 3c 31  |.|`4TST F,#%1<<1|
0000e010  20 3a 20 53 57 49 45 51  20 26 31 30 30 2b 97 22  | : SWIEQ &100+."|
0000e020  7a 22 20 3a 20 53 57 49  4e 45 20 26 31 30 30 2b  |z" : SWINE &100+|
0000e030  97 22 5a 22 0d 7c 6a 34  54 53 54 20 46 2c 23 25  |."Z".|j4TST F,#%|
0000e040  31 3c 3c 30 20 3a 20 53  57 49 45 51 20 26 31 30  |1<<0 : SWIEQ &10|
0000e050  30 2b 97 22 63 22 20 3a  20 53 57 49 4e 45 20 26  |0+."c" : SWINE &|
0000e060  31 30 30 2b 97 22 43 22  0d 7c 74 0c 53 57 49 20  |100+."C".|t.SWI |
0000e070  26 31 32 30 0d 7c 7e 05  5d 0d 7c 88 07 3d 22 22  |&120.|~.].|..=""|
0000e080  0d 7c 92 04 0d 7c 9c 0f  dd a4 70 72 69 6e 74 32  |.|...|....print2|
0000e090  28 52 29 0d 7c a6 07 ea  49 25 0d 7c b0 09 5b 4f  |(R).|...I%.|..[O|
0000e0a0  50 54 70 0d 7c ba 0c 4d  4f 56 20 52 31 2c 52 0d  |PTp.|..MOV R1,R.|
0000e0b0  7c c4 05 5d 0d 7c ce 0d  e3 49 25 3d 30 20 b8 20  ||..].|...I%=0 . |
0000e0c0  31 0d 7c d8 0a 5b 4f 50  54 20 70 0d 7c e2 14 4d  |1.|..[OPT p.|..M|
0000e0d0  4f 56 20 52 31 2c 52 31  2c 52 4f 52 23 32 38 0d  |OV R1,R1,ROR#28.|
0000e0e0  7c ec 0f 80 20 52 30 2c  52 31 2c 23 26 46 0d 7c  ||... R0,R1,#&F.||
0000e0f0  f6 0e 43 4d 50 20 52 30  2c 23 31 30 0d 7d 00 12  |..CMP R0,#10.}..|
0000e100  41 44 44 47 45 20 52 30  2c 52 30 2c 23 37 0d 7d  |ADDGE R0,R0,#7.}|
0000e110  0a 11 41 44 44 20 52 30  2c 52 30 2c 23 34 38 0d  |..ADD R0,R0,#48.|
0000e120  7d 14 13 53 57 49 20 22  4f 53 5f 57 72 69 74 65  |}..SWI "OS_Write|
0000e130  43 22 0d 7d 1e 05 5d 0d  7d 28 05 ed 0d 7d 32 09  |C".}..].}(...}2.|
0000e140  5b 4f 50 54 70 0d 7d 3c  0c 53 57 49 20 26 31 32  |[OPTp.}<.SWI &12|
0000e150  30 0d 7d 46 05 5d 0d 7d  50 07 3d 22 22 0d 7d 5a  |0.}F.].}P.="".}Z|
0000e160  04 0d 7d 64 0f dd a4 70  72 69 6e 74 34 28 52 29  |..}d...print4(R)|
0000e170  0d 7d 6e 07 ea 49 25 0d  7d 78 09 5b 4f 50 54 70  |.}n..I%.}x.[OPTp|
0000e180  0d 7d 82 0c 4d 4f 56 20  52 31 2c 52 0d 7d 8c 05  |.}..MOV R1,R.}..|
0000e190  5d 0d 7d 96 0d e3 49 25  3d 30 20 b8 20 33 0d 7d  |].}...I%=0 . 3.}|
0000e1a0  a0 0a 5b 4f 50 54 20 70  0d 7d aa 14 4d 4f 56 20  |..[OPT p.}..MOV |
0000e1b0  52 31 2c 52 31 2c 52 4f  52 23 32 38 0d 7d b4 0f  |R1,R1,ROR#28.}..|
0000e1c0  80 20 52 30 2c 52 31 2c  23 26 46 0d 7d be 0e 43  |. R0,R1,#&F.}..C|
0000e1d0  4d 50 20 52 30 2c 23 31  30 0d 7d c8 12 41 44 44  |MP R0,#10.}..ADD|
0000e1e0  47 45 20 52 30 2c 52 30  2c 23 37 0d 7d d2 11 41  |GE R0,R0,#7.}..A|
0000e1f0  44 44 20 52 30 2c 52 30  2c 23 34 38 0d 7d dc 13  |DD R0,R0,#48.}..|
0000e200  53 57 49 20 22 4f 53 5f  57 72 69 74 65 43 22 0d  |SWI "OS_WriteC".|
0000e210  7d e6 05 5d 0d 7d f0 05  ed 0d 7d fa 09 5b 4f 50  |}..].}....}..[OP|
0000e220  54 70 0d 7e 04 0c 53 57  49 20 26 31 32 30 0d 7e  |Tp.~..SWI &120.~|
0000e230  0e 05 5d 0d 7e 18 07 3d  22 22 0d 7e 22 04 0d 7e  |..].~..="".~"..~|
0000e240  2c 10 dd a4 70 72 69 6e  74 33 32 28 52 29 0d 7e  |,...print32(R).~|
0000e250  36 07 ea 49 25 0d 7e 40  09 5b 4f 50 54 70 0d 7e  |6..I%.~@.[OPTp.~|
0000e260  4a 0c 4d 4f 56 20 52 31  2c 52 0d 7e 54 05 5d 0d  |J.MOV R1,R.~T.].|
0000e270  7e 5e 0e e3 49 25 3d 30  20 b8 20 33 31 0d 7e 68  |~^..I%=0 . 31.~h|
0000e280  0a 5b 4f 50 54 20 70 0d  7e 72 14 4d 4f 56 20 52  |.[OPT p.~r.MOV R|
0000e290  31 2c 52 31 2c 52 4f 52  23 32 38 0d 7e 7c 0f 80  |1,R1,ROR#28.~|..|
0000e2a0  20 52 30 2c 52 31 2c 23  26 46 0d 7e 86 0e 43 4d  | R0,R1,#&F.~..CM|
0000e2b0  50 20 52 30 2c 23 31 30  0d 7e 90 12 41 44 44 47  |P R0,#10.~..ADDG|
0000e2c0  45 20 52 30 2c 52 30 2c  23 37 0d 7e 9a 11 41 44  |E R0,R0,#7.~..AD|
0000e2d0  44 20 52 30 2c 52 30 2c  23 34 38 0d 7e a4 13 53  |D R0,R0,#48.~..S|
0000e2e0  57 49 20 22 4f 53 5f 57  72 69 74 65 43 22 0d 7e  |WI "OS_WriteC".~|
0000e2f0  ae 05 5d 0d 7e b8 05 ed  0d 7e c2 09 5b 4f 50 54  |..].~....~..[OPT|
0000e300  70 0d 7e cc 0c 53 57 49  20 26 31 32 30 0d 7e d6  |p.~..SWI &120.~.|
0000e310  05 5d 0d 7e e0 07 3d 22  22 0d 7e ea 04 0d 7e f4  |.].~..="".~...~.|
0000e320  10 dd a4 70 72 69 6e 74  73 28 41 24 29 0d 7e fe  |...prints(A$).~.|
0000e330  09 5b 4f 50 54 70 0d 7f  08 13 53 57 49 20 22 4f  |.[OPTp....SWI "O|
0000e340  53 5f 57 72 69 74 65 53  22 0d 7f 12 0b 45 51 55  |S_WriteS"....EQU|
0000e350  53 20 41 24 0d 7f 1c 0b  45 51 55 42 20 31 30 0d  |S A$....EQUB 10.|
0000e360  7f 26 0b 45 51 55 42 20  31 33 0d 7f 30 0a 45 51  |.&.EQUB 13..0.EQ|
0000e370  55 42 20 30 0d 7f 3a 09  41 4c 49 47 4e 0d 7f 44  |UB 0..:.ALIGN..D|
0000e380  05 5d 0d 7f 4e 07 3d 22  22 0d 7f 58 04 0d 7f 62  |.]..N.=""..X...b|
0000e390  0f dd a4 75 6e 64 6f 63  28 41 25 29 0d 7f 6c 15  |...undoc(A%)..l.|
0000e3a0  e7 20 6f 70 63 6f 64 65  25 3c 3e 41 25 20 8c 20  |. opcode%<>A% . |
0000e3b0  fa 0d 7f 76 09 5b 4f 50  54 70 0d 7f 80 11 3b 54  |...v.[OPTp....;T|
0000e3c0  53 54 20 46 2c 23 25 31  30 30 30 0d 7f 8a 14 3b  |ST F,#%1000....;|
0000e3d0  53 57 49 45 51 20 26 31  30 30 2b 97 22 64 22 0d  |SWIEQ &100+."d".|
0000e3e0  7f 94 14 3b 53 57 49 4e  45 20 26 31 30 30 2b 97  |...;SWINE &100+.|
0000e3f0  22 44 22 0d 7f 9e 04 0d  7f a8 21 3b 53 57 49 20  |"D".......!;SWI |
0000e400  26 31 30 30 2b 97 28 c0  c2 22 30 22 2b c3 7e 41  |&100+.(.."0"+.~A|
0000e410  25 2c 32 29 2c 31 29 29  0d 7f b2 19 3b 53 57 49  |%,2),1))....;SWI|
0000e420  20 26 31 30 30 2b 97 28  c2 c3 7e 41 25 2c 31 29  | &100+.(..~A%,1)|
0000e430  29 0d 7f bc 12 3b 53 57  49 20 26 31 30 30 2b 97  |)....;SWI &100+.|
0000e440  22 20 22 0d 7f c6 10 3b  a4 70 72 69 6e 74 28 7a  |" "....;.print(z|
0000e450  70 63 29 0d 7f d0 21 3b  53 57 49 20 26 31 30 30  |pc)...!;SWI &100|
0000e460  2b 97 22 20 22 3a 3b 53  57 49 20 26 31 30 30 2b  |+." ":;SWI &100+|
0000e470  97 22 20 22 0d 7f da 04  0d 7f e4 20 3b 4d 4f 56  |." "....... ;MOV|
0000e480  20 52 30 2c 23 31 35 20  3a 20 3b 53 57 49 20 22  | R0,#15 : ;SWI "|
0000e490  4f 53 5f 42 79 74 65 22  0d 7f ee 0a 3b 53 57 49  |OS_Byte"....;SWI|
0000e4a0  20 34 0d 7f f8 05 5d 0d  80 02 07 3d 22 22 0d 80  | 4....]....=""..|
0000e4b0  0c 04 0d 80 16 11 dd a4  65 71 75 64 28 41 25 2c  |........equd(A%,|
0000e4c0  42 25 29 0d 80 20 07 ea  49 25 0d 80 2a 0e e3 49  |B%).. ..I%..*..I|
0000e4d0  25 3d 31 20 b8 20 41 25  0d 80 34 09 5b 4f 50 54  |%=1 . A%..4.[OPT|
0000e4e0  70 0d 80 3e 0b 45 51 55  44 20 42 25 0d 80 48 05  |p..>.EQUD B%..H.|
0000e4f0  5d 0d 80 52 05 ed 0d 80  5c 07 3d 22 22 0d 80 66  |]..R....\.=""..f|
0000e500  04 0d 80 70 12 dd a4 64  6f 5f 69 6e 74 65 72 72  |...p...do_interr|
0000e510  75 70 74 0d 80 7a 09 5b  4f 50 54 70 0d 80 84 15  |upt..z.[OPTp....|
0000e520  4d 4f 56 20 52 30 2c 7a  70 63 2c 4c 53 52 23 32  |MOV R0,zpc,LSR#2|
0000e530  34 0d 80 8e 0c a4 70 75  73 68 28 30 29 0d 80 98  |4.....push(0)...|
0000e540  15 4d 4f 56 20 52 30 2c  7a 70 63 2c 4c 53 52 23  |.MOV R0,zpc,LSR#|
0000e550  31 36 0d 80 a2 0c a4 70  75 73 68 28 30 29 0d 80  |16.....push(0)..|
0000e560  ac 24 42 49 43 20 46 2c  46 2c 23 25 31 30 30 30  |.$BIC F,F,#%1000|
0000e570  30 20 3b 20 63 6c 65 61  72 20 42 52 4b 20 66 6c  |0 ; clear BRK fl|
0000e580  61 67 0d 80 b6 0c a4 70  75 73 68 28 46 29 0d 80  |ag.....push(F)..|
0000e590  c0 19 84 52 20 46 2c 46  2c 23 25 31 30 30 20 3b  |...R F,F,#%100 ;|
0000e5a0  20 21 21 21 21 21 21 0d  80 ca 22 4d 4f 56 20 52  | !!!!!!..."MOV R|
0000e5b0  30 2c 23 26 46 46 30 30  20 3a 20 41 44 44 20 52  |0,#&FF00 : ADD R|
0000e5c0  30 2c 52 30 2c 23 26 46  45 0d 80 d4 14 4c 44 52  |0,R0,#&FE....LDR|
0000e5d0  20 7a 70 63 2c 5b 6d 65  6d 2c 52 30 5d 0d 80 de  | zpc,[mem,R0]...|
0000e5e0  16 4d 4f 56 20 7a 70 63  2c 7a 70 63 2c 4c 53 4c  |.MOV zpc,zpc,LSL|
0000e5f0  23 31 36 0d 80 e8 05 5d  0d 80 f2 07 3d 22 22 0d  |#16....]....="".|
0000e600  80 fc 04 0d 81 06 17 dd  a4 64 69 76 6d 6f 64 28  |.........divmod(|
0000e610  41 2c 42 2c 43 2c 44 2c  45 29 0d 81 10 0b 64 69  |A,B,C,D,E)....di|
0000e620  76 25 2b 3d 31 0d 81 1a  09 5b 4f 50 54 70 0d 81  |v%+=1....[OPTp..|
0000e630  24 0c 4d 4f 56 20 43 2c  23 31 0d 81 2e 0c 4d 4f  |$.MOV C,#1....MO|
0000e640  56 20 44 2c 23 30 0d 81  38 0b 4d 4f 56 20 45 2c  |V D,#0..8.MOV E,|
0000e650  42 0d 81 42 13 2e 64 69  76 6c 6f 6f 70 31 28 64  |B..B..divloop1(d|
0000e660  69 76 25 29 0d 81 4c 11  4d 4f 56 20 42 2c 42 2c  |iv%)..L.MOV B,B,|
0000e670  4c 53 4c 23 31 0d 81 56  11 4d 4f 56 20 43 2c 43  |LSL#1..V.MOV C,C|
0000e680  2c 4c 53 4c 23 31 0d 81  60 0b 43 4d 50 20 42 2c  |,LSL#1..`.CMP B,|
0000e690  41 0d 81 6a 16 42 4c 4f  20 64 69 76 6c 6f 6f 70  |A..j.BLO divloop|
0000e6a0  31 28 64 69 76 25 29 0d  81 74 04 0d 81 7e 13 2e  |1(div%)..t...~..|
0000e6b0  64 69 76 6c 6f 6f 70 32  28 64 69 76 25 29 0d 81  |divloop2(div%)..|
0000e6c0  88 1f 43 4d 50 20 42 2c  41 20 3a 20 42 4c 53 20  |..CMP B,A : BLS |
0000e6d0  64 69 76 6a 75 6d 70 28  64 69 76 25 29 0d 81 92  |divjump(div%)...|
0000e6e0  1f 43 4d 50 20 42 2c 45  20 3a 20 42 4c 53 20 64  |.CMP B,E : BLS d|
0000e6f0  69 76 6a 75 6d 70 28 64  69 76 25 29 0d 81 9c 11  |ivjump(div%)....|
0000e700  4d 4f 56 20 42 2c 42 2c  4c 53 52 23 31 0d 81 a6  |MOV B,B,LSR#1...|
0000e710  11 4d 4f 56 20 43 2c 43  2c 4c 53 52 23 31 0d 81  |.MOV C,C,LSR#1..|
0000e720  b0 14 42 20 64 69 76 6c  6f 6f 70 32 28 64 69 76  |..B divloop2(div|
0000e730  25 29 0d 81 ba 12 2e 64  69 76 6a 75 6d 70 28 64  |%).....divjump(d|
0000e740  69 76 25 29 0d 81 c4 0b  43 4d 50 20 42 2c 41 0d  |iv%)....CMP B,A.|
0000e750  81 ce 0f 53 55 42 4c 53  20 41 2c 41 2c 42 0d 81  |...SUBLS A,A,B..|
0000e760  d8 0f 41 44 44 4c 53 20  44 2c 44 2c 43 0d 81 e2  |..ADDLS D,D,C...|
0000e770  0b 43 4d 50 20 42 2c 45  0d 81 ec 16 42 48 49 20  |.CMP B,E....BHI |
0000e780  64 69 76 6c 6f 6f 70 32  28 64 69 76 25 29 0d 81  |divloop2(div%)..|
0000e790  f6 05 5d 0d 82 00 07 3d  22 22 0d 82 0a 04 0d 82  |..]....=""......|
0000e7a0  14 0c dd a4 73 68 61 64  6f 77 0d 82 1e 0e e7 20  |....shadow..... |
0000e7b0  6d 61 73 74 65 72 20 8c  0d 82 28 09 5b 4f 50 54  |master ...(.[OPT|
0000e7c0  70 0d 82 32 19 4c 44 52  42 20 52 32 2c 5b 6d 65  |p..2.LDRB R2,[me|
0000e7d0  6d 2c 23 41 43 43 43 4f  4e 5d 0d 82 3c 15 3b 82  |m,#ACCCON]..<.;.|
0000e7e0  20 52 32 2c 52 32 2c 52  32 2c 4c 53 52 23 32 0d  | R2,R2,R2,LSR#2.|
0000e7f0  82 46 0e 54 53 54 20 52  32 2c 23 25 31 0d 82 50  |.F.TST R2,#%1..P|
0000e800  19 53 55 42 4e 45 20 52  31 33 2c 6d 65 6d 2c 23  |.SUBNE R13,mem,#|
0000e810  26 31 33 30 30 30 0d 82  5a 0e ec 51 20 52 31 33  |&13000..Z..Q R13|
0000e820  2c 6d 65 6d 0d 82 64 05  5d 0d 82 6e 05 cc 0d 82  |,mem..d.]..n....|
0000e830  78 09 5b 4f 50 54 70 0d  82 82 0f 4d 4f 56 20 52  |x.[OPTp....MOV R|
0000e840  31 33 2c 6d 65 6d 0d 82  8c 05 5d 0d 82 96 05 cd  |13,mem....].....|
0000e850  0d 82 a0 07 3d 22 22 0d  82 aa 15 dd f2 63 6c 65  |....=""......cle|
0000e860  61 72 6d 65 6d 28 53 25  2c 45 25 29 0d 82 b4 0d  |armem(S%,E%)....|
0000e870  50 25 3d 62 75 66 66 65  72 0d 82 be 09 5b 4f 50  |P%=buffer....[OP|
0000e880  54 32 0d 82 c8 14 45 51  55 44 20 53 25 20 3b 20  |T2....EQUD S% ; |
0000e890  6d 65 6d 6f 72 79 0d 82  d2 1a 45 51 55 44 20 45  |memory....EQUD E|
0000e8a0  25 20 3b 20 6d 65 6d 6f  72 79 2b 26 38 30 30 30  |% ; memory+&8000|
0000e8b0  0d 82 dc 0a 2e 63 6c 65  61 72 0d 82 e6 0d 4d 4f  |.....clear....MO|
0000e8c0  56 20 52 30 2c 23 30 0d  82 f0 11 4c 44 52 20 52  |V R0,#0....LDR R|
0000e8d0  31 2c 62 75 66 66 65 72  0d 82 fa 13 4c 44 52 20  |1,buffer....LDR |
0000e8e0  52 32 2c 62 75 66 66 65  72 2b 34 0d 83 04 09 2e  |R2,buffer+4.....|
0000e8f0  6c 6f 6f 70 0d 83 0e 12  53 54 52 20 52 30 2c 5b  |loop....STR R0,[|
0000e900  52 31 5d 2c 23 34 0d 83  18 0d 43 4d 50 20 52 31  |R1],#4....CMP R1|
0000e910  2c 52 32 0d 83 22 0c 42  4e 45 20 6c 6f 6f 70 0d  |,R2..".BNE loop.|
0000e920  83 2c 0e 4d 4f 56 20 50  43 2c 52 31 34 0d 83 36  |.,.MOV PC,R14..6|
0000e930  05 5d 0d 83 40 0b d6 20  63 6c 65 61 72 0d 83 4a  |.]..@.. clear..J|
0000e940  05 e1 0d 83 54 04 0d 83  5e 0c dd a4 66 65 74 63  |....T...^...fetc|
0000e950  68 32 0d 83 68 09 5b 4f  50 54 70 0d 83 72 1d 3b  |h2..h.[OPTp..r.;|
0000e960  4c 44 52 42 20 52 32 2c  5b 6d 65 6d 2c 7a 70 63  |LDRB R2,[mem,zpc|
0000e970  2c 4c 53 52 23 31 36 5d  0d 83 7c 1a 3b 41 44 44  |,LSR#16]..|.;ADD|
0000e980  20 50 43 2c 74 61 62 6c  65 2c 52 32 2c 4c 53 4c  | PC,table,R2,LSL|
0000e990  23 38 0d 83 86 15 4d 4f  56 20 52 32 2c 23 70 61  |#8....MOV R2,#pa|
0000e9a0  67 65 74 61 62 6c 65 0d  83 90 1b 4c 44 52 42 20  |getable....LDRB |
0000e9b0  52 32 2c 5b 52 32 2c 7a  70 63 2c 4c 53 52 23 32  |R2,[R2,zpc,LSR#2|
0000e9c0  38 5d 0d 83 9a 14 4d 4f  56 20 52 32 2c 52 32 2c  |8]....MOV R2,R2,|
0000e9d0  4c 53 4c 23 31 32 0d 83  a4 1b 4c 44 52 42 20 52  |LSL#12....LDRB R|
0000e9e0  32 2c 5b 52 32 2c 7a 70  63 2c 4c 53 52 23 31 36  |2,[R2,zpc,LSR#16|
0000e9f0  5d 0d 83 ae 19 41 44 44  20 50 43 2c 74 61 62 6c  |]....ADD PC,tabl|
0000ea00  65 2c 52 32 2c 4c 53 4c  23 38 0d 83 b8 04 0d 83  |e,R2,LSL#8......|
0000ea10  c2 05 5d 0d 83 cc 07 3d  22 22 0d 83 d6 04 0d 83  |..]....=""......|
0000ea20  e0 13 dd a4 66 65 74 63  68 33 28 4e 25 2c 54 25  |....fetch3(N%,T%|
0000ea30  29 0d 83 ea 2b e7 20 4e  25 3c 3e 30 20 8c 20 5b  |)...+. N%<>0 . [|
0000ea40  4f 50 54 70 3a 41 44 44  20 7a 70 63 2c 7a 70 63  |OPTp:ADD zpc,zpc|
0000ea50  2c 23 4e 25 20 3c 3c 20  31 36 3a 5d 0d 83 f4 09  |,#N% << 16:]....|
0000ea60  5b 4f 50 54 70 0d 83 fe  0e a4 73 68 6f 77 72 65  |[OPTp.....showre|
0000ea70  67 73 32 0d 84 08 16 53  55 42 53 20 74 69 6d 65  |gs2....SUBS time|
0000ea80  2c 74 69 6d 65 2c 23 54  25 0d 84 12 1f 3b 4c 44  |,time,#T%....;LD|
0000ea90  52 50 4c 42 20 52 32 2c  5b 6d 65 6d 2c 7a 70 63  |RPLB R2,[mem,zpc|
0000eaa0  2c 4c 53 52 23 31 36 5d  0d 84 1c 1c 3b 41 44 44  |,LSR#16]....;ADD|
0000eab0  50 4c 20 50 43 2c 74 61  62 6c 65 2c 52 32 2c 4c  |PL PC,table,R2,L|
0000eac0  53 4c 23 38 0d 84 26 17  4d 4f 56 50 4c 20 52 32  |SL#8..&.MOVPL R2|
0000ead0  2c 23 70 61 67 65 74 61  62 6c 65 0d 84 30 1d 4c  |,#pagetable..0.L|
0000eae0  44 52 50 4c 42 20 52 32  2c 5b 52 32 2c 7a 70 63  |DRPLB R2,[R2,zpc|
0000eaf0  2c 4c 53 52 23 32 38 5d  0d 84 3a 16 4d 4f 56 50  |,LSR#28]..:.MOVP|
0000eb00  4c 20 52 32 2c 52 32 2c  4c 53 4c 23 31 32 0d 84  |L R2,R2,LSL#12..|
0000eb10  44 1d 4c 44 52 50 4c 42  20 52 32 2c 5b 52 32 2c  |D.LDRPLB R2,[R2,|
0000eb20  7a 70 63 2c 4c 53 52 23  31 36 5d 0d 84 4e 1b 41  |zpc,LSR#16]..N.A|
0000eb30  44 44 50 4c 20 50 43 2c  74 61 62 6c 65 2c 52 32  |DDPL PC,table,R2|
0000eb40  2c 4c 53 4c 23 38 0d 84  58 0c 42 20 66 65 74 63  |,LSL#8..X.B fetc|
0000eb50  68 32 0d 84 62 05 5d 0d  84 6c 07 3d 22 22 0d 84  |h2..b.]..l.=""..|
0000eb60  76 04 0d 84 80 12 dd a4  66 65 74 63 68 28 4e 25  |v.......fetch(N%|
0000eb70  2c 54 25 29 0d 84 8a 15  51 24 3d a4 66 65 74 63  |,T%)....Q$=.fetc|
0000eb80  68 33 28 4e 25 2c 54 25  29 0d 84 94 0e 6f 70 63  |h3(N%,T%)....opc|
0000eb90  6f 64 65 25 2b 3d 31 0d  84 9e 13 e7 20 62 63 64  |ode%+=1..... bcd|
0000eba0  5f 6c 6f 6f 70 25 3d 30  20 8c 0d 84 a8 1d e7 20  |_loop%=0 ...... |
0000ebb0  6f 70 63 6f 64 65 28 6f  70 63 6f 64 65 25 2d 31  |opcode(opcode%-1|
0000ebc0  29 3d 30 20 8c 20 fa 0d  84 b2 22 e7 20 6f 70 63  |)=0 . ....". opc|
0000ebd0  6f 64 65 28 6f 70 63 6f  64 65 25 29 3c 3e 30 20  |ode(opcode%)<>0 |
0000ebe0  80 20 70 3d 30 20 8c 20  fa 0d 84 bc 2b e7 20 50  |. p=0 . ....+. P|
0000ebf0  25 2d 6f 70 63 6f 64 65  28 30 29 3e 6f 70 63 6f  |%-opcode(0)>opco|
0000ec00  64 65 25 2a 34 2a 36 34  20 8c 20 f1 7e 6f 70 63  |de%*4*64 . .~opc|
0000ec10  6f 64 65 25 0d 84 c6 1d  50 25 3d 6f 70 63 6f 64  |ode%....P%=opcod|
0000ec20  65 28 30 29 2b 6f 70 63  6f 64 65 25 2a 34 2a 36  |e(0)+opcode%*4*6|
0000ec30  34 0d 84 d0 0e 4f 25 3d  63 6f 64 65 2b 50 25 0d  |4....O%=code+P%.|
0000ec40  84 da 05 cc 0d 84 e4 1a  50 25 3d 62 63 64 28 30  |........P%=bcd(0|
0000ec50  29 2b 6f 70 63 6f 64 65  25 2a 34 2a 36 34 0d 84  |)+opcode%*4*64..|
0000ec60  ee 0e 4f 25 3d 63 6f 64  65 2b 50 25 0d 84 f8 05  |..O%=code+P%....|
0000ec70  cd 0d 85 02 07 3d 22 22  0d 85 0c 0f dd a4 62 63  |.....=""......bc|
0000ec80  64 28 41 25 29 20 3a 0d  85 16 24 e7 20 50 25 3e  |d(A%) :...$. P%>|
0000ec90  6f 70 63 6f 64 65 28 30  29 2b 28 41 25 2b 32 35  |opcode(0)+(A%+25|
0000eca0  36 29 2a 34 2a 36 34 20  8c 20 fa 0d 85 20 31 50  |6)*4*64 . ... 1P|
0000ecb0  25 3d 6f 70 63 6f 64 65  28 30 29 2b 28 41 25 2b  |%=opcode(0)+(A%+|
0000ecc0  32 35 36 29 2a 34 2a 36  34 20 3a 20 4f 25 3d 63  |256)*4*64 : O%=c|
0000ecd0  6f 64 65 2b 50 25 20 3a  20 3d 22 22 0d 85 2a 04  |ode+P% : =""..*.|
0000ece0  0d 85 34 0d dd a4 61 6c  69 67 6e 31 36 0d 85 3e  |..4...align16..>|
0000ecf0  13 c8 95 20 28 50 25 20  80 20 31 35 29 3c 3e 30  |... (P% . 15)<>0|
0000ed00  0d 85 48 11 50 25 2b 3d  31 20 3a 20 4f 25 2b 3d  |..H.P%+=1 : O%+=|
0000ed10  31 0d 85 52 05 ce 0d 85  5c 07 3d 22 22 0d 85 66  |1..R....\.=""..f|
0000ed20  0c dd 20 f2 65 72 72 6f  72 0d 85 70 15 f6 3a f1  |.. .error..p..:.|
0000ed30  20 22 20 61 74 20 6c 69  6e 65 20 22 3b 9e 0d 85  | " at line ";...|
0000ed40  7a 05 e0 0d 85 84 04 0d  85 8e 0f dd a4 73 68 6f  |z............sho|
0000ed50  77 72 65 67 73 32 0d 85  98 09 5b 4f 50 54 70 0d  |wregs2....[OPTp.|
0000ed60  85 a2 11 3b 42 4c 20 73  68 6f 77 5f 72 65 67 73  |...;BL show_regs|
0000ed70  0d 85 ac 05 5d 0d 85 b6  07 3d 22 22 0d ff        |....]....=""..|
0000ed7e