Home » CEEFAX disks » telesoftware14.adl » 27-03-89/GRABBER

27-03-89/GRABBER

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 » CEEFAX disks » telesoftware14.adl
Filename: 27-03-89/GRABBER
Read OK:
File size: 29FE bytes
Load address: FFFF1900
Exec address: FFFF8023
File contents
   10REM> GRABBER
   20MODE7
   30DIM mcode &1000 :REM: space for machine code
   40DIM buffer &400 :REM: page grabber buffer
   50end=buffer+&3E4
   60FORpass=buffer TO end STEP4
   70pass!0=0 :REM: clear buffer
   80NEXT
   90PROCmcode :REM: assemble machine code
  100INPUT"TV channel (1-4) = "answer$
  110channel?0=EVAL("&"+LEFT$(answer$,1))+&1B
  120IF channel?0 < &1C THEN channel?0 = &1C
  130IF channel?0 > &1F THEN channel?0 = &1F
  140INPUT"Page number (3 digits) = "answer$
  150usermag?0=(EVAL("&"+LEFT$(answer$,1))AND 7)
  160userpage?1=EVAL("&"+MID$(answer$,2,1))
  170?userpage=EVAL("&"+MID$(answer$,3,1))
  180VDU12,23,1,0;0;0;0;
  190CALL mcode
  200VDU30,23,1,1;0;0;0;
  210END
  220DEFPROCmcode
  230packet=&70 :REM: row number of current packet
  240magazine=&71 :REM: magazine number of current page
  250grabflag=&72 :REM: 0=searching, &40=loading, &80=loaded
  260usermag=&73 :REM: search for magazine
  270userpage=&74 :REM: search for page, low byte + high byte
  280workspace=&76 :REM: 2 byte workspace
  290destination=&78 :REM: another 2 byte workspace
  300channel=&7A :REM: TV channel
  310irq2v=&206 :REM: IRQ2 vector
  320ttxcontrol=&FC10 :REM: TTX control register, write only
  330ttxstatus=&FC10 :REM: TTX status register, read only
  340rowreg=&FC11 :REM: TTX row register, write only
  350datareg=&FC12 :REM: TTX data register, read & write
  360statclr=&FC13 :REM: TTX clear status register, read & write
  370oswrch=&FFEE
  380osbyte=&FFF4
  390FOR pass=0 TO 2 STEP 2
  400P%=mcode
  410[OPT pass
  420LDA #&00
  430STA grabflag \ grabflag = searching
  440LDX irq2v \ load secondary interrupt vector
  450LDY irq2v+1
  460STX oldirq2v \ save secondary interrupt vector
  470STY oldirq2v+1
  480LDX #interrupt MOD 256 \ install new interrupt routine
  490LDY #interrupt DIV 256
  500SEI \ disable interrupts when altering vectors
  510STX irq2v
  520STY irq2v+1
  530CLI \ re-enable interrupts
  540LDA channel \ load (channel number + #&1C)
  550STA ttxcontrol \ enable TTX
  560.mainloop
  570LDA grabflag \ bit 7 set if read to display
  580BPL continue \ branch if searching or loading
  590JSR checkdouble \ check for double height characters
  600JSR transfer \ transfer data to screen
  610LDA #&00
  620STA grabflag \ searching again
  630.continue
  640LDX #&00 \ screen row
  650LDY #&08 \ screen column
  660JSR vdu31 \ VDU 31,8,0
  670.headloop
  680LDA buffer,Y
  690JSR oswrch \ write header on screen
  700INY
  710CPY #&28 \ decimal 40
  720BCC headloop
  730BIT &FF \ poll escape flag
  740BPL mainloop \ loop if escape not pressed
  750LDA #&7E \ decimal 126
  760JSR osbyte \ acknowledge escape
  770LDA #&00
  780STA ttxcontrol \ disable TTX
  790LDX oldirq2v \ load original vector
  800LDY oldirq2v+1
  810SEI \ disable interrupts when altering vector
  820STX irq2v \ restore original vector
  830STY irq2v+1
  840CLI \ re-enable interrupts
  850RTS \ return to BASIC
  860.interrupt
  870BIT ttxstatus \ poll TTX hardware
  880BMI ttxinter \ branch if TTX interrupt
  890JMP (oldirq2v) \ not TTX interrupt
  900.ttxinter
  910LDA &FC \ interrupt accumulator save register
  920PHA \ push interrupt accumulator save register
  930TXA
  940PHA \ push X
  950TYA
  960PHA \ push Y
  970BIT grabflag \ is a page ready for display?
  980BMI clearstatus \ clear status and RTI if page grabbed
  990CLD \ clear decimal flag
 1000LDY #&00 \ start with row 0
 1010.readttxt
 1020STY rowreg \ try rows 0 to 15
 1030LDA datareg \ load framing code (#&27)
 1040BEQ emptyrow \ if zero try next row
 1050TYA
 1060PHA \ save row number
 1070JSR readpacket
 1080PLA
 1090TAY \ restore row number
 1100.emptyrow
 1110INY \ increment row number
 1120CPY #&10 \ try rows 0 - 15
 1130BNE readttxt
 1140.clearstatus
 1150LDA #&00
 1160LDY #&0F \ clear 16 rows in adaptor
 1170.clearloop
 1180STY rowreg
 1190STA datareg
 1200DEY
 1210BPL clearloop
 1220STA statclr \ clear status flags before returning
 1230PLA
 1240TAY \ restore Y
 1250PLA
 1260TAX \ restore X
 1270PLA
 1280STA &FC \ restore interrupt accumulator save register
 1290RTI \ return from interrupt
 1300.testflag
 1310LDA grabflag
 1320BEQ exit \ exit if searching
 1330LDA #&80 \ if loading mark as loaded
 1340STA grabflag \ page loaded
 1350.exit
 1360RTS
 1370.readpacket
 1380LDY datareg \ read magazine number
 1390LDA hamtable,Y \ de-ham it
 1400BMI testflag \ stop loading if error
 1410STA magazine \ save magazine number
 1420LDY datareg \ read packet number
 1430LDA hamtable,Y \ de-ham it
 1440BMI testflag \ stop loading if error
 1450STA packet \ save packet number
 1460LDA magazine \ load magazine number
 1470CMP #&08 \ bit 3 of mag. number is bit 0 of packet number
 1480ROL packet \ 5 bit packet number
 1490AND #&07 \ use only bits 0-2
 1500STA magazine \ 3 bit magazine number
 1510LDA packet
 1520CMP #&18 \ ignore TSDP, Datacast, etc.
 1530BCS exit \ ie. use Level 1 Teletext only
 1540PHA \ push packet number
 1550ASL A \ packet number * 2
 1560TAY
 1570LDA bufftable,Y \ load buffer address, lsb
 1580STA workspace \ store in zero page
 1590LDA bufftable+1,Y \ load buffer address, msb
 1600STA workspace+1 \ store in zero page
 1610PLA \ pull packet number
 1620CMP #&00 \ is it a header?
 1630BNE notheader \ branch if not header
 1640TAX \ init index for hammed data
 1650.readheader
 1660LDY datareg \ read data register
 1670LDA hamtable,Y \ de-ham it
 1680BMI testflag \ stop loading if error
 1690STA buffer,X \ store de-hammed data
 1700INX \ increment index
 1710CPX #&08 \ use X = 0-7
 1720BCC readheader \ continue reading hammed data
 1730LDA grabflag \ are we loading or searching?
 1740BEQ checkstart \ branch if searching
 1750LDA magazine \ we must be loading a page
 1760CMP usermag \ is it the magazine we want?
 1770BNE out \ branch if not the one we want
 1780LDA buffer \ low nybble of page number
 1790CMP userpage \ is this the same as the one we are loading?
 1800BNE endfound \ end of page when different
 1810LDA buffer+1 \ high nybble of page number
 1820CMP userpage+1 \ is this the same as the one we are loading?
 1830BEQ out \ not end of page if the same
 1840.endfound
 1850LDA #&80 \ same magazine but different page numbers
 1860STA grabflag \ page grabbed
 1870.out
 1880RTS
 1890.checkstart
 1900LDA buffer+5 \ check for subtitle
 1910AND #&08 \ check bit 3
 1920BNE out \ reject subtitles
 1930LDA magazine \ load the header magazine number
 1940CMP usermag \ is it the one we want?
 1950BNE nextbyte \ branch if not the one
 1960LDA userpage \ load lsb of wanted page number
 1970CMP buffer \ the page we have
 1980BNE nextbyte \ branch if not the one we want
 1990LDA userpage+1 \ load msb of wanted page number
 2000CMP buffer+1 \ the page we have
 2010BNE nextbyte \ branch if not the one we want
 2020LDA #&40 \ load this page
 2030STA grabflag \ page loading
 2040RTS
 2050.nextbyte
 2060LDA buffer+6 \ check for suppress and out of sequence
 2070AND #&05 \ check bits 0 and 2
 2080BNE return \ reject suppress and out of sequence
 2090LSR buffer+7 \ check for serial magazine
 2100BCS display \ load the rest of the header
 2110LDA magazine \ current magazine number
 2120CMP usermag \ load if same magazine
 2130BNE return \ don't load if different magazine
 2140.display
 2150LDY #&08 \ header data starts at byte 8
 2160BNE readmore \ go to read the header
 2170.notheader
 2180BIT grabflag \ is a page loading?
 2190BVC return \ return if page not loading
 2200LDA magazine \ is the magazine number the one we want?
 2210CMP usermag
 2220BNE return \ return if different magazine
 2230LDY #&00 \ read bytes 0 - 39
 2240.readmore
 2250LDA datareg \ read data register
 2260ORA #&80 \ set bit 7
 2270STA (workspace),Y \ store in buffer
 2280INY \ increment index
 2290CPY #&28 \ decimal 40
 2300BNE readmore \ more data in this packet
 2310.return
 2320RTS
 2330.checkdouble
 2340LDX #&01 \ screen row numbers 1-23
 2350.nextcolumn
 2360LDY #&00 \ screen column numbers 0-40
 2370JSR setup \ set up workspace for indirect addressing
 2380.singleloop
 2390LDA (workspace),Y
 2400JSR conceal \ check for concealed display
 2410CMP #&8D \ TTX double height character
 2420BEQ doubleheight
 2430INY
 2440CPY #&28 \ decimal 40
 2450BCC singleloop
 2460.carryset
 2470INX
 2480CPX #&18 \ decimal 24
 2490BCC nextcolumn
 2500RTS
 2510.doubleheight
 2520LDY #&00
 2530TXA
 2540PHA \ store row number
 2550INX
 2560TXA
 2570ASL A \ (row number + 1) * 2
 2580TAX
 2590LDA bufftable,X
 2600STA destination
 2610LDA bufftable+1,X
 2620STA destination+1
 2630PLA
 2640TAX \ restore row number
 2650.doubleloop
 2660LDA (workspace),Y
 2670JSR conceal \ check for concealed display
 2680STA (destination),Y
 2690INY
 2700CPY #&28 \ decimal 40
 2710BCC doubleloop
 2720INX
 2730CPX #&17 \ decimal 23
 2740BCC carryset
 2750RTS
 2760.conceal
 2770CMP #&98 \ TTX conceal display character
 2780BNE goback
 2790LDA #ASC(" ") \ substitute with a space
 2800STA (workspace),Y
 2810.goback
 2820RTS
 2830.setup
 2840TXA
 2850PHA \ store row number
 2860ASL A \ (row number) * 2
 2870TAX
 2880LDA bufftable,X
 2890STA workspace
 2900LDA bufftable+1,X
 2910STA workspace+1
 2920PLA
 2930TAX \ restore row number
 2940RTS
 2950.transfer
 2960LDX #&01 \ screen rows 1-23
 2970.nextline
 2980LDY #&00 \ columns 0-39
 2990JSR vdu31
 3000JSR setup \ set up workspace for indirect addressing
 3010.writescreen
 3020LDA (workspace),Y \ load data from buffer
 3030JSR oswrch \ write to screen
 3040LDA #ASC(" ") \ space character
 3050STA (workspace),Y \ clear buffer
 3060INY
 3070CPY #&28 \ decimal 40
 3080BCC writescreen
 3090INX
 3100CPX #&18 \ decimal 24
 3110BCC nextline
 3120RTS
 3130.vdu31
 3140LDA #&1F \ decimal 31
 3150JSR oswrch
 3160TYA
 3170JSR oswrch
 3180TXA
 3190JMP oswrch \ and return
 3200.oldirq2v
 3210EQUW &00
 3220.hamtable
 3230EQUD &0101FF01
 3240EQUD &FF0100FF
 3250EQUD &FF0102FF
 3260EQUD &07FFFF0A
 3270EQUD &FF0100FF
 3280EQUD &00FF0000
 3290EQUD &0BFFFF06
 3300EQUD &FF0300FF
 3310EQUD &FF010CFF
 3320EQUD &07FFFF04
 3330EQUD &07FFFF06
 3340EQUD &070707FF
 3350EQUD &05FFFF06
 3360EQUD &FF0D00FF
 3370EQUD &FF060606
 3380EQUD &07FFFF06
 3390EQUD &FF0102FF
 3400EQUD &09FFFF04
 3410EQUD &02FF0202
 3420EQUD &FF0302FF
 3430EQUD &05FFFF08
 3440EQUD &FF0300FF
 3450EQUD &FF0302FF
 3460EQUD &0303FF03
 3470EQUD &05FFFF04
 3480EQUD &FF040404
 3490EQUD &FF0F02FF
 3500EQUD &07FFFF04
 3510EQUD &050505FF
 3520EQUD &05FFFF04
 3530EQUD &05FFFF06
 3540EQUD &FF030EFF
 3550EQUD &FF010CFF
 3560EQUD &09FFFF0A
 3570EQUD &0BFFFF0A
 3580EQUD &FF0A0A0A
 3590EQUD &0BFFFF08
 3600EQUD &FF0D00FF
 3610EQUD &0B0B0BFF
 3620EQUD &0BFFFF0A
 3630EQUD &0CFF0C0C
 3640EQUD &FF0D0CFF
 3650EQUD &FF0F0CFF
 3660EQUD &07FFFF0A
 3670EQUD &FF0D0CFF
 3680EQUD &0D0DFF0D
 3690EQUD &0BFFFF06
 3700EQUD &FF0D0EFF
 3710EQUD &09FFFF08
 3720EQUD &090909FF
 3730EQUD &FF0F02FF
 3740EQUD &09FFFF0A
 3750EQUD &FF080808
 3760EQUD &09FFFF08
 3770EQUD &0BFFFF08
 3780EQUD &FF030EFF
 3790EQUD &FF0F0CFF
 3800EQUD &09FFFF04
 3810EQUD &0F0FFF0F
 3820EQUD &FF0F0EFF
 3830EQUD &05FFFF08
 3840EQUD &FF0D0EFF
 3850EQUD &FF0F0EFF
 3860EQUD &0EFF0E0E
 3870.bufftable
 3880EQUW buffer
 3890EQUW buffer+40
 3900EQUW buffer+(2*40)
 3910EQUW buffer+(3*40)
 3920EQUW buffer+(4*40)
 3930EQUW buffer+(5*40)
 3940EQUW buffer+(6*40)
 3950EQUW buffer+(7*40)
 3960EQUW buffer+(8*40)
 3970EQUW buffer+(9*40)
 3980EQUW buffer+(10*40)
 3990EQUW buffer+(11*40)
 4000EQUW buffer+(12*40)
 4010EQUW buffer+(13*40)
 4020EQUW buffer+(14*40)
 4030EQUW buffer+(15*40)
 4040EQUW buffer+(16*40)
 4050EQUW buffer+(17*40)
 4060EQUW buffer+(18*40)
 4070EQUW buffer+(19*40)
 4080EQUW buffer+(20*40)
 4090EQUW buffer+(21*40)
 4100EQUW buffer+(22*40)
 4110EQUW buffer+(23*40)
 4120EQUW buffer+(24*40)
 4130]
 4140NEXT
 4150ENDPROC

�> GRABBER
�7
,� mcode &1000 :�: space for machine code
()� buffer &400 :�: page grabber buffer
2end=buffer+&3E4
<�pass=buffer � end �4
Fpass!0=0 :�: clear buffer
P�
Z$�mcode :�: assemble machine code
d!�"TV channel (1-4) = "answer$
n$channel?0=�("&"+�answer$,1))+&1B
x'� channel?0 < &1C � channel?0 = &1C
�'� channel?0 > &1F � channel?0 = &1F
�'�"Page number (3 digits) = "answer$
�%usermag?0=(�("&"+�answer$,1))� 7)
�#userpage?1=�("&"+�answer$,2,1))
�"?userpage=�("&"+�answer$,3,1))
��12,23,1,0;0;0;0;
�� mcode
��30,23,1,1;0;0;0;
��
���mcode
�/packet=&70 :�: row number of current packet
�4magazine=&71 :�: magazine number of current page
�9grabflag=&72 :�: 0=searching, &40=loading, &80=loaded
'usermag=&73 :�: search for magazine
:userpage=&74 :�: search for page, low byte + high byte
&workspace=&76 :�: 2 byte workspace
"0destination=&78 :�: another 2 byte workspace
,channel=&7A :�: TV channel
6irq2v=&206 :�: IRQ2 vector
@9ttxcontrol=&FC10 :�: TTX control register, write only
J6ttxstatus=&FC10 :�: TTX status register, read only
T1rowreg=&FC11 :�: TTX row register, write only
^5datareg=&FC12 :�: TTX data register, read & write
h=statclr=&FC13 :�: TTX clear status register, read & write
roswrch=&FFEE
|osbyte=&FFF4
�� pass=0 � 2 � 2
�P%=mcode
�
[OPT pass
�LDA #&00
�'STA grabflag \ grabflag = searching
�/LDX irq2v \ load secondary interrupt vector
�LDY irq2v+1
�2STX oldirq2v \ save secondary interrupt vector
�STY oldirq2v+1
�8LDX #interrupt � 256 \ install new interrupt routine
�LDY #interrupt � 256
�2SEI \ disable interrupts when altering vectors
�
STX irq2v
STY irq2v+1
CLI \ re-enable interrupts
.LDA channel \ load (channel number + #&1C)
&STA ttxcontrol \ enable TTX
0
.mainloop
:/LDA grabflag \ bit 7 set if read to display
D1BPL continue \ branch if searching or loading
N8JSR checkdouble \ check for double height characters
X*JSR transfer \ transfer data to screen
bLDA #&00
l"STA grabflag \ searching again
v
.continue
�LDX #&00 \ screen row
�LDY #&08 \ screen column
�JSR vdu31 \ � 31,8,0
�
.headloop
�LDA buffer,Y
�'JSR oswrch \ write header on screen
�INY
�CPY #&28 \ decimal 40
�BCC headloop
�BIT &FF \ poll escape flag
�-BPL mainloop \ loop if escape not pressed
�LDA #&7E \ decimal 126
�#JSR osbyte \ acknowledge escape
LDA #&00
 STA ttxcontrol \ disable TTX
'LDX oldirq2v \ load original vector
 LDY oldirq2v+1
*1SEI \ disable interrupts when altering vector
4'STX irq2v \ restore original vector
>STY irq2v+1
HCLI \ re-enable interrupts
RRTS \ return to BASIC
\.interrupt
f%BIT ttxstatus \ poll TTX hardware
p*BMI ttxinter \ branch if TTX interrupt
z&JMP (oldirq2v) \ not TTX interrupt
�
.ttxinter
�1LDA &FC \ interrupt accumulator save register
�2PHA \ push interrupt accumulator save register
�TXA
�PHA \ push X
�TYA
�PHA \ push Y
�/BIT grabflag \ is a page ready for display?
�:BMI clearstatus \ clear status and RTI if page grabbed
�CLD \ clear decimal flag
�LDY #&00 \ start with row 0
�
.readttxt
�!STY rowreg \ try rows 0 to 15
*LDA datareg \ load framing code (#&27)
'BEQ emptyrow \ if zero try next row
TYA
$PHA \ save row number
.JSR readpacket
8PLA
BTAY \ restore row number
L
.emptyrow
VINY \ increment row number
`CPY #&10 \ try rows 0 - 15
jBNE readttxt
t.clearstatus
~LDA #&00
�'LDY #&0F \ clear 16 rows in adaptor
�.clearloop
�STY rowreg
�STA datareg
�DEY
�BPL clearloop
�5STA statclr \ clear status flags before returning
�PLA
�TAY \ restore Y
�PLA
�TAX \ restore X
�PLA
9STA &FC \ restore interrupt accumulator save register

RTI \ return from interrupt

.testflag
LDA grabflag
( BEQ exit \ exit if searching
2(LDA #&80 \ if loading mark as loaded
<STA grabflag \ page loaded
F	.exit
PRTS
Z.readpacket
d&LDY datareg \ read magazine number
nLDA hamtable,Y \ de-ham it
x(BMI testflag \ stop loading if error
�'STA magazine \ save magazine number
�$LDY datareg \ read packet number
�LDA hamtable,Y \ de-ham it
�(BMI testflag \ stop loading if error
�#STA packet \ save packet number
�'LDA magazine \ load magazine number
�=CMP #&08 \ bit 3 of mag. number is bit 0 of packet number
�$ROL packet \ 5 bit packet number
�� #&07 \ use only bits 0-2
�(STA magazine \ 3 bit magazine number
�LDA packet
�*CMP #&18 \ ignore TSDP, Datacast, etc.
�,BCS exit \ ie. use Level 1 Teletext only
PHA \ push packet number
ASL A \ packet number * 2
TAY
".LDA bufftable,Y \ load buffer address, lsb
,&STA workspace \ store in zero page
60LDA bufftable+1,Y \ load buffer address, msb
@(STA workspace+1 \ store in zero page
JPLA \ pull packet number
TCMP #&00 \ is it a header?
^(BNE notheader \ branch if not header
h$TAX \ init index for hammed data
r.readheader
|$LDY datareg \ read data register
�LDA hamtable,Y \ de-ham it
�(BMI testflag \ stop loading if error
�'STA buffer,X \ store de-hammed data
�INX \ increment index
�CPX #&08 \ use X = 0-7
�1BCC readheader \ continue reading hammed data
�/LDA grabflag \ are we loading or searching?
�(BEQ checkstart \ branch if searching
�,LDA magazine \ we must be loading a page
�-CMP usermag \ is it the magazine we want?
�+BNE out \ branch if not the one we want
�*LDA buffer \ low nybble of page number
�>CMP userpage \ is this the same as the one we are loading?
-BNE endfound \ end of page when different
-LDA buffer+1 \ high nybble of page number
@CMP userpage+1 \ is this the same as the one we are loading?
&)BEQ out \ not end of page if the same
0
.endfound
:7LDA #&80 \ same magazine but different page numbers
DSTA grabflag \ page grabbed
N.out
XRTS
b.checkstart
l%LDA buffer+5 \ check for subtitle
v� #&08 \ check bit 3
�BNE out \ reject subtitles
�2LDA magazine \ load the header magazine number
�(CMP usermag \ is it the one we want?
�(BNE nextbyte \ branch if not the one
�1LDA userpage \ load lsb of wanted page number
�!CMP buffer \ the page we have
�0BNE nextbyte \ branch if not the one we want
�3LDA userpage+1 \ load msb of wanted page number
�#CMP buffer+1 \ the page we have
�0BNE nextbyte \ branch if not the one we want
�LDA #&40 \ load this page
�STA grabflag \ page loading
�RTS

.nextbyte
9LDA buffer+6 \ check for suppress and out of sequence
� #&05 \ check bits 0 and 2
 4BNE return \ reject suppress and out of sequence
*,LSR buffer+7 \ check for serial magazine
4-BCS display \ load the rest of the header
>*LDA magazine \ current magazine number
H'CMP usermag \ load if same magazine
R1BNE return \ don't load if different magazine
\.display
f+LDY #&08 \ header data starts at byte 8
p(BNE readmore \ go to read the header
z.notheader
�%BIT grabflag \ is a page loading?
�+BVC return \ return if page not loading
�:LDA magazine \ is the magazine number the one we want?
�CMP usermag
�-BNE return \ return if different magazine
� LDY #&00 \ read bytes 0 - 39
�
.readmore
�$LDA datareg \ read data register
��A #&80 \ set bit 7
�'STA (workspace),Y \ store in buffer
�INY \ increment index
�CPY #&28 \ decimal 40
�+BNE readmore \ more data in this packet
	.return
	RTS
	.checkdouble
	$&LDX #&01 \ screen row numbers 1-23
	..nextcolumn
	8)LDY #&00 \ screen column numbers 0-40
	B8JSR setup \ set up workspace for indirect addressing
	L.singleloop
	VLDA (workspace),Y
	`-JSR conceal \ check for concealed display
	j*CMP #&8D \ TTX double height character
	tBEQ doubleheight
	~INY
	�CPY #&28 \ decimal 40
	�BCC singleloop
	�
.carryset
	�INX
	�CPX #&18 \ decimal 24
	�BCC nextcolumn
	�RTS
	�.doubleheight
	�LDY #&00
	�TXA
	�PHA \ store row number
	�INX
TXA

 ASL A \ (row number + 1) * 2
TAX
LDA bufftable,X
(STA destination
2LDA bufftable+1,X
<STA destination+1
FPLA
PTAX \ restore row number
Z.doubleloop
dLDA (workspace),Y
n-JSR conceal \ check for concealed display
xSTA (destination),Y
�INY
�CPY #&28 \ decimal 40
�BCC doubleloop
�INX
�CPX #&17 \ decimal 23
�BCC carryset
�RTS
�.conceal
�,CMP #&98 \ TTX conceal display character
�BNE goback
�)LDA #�(" ") \ substitute with a space
�STA (workspace),Y
�.goback
RTS

.setup
TXA
"PHA \ store row number
,ASL A \ (row number) * 2
6TAX
@LDA bufftable,X
JSTA workspace
TLDA bufftable+1,X
^STA workspace+1
hPLA
rTAX \ restore row number
|RTS
�
.transfer
�LDX #&01 \ screen rows 1-23
�
.nextline
�LDY #&00 \ columns 0-39
�
JSR vdu31
�8JSR setup \ set up workspace for indirect addressing
�.writescreen
�-LDA (workspace),Y \ load data from buffer
� JSR oswrch \ write to screen
�!LDA #�(" ") \ space character
�$STA (workspace),Y \ clear buffer
�INY
�CPY #&28 \ decimal 40
BCC writescreen
INX
CPX #&18 \ decimal 24
&BCC nextline
0RTS
:
.vdu31
DLDA #&1F \ decimal 31
NJSR oswrch
XTYA
bJSR oswrch
lTXA
vJMP oswrch \ and return
�
.oldirq2v
�EQUW &00
�
.hamtable
�EQUD &0101FF01
�EQUD &FF0100FF
�EQUD &FF0102FF
�EQUD &07FFFF0A
�EQUD &FF0100FF
�EQUD &00FF0000
�EQUD &0BFFFF06
�EQUD &FF0300FF
�EQUD &FF010CFF
�EQUD &07FFFF04

EQUD &07FFFF06

EQUD &070707FF

EQUD &05FFFF06

 EQUD &FF0D00FF

*EQUD &FF060606

4EQUD &07FFFF06

>EQUD &FF0102FF

HEQUD &09FFFF04

REQUD &02FF0202

\EQUD &FF0302FF

fEQUD &05FFFF08

pEQUD &FF0300FF

zEQUD &FF0302FF

�EQUD &0303FF03

�EQUD &05FFFF04

�EQUD &FF040404

�EQUD &FF0F02FF

�EQUD &07FFFF04

�EQUD &050505FF

�EQUD &05FFFF04

�EQUD &05FFFF06

�EQUD &FF030EFF

�EQUD &FF010CFF

�EQUD &09FFFF0A

�EQUD &0BFFFF0A

�EQUD &FF0A0A0A
EQUD &0BFFFF08
EQUD &FF0D00FF
EQUD &0B0B0BFF
$EQUD &0BFFFF0A
.EQUD &0CFF0C0C
8EQUD &FF0D0CFF
BEQUD &FF0F0CFF
LEQUD &07FFFF0A
VEQUD &FF0D0CFF
`EQUD &0D0DFF0D
jEQUD &0BFFFF06
tEQUD &FF0D0EFF
~EQUD &09FFFF08
�EQUD &090909FF
�EQUD &FF0F02FF
�EQUD &09FFFF0A
�EQUD &FF080808
�EQUD &09FFFF08
�EQUD &0BFFFF08
�EQUD &FF030EFF
�EQUD &FF0F0CFF
�EQUD &09FFFF04
�EQUD &0F0FFF0F
�EQUD &FF0F0EFF
�EQUD &05FFFF08
EQUD &FF0D0EFF

EQUD &FF0F0EFF
EQUD &0EFF0E0E
.bufftable
(EQUW buffer
2EQUW buffer+40
<EQUW buffer+(2*40)
FEQUW buffer+(3*40)
PEQUW buffer+(4*40)
ZEQUW buffer+(5*40)
dEQUW buffer+(6*40)
nEQUW buffer+(7*40)
xEQUW buffer+(8*40)
�EQUW buffer+(9*40)
�EQUW buffer+(10*40)
�EQUW buffer+(11*40)
�EQUW buffer+(12*40)
�EQUW buffer+(13*40)
�EQUW buffer+(14*40)
�EQUW buffer+(15*40)
�EQUW buffer+(16*40)
�EQUW buffer+(17*40)
�EQUW buffer+(18*40)
�EQUW buffer+(19*40)
�EQUW buffer+(20*40)
�EQUW buffer+(21*40)
EQUW buffer+(22*40)
EQUW buffer+(23*40)
EQUW buffer+(24*40)
"]
,�
6�
�
00000000  0d 00 0a 0e f4 3e 20 47  52 41 42 42 45 52 0d 00  |.....> GRABBER..|
00000010  14 06 eb 37 0d 00 1e 2c  de 20 6d 63 6f 64 65 20  |...7...,. mcode |
00000020  26 31 30 30 30 20 3a f4  3a 20 73 70 61 63 65 20  |&1000 :.: space |
00000030  66 6f 72 20 6d 61 63 68  69 6e 65 20 63 6f 64 65  |for machine code|
00000040  0d 00 28 29 de 20 62 75  66 66 65 72 20 26 34 30  |..(). buffer &40|
00000050  30 20 3a f4 3a 20 70 61  67 65 20 67 72 61 62 62  |0 :.: page grabb|
00000060  65 72 20 62 75 66 66 65  72 0d 00 32 13 65 6e 64  |er buffer..2.end|
00000070  3d 62 75 66 66 65 72 2b  26 33 45 34 0d 00 3c 19  |=buffer+&3E4..<.|
00000080  e3 70 61 73 73 3d 62 75  66 66 65 72 20 b8 20 65  |.pass=buffer . e|
00000090  6e 64 20 88 34 0d 00 46  1d 70 61 73 73 21 30 3d  |nd .4..F.pass!0=|
000000a0  30 20 3a f4 3a 20 63 6c  65 61 72 20 62 75 66 66  |0 :.: clear buff|
000000b0  65 72 0d 00 50 05 ed 0d  00 5a 24 f2 6d 63 6f 64  |er..P....Z$.mcod|
000000c0  65 20 3a f4 3a 20 61 73  73 65 6d 62 6c 65 20 6d  |e :.: assemble m|
000000d0  61 63 68 69 6e 65 20 63  6f 64 65 0d 00 64 21 e8  |achine code..d!.|
000000e0  22 54 56 20 63 68 61 6e  6e 65 6c 20 28 31 2d 34  |"TV channel (1-4|
000000f0  29 20 3d 20 22 61 6e 73  77 65 72 24 0d 00 6e 24  |) = "answer$..n$|
00000100  63 68 61 6e 6e 65 6c 3f  30 3d a0 28 22 26 22 2b  |channel?0=.("&"+|
00000110  c0 61 6e 73 77 65 72 24  2c 31 29 29 2b 26 31 42  |.answer$,1))+&1B|
00000120  0d 00 78 27 e7 20 63 68  61 6e 6e 65 6c 3f 30 20  |..x'. channel?0 |
00000130  3c 20 26 31 43 20 8c 20  63 68 61 6e 6e 65 6c 3f  |< &1C . channel?|
00000140  30 20 3d 20 26 31 43 0d  00 82 27 e7 20 63 68 61  |0 = &1C...'. cha|
00000150  6e 6e 65 6c 3f 30 20 3e  20 26 31 46 20 8c 20 63  |nnel?0 > &1F . c|
00000160  68 61 6e 6e 65 6c 3f 30  20 3d 20 26 31 46 0d 00  |hannel?0 = &1F..|
00000170  8c 27 e8 22 50 61 67 65  20 6e 75 6d 62 65 72 20  |.'."Page number |
00000180  28 33 20 64 69 67 69 74  73 29 20 3d 20 22 61 6e  |(3 digits) = "an|
00000190  73 77 65 72 24 0d 00 96  25 75 73 65 72 6d 61 67  |swer$...%usermag|
000001a0  3f 30 3d 28 a0 28 22 26  22 2b c0 61 6e 73 77 65  |?0=(.("&"+.answe|
000001b0  72 24 2c 31 29 29 80 20  37 29 0d 00 a0 23 75 73  |r$,1)). 7)...#us|
000001c0  65 72 70 61 67 65 3f 31  3d a0 28 22 26 22 2b c1  |erpage?1=.("&"+.|
000001d0  61 6e 73 77 65 72 24 2c  32 2c 31 29 29 0d 00 aa  |answer$,2,1))...|
000001e0  22 3f 75 73 65 72 70 61  67 65 3d a0 28 22 26 22  |"?userpage=.("&"|
000001f0  2b c1 61 6e 73 77 65 72  24 2c 33 2c 31 29 29 0d  |+.answer$,3,1)).|
00000200  00 b4 15 ef 31 32 2c 32  33 2c 31 2c 30 3b 30 3b  |....12,23,1,0;0;|
00000210  30 3b 30 3b 0d 00 be 0b  d6 20 6d 63 6f 64 65 0d  |0;0;..... mcode.|
00000220  00 c8 15 ef 33 30 2c 32  33 2c 31 2c 31 3b 30 3b  |....30,23,1,1;0;|
00000230  30 3b 30 3b 0d 00 d2 05  e0 0d 00 dc 0b dd f2 6d  |0;0;...........m|
00000240  63 6f 64 65 0d 00 e6 2f  70 61 63 6b 65 74 3d 26  |code.../packet=&|
00000250  37 30 20 3a f4 3a 20 72  6f 77 20 6e 75 6d 62 65  |70 :.: row numbe|
00000260  72 20 6f 66 20 63 75 72  72 65 6e 74 20 70 61 63  |r of current pac|
00000270  6b 65 74 0d 00 f0 34 6d  61 67 61 7a 69 6e 65 3d  |ket...4magazine=|
00000280  26 37 31 20 3a f4 3a 20  6d 61 67 61 7a 69 6e 65  |&71 :.: magazine|
00000290  20 6e 75 6d 62 65 72 20  6f 66 20 63 75 72 72 65  | number of curre|
000002a0  6e 74 20 70 61 67 65 0d  00 fa 39 67 72 61 62 66  |nt page...9grabf|
000002b0  6c 61 67 3d 26 37 32 20  3a f4 3a 20 30 3d 73 65  |lag=&72 :.: 0=se|
000002c0  61 72 63 68 69 6e 67 2c  20 26 34 30 3d 6c 6f 61  |arching, &40=loa|
000002d0  64 69 6e 67 2c 20 26 38  30 3d 6c 6f 61 64 65 64  |ding, &80=loaded|
000002e0  0d 01 04 27 75 73 65 72  6d 61 67 3d 26 37 33 20  |...'usermag=&73 |
000002f0  3a f4 3a 20 73 65 61 72  63 68 20 66 6f 72 20 6d  |:.: search for m|
00000300  61 67 61 7a 69 6e 65 0d  01 0e 3a 75 73 65 72 70  |agazine...:userp|
00000310  61 67 65 3d 26 37 34 20  3a f4 3a 20 73 65 61 72  |age=&74 :.: sear|
00000320  63 68 20 66 6f 72 20 70  61 67 65 2c 20 6c 6f 77  |ch for page, low|
00000330  20 62 79 74 65 20 2b 20  68 69 67 68 20 62 79 74  | byte + high byt|
00000340  65 0d 01 18 26 77 6f 72  6b 73 70 61 63 65 3d 26  |e...&workspace=&|
00000350  37 36 20 3a f4 3a 20 32  20 62 79 74 65 20 77 6f  |76 :.: 2 byte wo|
00000360  72 6b 73 70 61 63 65 0d  01 22 30 64 65 73 74 69  |rkspace.."0desti|
00000370  6e 61 74 69 6f 6e 3d 26  37 38 20 3a f4 3a 20 61  |nation=&78 :.: a|
00000380  6e 6f 74 68 65 72 20 32  20 62 79 74 65 20 77 6f  |nother 2 byte wo|
00000390  72 6b 73 70 61 63 65 0d  01 2c 1e 63 68 61 6e 6e  |rkspace..,.chann|
000003a0  65 6c 3d 26 37 41 20 3a  f4 3a 20 54 56 20 63 68  |el=&7A :.: TV ch|
000003b0  61 6e 6e 65 6c 0d 01 36  1e 69 72 71 32 76 3d 26  |annel..6.irq2v=&|
000003c0  32 30 36 20 3a f4 3a 20  49 52 51 32 20 76 65 63  |206 :.: IRQ2 vec|
000003d0  74 6f 72 0d 01 40 39 74  74 78 63 6f 6e 74 72 6f  |tor..@9ttxcontro|
000003e0  6c 3d 26 46 43 31 30 20  3a f4 3a 20 54 54 58 20  |l=&FC10 :.: TTX |
000003f0  63 6f 6e 74 72 6f 6c 20  72 65 67 69 73 74 65 72  |control register|
00000400  2c 20 77 72 69 74 65 20  6f 6e 6c 79 0d 01 4a 36  |, write only..J6|
00000410  74 74 78 73 74 61 74 75  73 3d 26 46 43 31 30 20  |ttxstatus=&FC10 |
00000420  3a f4 3a 20 54 54 58 20  73 74 61 74 75 73 20 72  |:.: TTX status r|
00000430  65 67 69 73 74 65 72 2c  20 72 65 61 64 20 6f 6e  |egister, read on|
00000440  6c 79 0d 01 54 31 72 6f  77 72 65 67 3d 26 46 43  |ly..T1rowreg=&FC|
00000450  31 31 20 3a f4 3a 20 54  54 58 20 72 6f 77 20 72  |11 :.: TTX row r|
00000460  65 67 69 73 74 65 72 2c  20 77 72 69 74 65 20 6f  |egister, write o|
00000470  6e 6c 79 0d 01 5e 35 64  61 74 61 72 65 67 3d 26  |nly..^5datareg=&|
00000480  46 43 31 32 20 3a f4 3a  20 54 54 58 20 64 61 74  |FC12 :.: TTX dat|
00000490  61 20 72 65 67 69 73 74  65 72 2c 20 72 65 61 64  |a register, read|
000004a0  20 26 20 77 72 69 74 65  0d 01 68 3d 73 74 61 74  | & write..h=stat|
000004b0  63 6c 72 3d 26 46 43 31  33 20 3a f4 3a 20 54 54  |clr=&FC13 :.: TT|
000004c0  58 20 63 6c 65 61 72 20  73 74 61 74 75 73 20 72  |X clear status r|
000004d0  65 67 69 73 74 65 72 2c  20 72 65 61 64 20 26 20  |egister, read & |
000004e0  77 72 69 74 65 0d 01 72  10 6f 73 77 72 63 68 3d  |write..r.oswrch=|
000004f0  26 46 46 45 45 0d 01 7c  10 6f 73 62 79 74 65 3d  |&FFEE..|.osbyte=|
00000500  26 46 46 46 34 0d 01 86  14 e3 20 70 61 73 73 3d  |&FFF4..... pass=|
00000510  30 20 b8 20 32 20 88 20  32 0d 01 90 0c 50 25 3d  |0 . 2 . 2....P%=|
00000520  6d 63 6f 64 65 0d 01 9a  0d 5b 4f 50 54 20 70 61  |mcode....[OPT pa|
00000530  73 73 0d 01 a4 0c 4c 44  41 20 23 26 30 30 0d 01  |ss....LDA #&00..|
00000540  ae 27 53 54 41 20 67 72  61 62 66 6c 61 67 20 5c  |.'STA grabflag \|
00000550  20 67 72 61 62 66 6c 61  67 20 3d 20 73 65 61 72  | grabflag = sear|
00000560  63 68 69 6e 67 0d 01 b8  2f 4c 44 58 20 69 72 71  |ching.../LDX irq|
00000570  32 76 20 5c 20 6c 6f 61  64 20 73 65 63 6f 6e 64  |2v \ load second|
00000580  61 72 79 20 69 6e 74 65  72 72 75 70 74 20 76 65  |ary interrupt ve|
00000590  63 74 6f 72 0d 01 c2 0f  4c 44 59 20 69 72 71 32  |ctor....LDY irq2|
000005a0  76 2b 31 0d 01 cc 32 53  54 58 20 6f 6c 64 69 72  |v+1...2STX oldir|
000005b0  71 32 76 20 5c 20 73 61  76 65 20 73 65 63 6f 6e  |q2v \ save secon|
000005c0  64 61 72 79 20 69 6e 74  65 72 72 75 70 74 20 76  |dary interrupt v|
000005d0  65 63 74 6f 72 0d 01 d6  12 53 54 59 20 6f 6c 64  |ector....STY old|
000005e0  69 72 71 32 76 2b 31 0d  01 e0 38 4c 44 58 20 23  |irq2v+1...8LDX #|
000005f0  69 6e 74 65 72 72 75 70  74 20 83 20 32 35 36 20  |interrupt . 256 |
00000600  5c 20 69 6e 73 74 61 6c  6c 20 6e 65 77 20 69 6e  |\ install new in|
00000610  74 65 72 72 75 70 74 20  72 6f 75 74 69 6e 65 0d  |terrupt routine.|
00000620  01 ea 18 4c 44 59 20 23  69 6e 74 65 72 72 75 70  |...LDY #interrup|
00000630  74 20 81 20 32 35 36 0d  01 f4 32 53 45 49 20 5c  |t . 256...2SEI \|
00000640  20 64 69 73 61 62 6c 65  20 69 6e 74 65 72 72 75  | disable interru|
00000650  70 74 73 20 77 68 65 6e  20 61 6c 74 65 72 69 6e  |pts when alterin|
00000660  67 20 76 65 63 74 6f 72  73 0d 01 fe 0d 53 54 58  |g vectors....STX|
00000670  20 69 72 71 32 76 0d 02  08 0f 53 54 59 20 69 72  | irq2v....STY ir|
00000680  71 32 76 2b 31 0d 02 12  1e 43 4c 49 20 5c 20 72  |q2v+1....CLI \ r|
00000690  65 2d 65 6e 61 62 6c 65  20 69 6e 74 65 72 72 75  |e-enable interru|
000006a0  70 74 73 0d 02 1c 2e 4c  44 41 20 63 68 61 6e 6e  |pts....LDA chann|
000006b0  65 6c 20 5c 20 6c 6f 61  64 20 28 63 68 61 6e 6e  |el \ load (chann|
000006c0  65 6c 20 6e 75 6d 62 65  72 20 2b 20 23 26 31 43  |el number + #&1C|
000006d0  29 0d 02 26 1f 53 54 41  20 74 74 78 63 6f 6e 74  |)..&.STA ttxcont|
000006e0  72 6f 6c 20 5c 20 65 6e  61 62 6c 65 20 54 54 58  |rol \ enable TTX|
000006f0  0d 02 30 0d 2e 6d 61 69  6e 6c 6f 6f 70 0d 02 3a  |..0..mainloop..:|
00000700  2f 4c 44 41 20 67 72 61  62 66 6c 61 67 20 5c 20  |/LDA grabflag \ |
00000710  62 69 74 20 37 20 73 65  74 20 69 66 20 72 65 61  |bit 7 set if rea|
00000720  64 20 74 6f 20 64 69 73  70 6c 61 79 0d 02 44 31  |d to display..D1|
00000730  42 50 4c 20 63 6f 6e 74  69 6e 75 65 20 5c 20 62  |BPL continue \ b|
00000740  72 61 6e 63 68 20 69 66  20 73 65 61 72 63 68 69  |ranch if searchi|
00000750  6e 67 20 6f 72 20 6c 6f  61 64 69 6e 67 0d 02 4e  |ng or loading..N|
00000760  38 4a 53 52 20 63 68 65  63 6b 64 6f 75 62 6c 65  |8JSR checkdouble|
00000770  20 5c 20 63 68 65 63 6b  20 66 6f 72 20 64 6f 75  | \ check for dou|
00000780  62 6c 65 20 68 65 69 67  68 74 20 63 68 61 72 61  |ble height chara|
00000790  63 74 65 72 73 0d 02 58  2a 4a 53 52 20 74 72 61  |cters..X*JSR tra|
000007a0  6e 73 66 65 72 20 5c 20  74 72 61 6e 73 66 65 72  |nsfer \ transfer|
000007b0  20 64 61 74 61 20 74 6f  20 73 63 72 65 65 6e 0d  | data to screen.|
000007c0  02 62 0c 4c 44 41 20 23  26 30 30 0d 02 6c 22 53  |.b.LDA #&00..l"S|
000007d0  54 41 20 67 72 61 62 66  6c 61 67 20 5c 20 73 65  |TA grabflag \ se|
000007e0  61 72 63 68 69 6e 67 20  61 67 61 69 6e 0d 02 76  |arching again..v|
000007f0  0d 2e 63 6f 6e 74 69 6e  75 65 0d 02 80 19 4c 44  |..continue....LD|
00000800  58 20 23 26 30 30 20 5c  20 73 63 72 65 65 6e 20  |X #&00 \ screen |
00000810  72 6f 77 0d 02 8a 1c 4c  44 59 20 23 26 30 38 20  |row....LDY #&08 |
00000820  5c 20 73 63 72 65 65 6e  20 63 6f 6c 75 6d 6e 0d  |\ screen column.|
00000830  02 94 18 4a 53 52 20 76  64 75 33 31 20 5c 20 ef  |...JSR vdu31 \ .|
00000840  20 33 31 2c 38 2c 30 0d  02 9e 0d 2e 68 65 61 64  | 31,8,0.....head|
00000850  6c 6f 6f 70 0d 02 a8 10  4c 44 41 20 62 75 66 66  |loop....LDA buff|
00000860  65 72 2c 59 0d 02 b2 27  4a 53 52 20 6f 73 77 72  |er,Y...'JSR oswr|
00000870  63 68 20 5c 20 77 72 69  74 65 20 68 65 61 64 65  |ch \ write heade|
00000880  72 20 6f 6e 20 73 63 72  65 65 6e 0d 02 bc 07 49  |r on screen....I|
00000890  4e 59 0d 02 c6 19 43 50  59 20 23 26 32 38 20 5c  |NY....CPY #&28 \|
000008a0  20 64 65 63 69 6d 61 6c  20 34 30 0d 02 d0 10 42  | decimal 40....B|
000008b0  43 43 20 68 65 61 64 6c  6f 6f 70 0d 02 da 1e 42  |CC headloop....B|
000008c0  49 54 20 26 46 46 20 5c  20 70 6f 6c 6c 20 65 73  |IT &FF \ poll es|
000008d0  63 61 70 65 20 66 6c 61  67 0d 02 e4 2d 42 50 4c  |cape flag...-BPL|
000008e0  20 6d 61 69 6e 6c 6f 6f  70 20 5c 20 6c 6f 6f 70  | mainloop \ loop|
000008f0  20 69 66 20 65 73 63 61  70 65 20 6e 6f 74 20 70  | if escape not p|
00000900  72 65 73 73 65 64 0d 02  ee 1a 4c 44 41 20 23 26  |ressed....LDA #&|
00000910  37 45 20 5c 20 64 65 63  69 6d 61 6c 20 31 32 36  |7E \ decimal 126|
00000920  0d 02 f8 23 4a 53 52 20  6f 73 62 79 74 65 20 5c  |...#JSR osbyte \|
00000930  20 61 63 6b 6e 6f 77 6c  65 64 67 65 20 65 73 63  | acknowledge esc|
00000940  61 70 65 0d 03 02 0c 4c  44 41 20 23 26 30 30 0d  |ape....LDA #&00.|
00000950  03 0c 20 53 54 41 20 74  74 78 63 6f 6e 74 72 6f  |.. STA ttxcontro|
00000960  6c 20 5c 20 64 69 73 61  62 6c 65 20 54 54 58 0d  |l \ disable TTX.|
00000970  03 16 27 4c 44 58 20 6f  6c 64 69 72 71 32 76 20  |..'LDX oldirq2v |
00000980  5c 20 6c 6f 61 64 20 6f  72 69 67 69 6e 61 6c 20  |\ load original |
00000990  76 65 63 74 6f 72 0d 03  20 12 4c 44 59 20 6f 6c  |vector.. .LDY ol|
000009a0  64 69 72 71 32 76 2b 31  0d 03 2a 31 53 45 49 20  |dirq2v+1..*1SEI |
000009b0  5c 20 64 69 73 61 62 6c  65 20 69 6e 74 65 72 72  |\ disable interr|
000009c0  75 70 74 73 20 77 68 65  6e 20 61 6c 74 65 72 69  |upts when alteri|
000009d0  6e 67 20 76 65 63 74 6f  72 0d 03 34 27 53 54 58  |ng vector..4'STX|
000009e0  20 69 72 71 32 76 20 5c  20 72 65 73 74 6f 72 65  | irq2v \ restore|
000009f0  20 6f 72 69 67 69 6e 61  6c 20 76 65 63 74 6f 72  | original vector|
00000a00  0d 03 3e 0f 53 54 59 20  69 72 71 32 76 2b 31 0d  |..>.STY irq2v+1.|
00000a10  03 48 1e 43 4c 49 20 5c  20 72 65 2d 65 6e 61 62  |.H.CLI \ re-enab|
00000a20  6c 65 20 69 6e 74 65 72  72 75 70 74 73 0d 03 52  |le interrupts..R|
00000a30  19 52 54 53 20 5c 20 72  65 74 75 72 6e 20 74 6f  |.RTS \ return to|
00000a40  20 42 41 53 49 43 0d 03  5c 0e 2e 69 6e 74 65 72  | BASIC..\..inter|
00000a50  72 75 70 74 0d 03 66 25  42 49 54 20 74 74 78 73  |rupt..f%BIT ttxs|
00000a60  74 61 74 75 73 20 5c 20  70 6f 6c 6c 20 54 54 58  |tatus \ poll TTX|
00000a70  20 68 61 72 64 77 61 72  65 0d 03 70 2a 42 4d 49  | hardware..p*BMI|
00000a80  20 74 74 78 69 6e 74 65  72 20 5c 20 62 72 61 6e  | ttxinter \ bran|
00000a90  63 68 20 69 66 20 54 54  58 20 69 6e 74 65 72 72  |ch if TTX interr|
00000aa0  75 70 74 0d 03 7a 26 4a  4d 50 20 28 6f 6c 64 69  |upt..z&JMP (oldi|
00000ab0  72 71 32 76 29 20 5c 20  6e 6f 74 20 54 54 58 20  |rq2v) \ not TTX |
00000ac0  69 6e 74 65 72 72 75 70  74 0d 03 84 0d 2e 74 74  |interrupt.....tt|
00000ad0  78 69 6e 74 65 72 0d 03  8e 31 4c 44 41 20 26 46  |xinter...1LDA &F|
00000ae0  43 20 5c 20 69 6e 74 65  72 72 75 70 74 20 61 63  |C \ interrupt ac|
00000af0  63 75 6d 75 6c 61 74 6f  72 20 73 61 76 65 20 72  |cumulator save r|
00000b00  65 67 69 73 74 65 72 0d  03 98 32 50 48 41 20 5c  |egister...2PHA \|
00000b10  20 70 75 73 68 20 69 6e  74 65 72 72 75 70 74 20  | push interrupt |
00000b20  61 63 63 75 6d 75 6c 61  74 6f 72 20 73 61 76 65  |accumulator save|
00000b30  20 72 65 67 69 73 74 65  72 0d 03 a2 07 54 58 41  | register....TXA|
00000b40  0d 03 ac 10 50 48 41 20  5c 20 70 75 73 68 20 58  |....PHA \ push X|
00000b50  0d 03 b6 07 54 59 41 0d  03 c0 10 50 48 41 20 5c  |....TYA....PHA \|
00000b60  20 70 75 73 68 20 59 0d  03 ca 2f 42 49 54 20 67  | push Y.../BIT g|
00000b70  72 61 62 66 6c 61 67 20  5c 20 69 73 20 61 20 70  |rabflag \ is a p|
00000b80  61 67 65 20 72 65 61 64  79 20 66 6f 72 20 64 69  |age ready for di|
00000b90  73 70 6c 61 79 3f 0d 03  d4 3a 42 4d 49 20 63 6c  |splay?...:BMI cl|
00000ba0  65 61 72 73 74 61 74 75  73 20 5c 20 63 6c 65 61  |earstatus \ clea|
00000bb0  72 20 73 74 61 74 75 73  20 61 6e 64 20 52 54 49  |r status and RTI|
00000bc0  20 69 66 20 70 61 67 65  20 67 72 61 62 62 65 64  | if page grabbed|
00000bd0  0d 03 de 1c 43 4c 44 20  5c 20 63 6c 65 61 72 20  |....CLD \ clear |
00000be0  64 65 63 69 6d 61 6c 20  66 6c 61 67 0d 03 e8 1f  |decimal flag....|
00000bf0  4c 44 59 20 23 26 30 30  20 5c 20 73 74 61 72 74  |LDY #&00 \ start|
00000c00  20 77 69 74 68 20 72 6f  77 20 30 0d 03 f2 0d 2e  | with row 0.....|
00000c10  72 65 61 64 74 74 78 74  0d 03 fc 21 53 54 59 20  |readttxt...!STY |
00000c20  72 6f 77 72 65 67 20 5c  20 74 72 79 20 72 6f 77  |rowreg \ try row|
00000c30  73 20 30 20 74 6f 20 31  35 0d 04 06 2a 4c 44 41  |s 0 to 15...*LDA|
00000c40  20 64 61 74 61 72 65 67  20 5c 20 6c 6f 61 64 20  | datareg \ load |
00000c50  66 72 61 6d 69 6e 67 20  63 6f 64 65 20 28 23 26  |framing code (#&|
00000c60  32 37 29 0d 04 10 27 42  45 51 20 65 6d 70 74 79  |27)...'BEQ empty|
00000c70  72 6f 77 20 5c 20 69 66  20 7a 65 72 6f 20 74 72  |row \ if zero tr|
00000c80  79 20 6e 65 78 74 20 72  6f 77 0d 04 1a 07 54 59  |y next row....TY|
00000c90  41 0d 04 24 19 50 48 41  20 5c 20 73 61 76 65 20  |A..$.PHA \ save |
00000ca0  72 6f 77 20 6e 75 6d 62  65 72 0d 04 2e 12 4a 53  |row number....JS|
00000cb0  52 20 72 65 61 64 70 61  63 6b 65 74 0d 04 38 07  |R readpacket..8.|
00000cc0  50 4c 41 0d 04 42 1c 54  41 59 20 5c 20 72 65 73  |PLA..B.TAY \ res|
00000cd0  74 6f 72 65 20 72 6f 77  20 6e 75 6d 62 65 72 0d  |tore row number.|
00000ce0  04 4c 0d 2e 65 6d 70 74  79 72 6f 77 0d 04 56 1e  |.L..emptyrow..V.|
00000cf0  49 4e 59 20 5c 20 69 6e  63 72 65 6d 65 6e 74 20  |INY \ increment |
00000d00  72 6f 77 20 6e 75 6d 62  65 72 0d 04 60 1e 43 50  |row number..`.CP|
00000d10  59 20 23 26 31 30 20 5c  20 74 72 79 20 72 6f 77  |Y #&10 \ try row|
00000d20  73 20 30 20 2d 20 31 35  0d 04 6a 10 42 4e 45 20  |s 0 - 15..j.BNE |
00000d30  72 65 61 64 74 74 78 74  0d 04 74 10 2e 63 6c 65  |readttxt..t..cle|
00000d40  61 72 73 74 61 74 75 73  0d 04 7e 0c 4c 44 41 20  |arstatus..~.LDA |
00000d50  23 26 30 30 0d 04 88 27  4c 44 59 20 23 26 30 46  |#&00...'LDY #&0F|
00000d60  20 5c 20 63 6c 65 61 72  20 31 36 20 72 6f 77 73  | \ clear 16 rows|
00000d70  20 69 6e 20 61 64 61 70  74 6f 72 0d 04 92 0e 2e  | in adaptor.....|
00000d80  63 6c 65 61 72 6c 6f 6f  70 0d 04 9c 0e 53 54 59  |clearloop....STY|
00000d90  20 72 6f 77 72 65 67 0d  04 a6 0f 53 54 41 20 64  | rowreg....STA d|
00000da0  61 74 61 72 65 67 0d 04  b0 07 44 45 59 0d 04 ba  |atareg....DEY...|
00000db0  11 42 50 4c 20 63 6c 65  61 72 6c 6f 6f 70 0d 04  |.BPL clearloop..|
00000dc0  c4 35 53 54 41 20 73 74  61 74 63 6c 72 20 5c 20  |.5STA statclr \ |
00000dd0  63 6c 65 61 72 20 73 74  61 74 75 73 20 66 6c 61  |clear status fla|
00000de0  67 73 20 62 65 66 6f 72  65 20 72 65 74 75 72 6e  |gs before return|
00000df0  69 6e 67 0d 04 ce 07 50  4c 41 0d 04 d8 13 54 41  |ing....PLA....TA|
00000e00  59 20 5c 20 72 65 73 74  6f 72 65 20 59 0d 04 e2  |Y \ restore Y...|
00000e10  07 50 4c 41 0d 04 ec 13  54 41 58 20 5c 20 72 65  |.PLA....TAX \ re|
00000e20  73 74 6f 72 65 20 58 0d  04 f6 07 50 4c 41 0d 05  |store X....PLA..|
00000e30  00 39 53 54 41 20 26 46  43 20 5c 20 72 65 73 74  |.9STA &FC \ rest|
00000e40  6f 72 65 20 69 6e 74 65  72 72 75 70 74 20 61 63  |ore interrupt ac|
00000e50  63 75 6d 75 6c 61 74 6f  72 20 73 61 76 65 20 72  |cumulator save r|
00000e60  65 67 69 73 74 65 72 0d  05 0a 1f 52 54 49 20 5c  |egister....RTI \|
00000e70  20 72 65 74 75 72 6e 20  66 72 6f 6d 20 69 6e 74  | return from int|
00000e80  65 72 72 75 70 74 0d 05  14 0d 2e 74 65 73 74 66  |errupt.....testf|
00000e90  6c 61 67 0d 05 1e 10 4c  44 41 20 67 72 61 62 66  |lag....LDA grabf|
00000ea0  6c 61 67 0d 05 28 20 42  45 51 20 65 78 69 74 20  |lag..( BEQ exit |
00000eb0  5c 20 65 78 69 74 20 69  66 20 73 65 61 72 63 68  |\ exit if search|
00000ec0  69 6e 67 0d 05 32 28 4c  44 41 20 23 26 38 30 20  |ing..2(LDA #&80 |
00000ed0  5c 20 69 66 20 6c 6f 61  64 69 6e 67 20 6d 61 72  |\ if loading mar|
00000ee0  6b 20 61 73 20 6c 6f 61  64 65 64 0d 05 3c 1e 53  |k as loaded..<.S|
00000ef0  54 41 20 67 72 61 62 66  6c 61 67 20 5c 20 70 61  |TA grabflag \ pa|
00000f00  67 65 20 6c 6f 61 64 65  64 0d 05 46 09 2e 65 78  |ge loaded..F..ex|
00000f10  69 74 0d 05 50 07 52 54  53 0d 05 5a 0f 2e 72 65  |it..P.RTS..Z..re|
00000f20  61 64 70 61 63 6b 65 74  0d 05 64 26 4c 44 59 20  |adpacket..d&LDY |
00000f30  64 61 74 61 72 65 67 20  5c 20 72 65 61 64 20 6d  |datareg \ read m|
00000f40  61 67 61 7a 69 6e 65 20  6e 75 6d 62 65 72 0d 05  |agazine number..|
00000f50  6e 1e 4c 44 41 20 68 61  6d 74 61 62 6c 65 2c 59  |n.LDA hamtable,Y|
00000f60  20 5c 20 64 65 2d 68 61  6d 20 69 74 0d 05 78 28  | \ de-ham it..x(|
00000f70  42 4d 49 20 74 65 73 74  66 6c 61 67 20 5c 20 73  |BMI testflag \ s|
00000f80  74 6f 70 20 6c 6f 61 64  69 6e 67 20 69 66 20 65  |top loading if e|
00000f90  72 72 6f 72 0d 05 82 27  53 54 41 20 6d 61 67 61  |rror...'STA maga|
00000fa0  7a 69 6e 65 20 5c 20 73  61 76 65 20 6d 61 67 61  |zine \ save maga|
00000fb0  7a 69 6e 65 20 6e 75 6d  62 65 72 0d 05 8c 24 4c  |zine number...$L|
00000fc0  44 59 20 64 61 74 61 72  65 67 20 5c 20 72 65 61  |DY datareg \ rea|
00000fd0  64 20 70 61 63 6b 65 74  20 6e 75 6d 62 65 72 0d  |d packet number.|
00000fe0  05 96 1e 4c 44 41 20 68  61 6d 74 61 62 6c 65 2c  |...LDA hamtable,|
00000ff0  59 20 5c 20 64 65 2d 68  61 6d 20 69 74 0d 05 a0  |Y \ de-ham it...|
00001000  28 42 4d 49 20 74 65 73  74 66 6c 61 67 20 5c 20  |(BMI testflag \ |
00001010  73 74 6f 70 20 6c 6f 61  64 69 6e 67 20 69 66 20  |stop loading if |
00001020  65 72 72 6f 72 0d 05 aa  23 53 54 41 20 70 61 63  |error...#STA pac|
00001030  6b 65 74 20 5c 20 73 61  76 65 20 70 61 63 6b 65  |ket \ save packe|
00001040  74 20 6e 75 6d 62 65 72  0d 05 b4 27 4c 44 41 20  |t number...'LDA |
00001050  6d 61 67 61 7a 69 6e 65  20 5c 20 6c 6f 61 64 20  |magazine \ load |
00001060  6d 61 67 61 7a 69 6e 65  20 6e 75 6d 62 65 72 0d  |magazine number.|
00001070  05 be 3d 43 4d 50 20 23  26 30 38 20 5c 20 62 69  |..=CMP #&08 \ bi|
00001080  74 20 33 20 6f 66 20 6d  61 67 2e 20 6e 75 6d 62  |t 3 of mag. numb|
00001090  65 72 20 69 73 20 62 69  74 20 30 20 6f 66 20 70  |er is bit 0 of p|
000010a0  61 63 6b 65 74 20 6e 75  6d 62 65 72 0d 05 c8 24  |acket number...$|
000010b0  52 4f 4c 20 70 61 63 6b  65 74 20 5c 20 35 20 62  |ROL packet \ 5 b|
000010c0  69 74 20 70 61 63 6b 65  74 20 6e 75 6d 62 65 72  |it packet number|
000010d0  0d 05 d2 1e 80 20 23 26  30 37 20 5c 20 75 73 65  |..... #&07 \ use|
000010e0  20 6f 6e 6c 79 20 62 69  74 73 20 30 2d 32 0d 05  | only bits 0-2..|
000010f0  dc 28 53 54 41 20 6d 61  67 61 7a 69 6e 65 20 5c  |.(STA magazine \|
00001100  20 33 20 62 69 74 20 6d  61 67 61 7a 69 6e 65 20  | 3 bit magazine |
00001110  6e 75 6d 62 65 72 0d 05  e6 0e 4c 44 41 20 70 61  |number....LDA pa|
00001120  63 6b 65 74 0d 05 f0 2a  43 4d 50 20 23 26 31 38  |cket...*CMP #&18|
00001130  20 5c 20 69 67 6e 6f 72  65 20 54 53 44 50 2c 20  | \ ignore TSDP, |
00001140  44 61 74 61 63 61 73 74  2c 20 65 74 63 2e 0d 05  |Datacast, etc...|
00001150  fa 2c 42 43 53 20 65 78  69 74 20 5c 20 69 65 2e  |.,BCS exit \ ie.|
00001160  20 75 73 65 20 4c 65 76  65 6c 20 31 20 54 65 6c  | use Level 1 Tel|
00001170  65 74 65 78 74 20 6f 6e  6c 79 0d 06 04 1c 50 48  |etext only....PH|
00001180  41 20 5c 20 70 75 73 68  20 70 61 63 6b 65 74 20  |A \ push packet |
00001190  6e 75 6d 62 65 72 0d 06  0e 1d 41 53 4c 20 41 20  |number....ASL A |
000011a0  5c 20 70 61 63 6b 65 74  20 6e 75 6d 62 65 72 20  |\ packet number |
000011b0  2a 20 32 0d 06 18 07 54  41 59 0d 06 22 2e 4c 44  |* 2....TAY..".LD|
000011c0  41 20 62 75 66 66 74 61  62 6c 65 2c 59 20 5c 20  |A bufftable,Y \ |
000011d0  6c 6f 61 64 20 62 75 66  66 65 72 20 61 64 64 72  |load buffer addr|
000011e0  65 73 73 2c 20 6c 73 62  0d 06 2c 26 53 54 41 20  |ess, lsb..,&STA |
000011f0  77 6f 72 6b 73 70 61 63  65 20 5c 20 73 74 6f 72  |workspace \ stor|
00001200  65 20 69 6e 20 7a 65 72  6f 20 70 61 67 65 0d 06  |e in zero page..|
00001210  36 30 4c 44 41 20 62 75  66 66 74 61 62 6c 65 2b  |60LDA bufftable+|
00001220  31 2c 59 20 5c 20 6c 6f  61 64 20 62 75 66 66 65  |1,Y \ load buffe|
00001230  72 20 61 64 64 72 65 73  73 2c 20 6d 73 62 0d 06  |r address, msb..|
00001240  40 28 53 54 41 20 77 6f  72 6b 73 70 61 63 65 2b  |@(STA workspace+|
00001250  31 20 5c 20 73 74 6f 72  65 20 69 6e 20 7a 65 72  |1 \ store in zer|
00001260  6f 20 70 61 67 65 0d 06  4a 1c 50 4c 41 20 5c 20  |o page..J.PLA \ |
00001270  70 75 6c 6c 20 70 61 63  6b 65 74 20 6e 75 6d 62  |pull packet numb|
00001280  65 72 0d 06 54 1e 43 4d  50 20 23 26 30 30 20 5c  |er..T.CMP #&00 \|
00001290  20 69 73 20 69 74 20 61  20 68 65 61 64 65 72 3f  | is it a header?|
000012a0  0d 06 5e 28 42 4e 45 20  6e 6f 74 68 65 61 64 65  |..^(BNE notheade|
000012b0  72 20 5c 20 62 72 61 6e  63 68 20 69 66 20 6e 6f  |r \ branch if no|
000012c0  74 20 68 65 61 64 65 72  0d 06 68 24 54 41 58 20  |t header..h$TAX |
000012d0  5c 20 69 6e 69 74 20 69  6e 64 65 78 20 66 6f 72  |\ init index for|
000012e0  20 68 61 6d 6d 65 64 20  64 61 74 61 0d 06 72 0f  | hammed data..r.|
000012f0  2e 72 65 61 64 68 65 61  64 65 72 0d 06 7c 24 4c  |.readheader..|$L|
00001300  44 59 20 64 61 74 61 72  65 67 20 5c 20 72 65 61  |DY datareg \ rea|
00001310  64 20 64 61 74 61 20 72  65 67 69 73 74 65 72 0d  |d data register.|
00001320  06 86 1e 4c 44 41 20 68  61 6d 74 61 62 6c 65 2c  |...LDA hamtable,|
00001330  59 20 5c 20 64 65 2d 68  61 6d 20 69 74 0d 06 90  |Y \ de-ham it...|
00001340  28 42 4d 49 20 74 65 73  74 66 6c 61 67 20 5c 20  |(BMI testflag \ |
00001350  73 74 6f 70 20 6c 6f 61  64 69 6e 67 20 69 66 20  |stop loading if |
00001360  65 72 72 6f 72 0d 06 9a  27 53 54 41 20 62 75 66  |error...'STA buf|
00001370  66 65 72 2c 58 20 5c 20  73 74 6f 72 65 20 64 65  |fer,X \ store de|
00001380  2d 68 61 6d 6d 65 64 20  64 61 74 61 0d 06 a4 19  |-hammed data....|
00001390  49 4e 58 20 5c 20 69 6e  63 72 65 6d 65 6e 74 20  |INX \ increment |
000013a0  69 6e 64 65 78 0d 06 ae  1a 43 50 58 20 23 26 30  |index....CPX #&0|
000013b0  38 20 5c 20 75 73 65 20  58 20 3d 20 30 2d 37 0d  |8 \ use X = 0-7.|
000013c0  06 b8 31 42 43 43 20 72  65 61 64 68 65 61 64 65  |..1BCC readheade|
000013d0  72 20 5c 20 63 6f 6e 74  69 6e 75 65 20 72 65 61  |r \ continue rea|
000013e0  64 69 6e 67 20 68 61 6d  6d 65 64 20 64 61 74 61  |ding hammed data|
000013f0  0d 06 c2 2f 4c 44 41 20  67 72 61 62 66 6c 61 67  |.../LDA grabflag|
00001400  20 5c 20 61 72 65 20 77  65 20 6c 6f 61 64 69 6e  | \ are we loadin|
00001410  67 20 6f 72 20 73 65 61  72 63 68 69 6e 67 3f 0d  |g or searching?.|
00001420  06 cc 28 42 45 51 20 63  68 65 63 6b 73 74 61 72  |..(BEQ checkstar|
00001430  74 20 5c 20 62 72 61 6e  63 68 20 69 66 20 73 65  |t \ branch if se|
00001440  61 72 63 68 69 6e 67 0d  06 d6 2c 4c 44 41 20 6d  |arching...,LDA m|
00001450  61 67 61 7a 69 6e 65 20  5c 20 77 65 20 6d 75 73  |agazine \ we mus|
00001460  74 20 62 65 20 6c 6f 61  64 69 6e 67 20 61 20 70  |t be loading a p|
00001470  61 67 65 0d 06 e0 2d 43  4d 50 20 75 73 65 72 6d  |age...-CMP userm|
00001480  61 67 20 5c 20 69 73 20  69 74 20 74 68 65 20 6d  |ag \ is it the m|
00001490  61 67 61 7a 69 6e 65 20  77 65 20 77 61 6e 74 3f  |agazine we want?|
000014a0  0d 06 ea 2b 42 4e 45 20  6f 75 74 20 5c 20 62 72  |...+BNE out \ br|
000014b0  61 6e 63 68 20 69 66 20  6e 6f 74 20 74 68 65 20  |anch if not the |
000014c0  6f 6e 65 20 77 65 20 77  61 6e 74 0d 06 f4 2a 4c  |one we want...*L|
000014d0  44 41 20 62 75 66 66 65  72 20 5c 20 6c 6f 77 20  |DA buffer \ low |
000014e0  6e 79 62 62 6c 65 20 6f  66 20 70 61 67 65 20 6e  |nybble of page n|
000014f0  75 6d 62 65 72 0d 06 fe  3e 43 4d 50 20 75 73 65  |umber...>CMP use|
00001500  72 70 61 67 65 20 5c 20  69 73 20 74 68 69 73 20  |rpage \ is this |
00001510  74 68 65 20 73 61 6d 65  20 61 73 20 74 68 65 20  |the same as the |
00001520  6f 6e 65 20 77 65 20 61  72 65 20 6c 6f 61 64 69  |one we are loadi|
00001530  6e 67 3f 0d 07 08 2d 42  4e 45 20 65 6e 64 66 6f  |ng?...-BNE endfo|
00001540  75 6e 64 20 5c 20 65 6e  64 20 6f 66 20 70 61 67  |und \ end of pag|
00001550  65 20 77 68 65 6e 20 64  69 66 66 65 72 65 6e 74  |e when different|
00001560  0d 07 12 2d 4c 44 41 20  62 75 66 66 65 72 2b 31  |...-LDA buffer+1|
00001570  20 5c 20 68 69 67 68 20  6e 79 62 62 6c 65 20 6f  | \ high nybble o|
00001580  66 20 70 61 67 65 20 6e  75 6d 62 65 72 0d 07 1c  |f page number...|
00001590  40 43 4d 50 20 75 73 65  72 70 61 67 65 2b 31 20  |@CMP userpage+1 |
000015a0  5c 20 69 73 20 74 68 69  73 20 74 68 65 20 73 61  |\ is this the sa|
000015b0  6d 65 20 61 73 20 74 68  65 20 6f 6e 65 20 77 65  |me as the one we|
000015c0  20 61 72 65 20 6c 6f 61  64 69 6e 67 3f 0d 07 26  | are loading?..&|
000015d0  29 42 45 51 20 6f 75 74  20 5c 20 6e 6f 74 20 65  |)BEQ out \ not e|
000015e0  6e 64 20 6f 66 20 70 61  67 65 20 69 66 20 74 68  |nd of page if th|
000015f0  65 20 73 61 6d 65 0d 07  30 0d 2e 65 6e 64 66 6f  |e same..0..endfo|
00001600  75 6e 64 0d 07 3a 37 4c  44 41 20 23 26 38 30 20  |und..:7LDA #&80 |
00001610  5c 20 73 61 6d 65 20 6d  61 67 61 7a 69 6e 65 20  |\ same magazine |
00001620  62 75 74 20 64 69 66 66  65 72 65 6e 74 20 70 61  |but different pa|
00001630  67 65 20 6e 75 6d 62 65  72 73 0d 07 44 1f 53 54  |ge numbers..D.ST|
00001640  41 20 67 72 61 62 66 6c  61 67 20 5c 20 70 61 67  |A grabflag \ pag|
00001650  65 20 67 72 61 62 62 65  64 0d 07 4e 08 2e 6f 75  |e grabbed..N..ou|
00001660  74 0d 07 58 07 52 54 53  0d 07 62 0f 2e 63 68 65  |t..X.RTS..b..che|
00001670  63 6b 73 74 61 72 74 0d  07 6c 25 4c 44 41 20 62  |ckstart..l%LDA b|
00001680  75 66 66 65 72 2b 35 20  5c 20 63 68 65 63 6b 20  |uffer+5 \ check |
00001690  66 6f 72 20 73 75 62 74  69 74 6c 65 0d 07 76 18  |for subtitle..v.|
000016a0  80 20 23 26 30 38 20 5c  20 63 68 65 63 6b 20 62  |. #&08 \ check b|
000016b0  69 74 20 33 0d 07 80 1e  42 4e 45 20 6f 75 74 20  |it 3....BNE out |
000016c0  5c 20 72 65 6a 65 63 74  20 73 75 62 74 69 74 6c  |\ reject subtitl|
000016d0  65 73 0d 07 8a 32 4c 44  41 20 6d 61 67 61 7a 69  |es...2LDA magazi|
000016e0  6e 65 20 5c 20 6c 6f 61  64 20 74 68 65 20 68 65  |ne \ load the he|
000016f0  61 64 65 72 20 6d 61 67  61 7a 69 6e 65 20 6e 75  |ader magazine nu|
00001700  6d 62 65 72 0d 07 94 28  43 4d 50 20 75 73 65 72  |mber...(CMP user|
00001710  6d 61 67 20 5c 20 69 73  20 69 74 20 74 68 65 20  |mag \ is it the |
00001720  6f 6e 65 20 77 65 20 77  61 6e 74 3f 0d 07 9e 28  |one we want?...(|
00001730  42 4e 45 20 6e 65 78 74  62 79 74 65 20 5c 20 62  |BNE nextbyte \ b|
00001740  72 61 6e 63 68 20 69 66  20 6e 6f 74 20 74 68 65  |ranch if not the|
00001750  20 6f 6e 65 0d 07 a8 31  4c 44 41 20 75 73 65 72  | one...1LDA user|
00001760  70 61 67 65 20 5c 20 6c  6f 61 64 20 6c 73 62 20  |page \ load lsb |
00001770  6f 66 20 77 61 6e 74 65  64 20 70 61 67 65 20 6e  |of wanted page n|
00001780  75 6d 62 65 72 0d 07 b2  21 43 4d 50 20 62 75 66  |umber...!CMP buf|
00001790  66 65 72 20 5c 20 74 68  65 20 70 61 67 65 20 77  |fer \ the page w|
000017a0  65 20 68 61 76 65 0d 07  bc 30 42 4e 45 20 6e 65  |e have...0BNE ne|
000017b0  78 74 62 79 74 65 20 5c  20 62 72 61 6e 63 68 20  |xtbyte \ branch |
000017c0  69 66 20 6e 6f 74 20 74  68 65 20 6f 6e 65 20 77  |if not the one w|
000017d0  65 20 77 61 6e 74 0d 07  c6 33 4c 44 41 20 75 73  |e want...3LDA us|
000017e0  65 72 70 61 67 65 2b 31  20 5c 20 6c 6f 61 64 20  |erpage+1 \ load |
000017f0  6d 73 62 20 6f 66 20 77  61 6e 74 65 64 20 70 61  |msb of wanted pa|
00001800  67 65 20 6e 75 6d 62 65  72 0d 07 d0 23 43 4d 50  |ge number...#CMP|
00001810  20 62 75 66 66 65 72 2b  31 20 5c 20 74 68 65 20  | buffer+1 \ the |
00001820  70 61 67 65 20 77 65 20  68 61 76 65 0d 07 da 30  |page we have...0|
00001830  42 4e 45 20 6e 65 78 74  62 79 74 65 20 5c 20 62  |BNE nextbyte \ b|
00001840  72 61 6e 63 68 20 69 66  20 6e 6f 74 20 74 68 65  |ranch if not the|
00001850  20 6f 6e 65 20 77 65 20  77 61 6e 74 0d 07 e4 1d  | one we want....|
00001860  4c 44 41 20 23 26 34 30  20 5c 20 6c 6f 61 64 20  |LDA #&40 \ load |
00001870  74 68 69 73 20 70 61 67  65 0d 07 ee 1f 53 54 41  |this page....STA|
00001880  20 67 72 61 62 66 6c 61  67 20 5c 20 70 61 67 65  | grabflag \ page|
00001890  20 6c 6f 61 64 69 6e 67  0d 07 f8 07 52 54 53 0d  | loading....RTS.|
000018a0  08 02 0d 2e 6e 65 78 74  62 79 74 65 0d 08 0c 39  |....nextbyte...9|
000018b0  4c 44 41 20 62 75 66 66  65 72 2b 36 20 5c 20 63  |LDA buffer+6 \ c|
000018c0  68 65 63 6b 20 66 6f 72  20 73 75 70 70 72 65 73  |heck for suppres|
000018d0  73 20 61 6e 64 20 6f 75  74 20 6f 66 20 73 65 71  |s and out of seq|
000018e0  75 65 6e 63 65 0d 08 16  1f 80 20 23 26 30 35 20  |uence..... #&05 |
000018f0  5c 20 63 68 65 63 6b 20  62 69 74 73 20 30 20 61  |\ check bits 0 a|
00001900  6e 64 20 32 0d 08 20 34  42 4e 45 20 72 65 74 75  |nd 2.. 4BNE retu|
00001910  72 6e 20 5c 20 72 65 6a  65 63 74 20 73 75 70 70  |rn \ reject supp|
00001920  72 65 73 73 20 61 6e 64  20 6f 75 74 20 6f 66 20  |ress and out of |
00001930  73 65 71 75 65 6e 63 65  0d 08 2a 2c 4c 53 52 20  |sequence..*,LSR |
00001940  62 75 66 66 65 72 2b 37  20 5c 20 63 68 65 63 6b  |buffer+7 \ check|
00001950  20 66 6f 72 20 73 65 72  69 61 6c 20 6d 61 67 61  | for serial maga|
00001960  7a 69 6e 65 0d 08 34 2d  42 43 53 20 64 69 73 70  |zine..4-BCS disp|
00001970  6c 61 79 20 5c 20 6c 6f  61 64 20 74 68 65 20 72  |lay \ load the r|
00001980  65 73 74 20 6f 66 20 74  68 65 20 68 65 61 64 65  |est of the heade|
00001990  72 0d 08 3e 2a 4c 44 41  20 6d 61 67 61 7a 69 6e  |r..>*LDA magazin|
000019a0  65 20 5c 20 63 75 72 72  65 6e 74 20 6d 61 67 61  |e \ current maga|
000019b0  7a 69 6e 65 20 6e 75 6d  62 65 72 0d 08 48 27 43  |zine number..H'C|
000019c0  4d 50 20 75 73 65 72 6d  61 67 20 5c 20 6c 6f 61  |MP usermag \ loa|
000019d0  64 20 69 66 20 73 61 6d  65 20 6d 61 67 61 7a 69  |d if same magazi|
000019e0  6e 65 0d 08 52 31 42 4e  45 20 72 65 74 75 72 6e  |ne..R1BNE return|
000019f0  20 5c 20 64 6f 6e 27 74  20 6c 6f 61 64 20 69 66  | \ don't load if|
00001a00  20 64 69 66 66 65 72 65  6e 74 20 6d 61 67 61 7a  | different magaz|
00001a10  69 6e 65 0d 08 5c 0c 2e  64 69 73 70 6c 61 79 0d  |ine..\..display.|
00001a20  08 66 2b 4c 44 59 20 23  26 30 38 20 5c 20 68 65  |.f+LDY #&08 \ he|
00001a30  61 64 65 72 20 64 61 74  61 20 73 74 61 72 74 73  |ader data starts|
00001a40  20 61 74 20 62 79 74 65  20 38 0d 08 70 28 42 4e  | at byte 8..p(BN|
00001a50  45 20 72 65 61 64 6d 6f  72 65 20 5c 20 67 6f 20  |E readmore \ go |
00001a60  74 6f 20 72 65 61 64 20  74 68 65 20 68 65 61 64  |to read the head|
00001a70  65 72 0d 08 7a 0e 2e 6e  6f 74 68 65 61 64 65 72  |er..z..notheader|
00001a80  0d 08 84 25 42 49 54 20  67 72 61 62 66 6c 61 67  |...%BIT grabflag|
00001a90  20 5c 20 69 73 20 61 20  70 61 67 65 20 6c 6f 61  | \ is a page loa|
00001aa0  64 69 6e 67 3f 0d 08 8e  2b 42 56 43 20 72 65 74  |ding?...+BVC ret|
00001ab0  75 72 6e 20 5c 20 72 65  74 75 72 6e 20 69 66 20  |urn \ return if |
00001ac0  70 61 67 65 20 6e 6f 74  20 6c 6f 61 64 69 6e 67  |page not loading|
00001ad0  0d 08 98 3a 4c 44 41 20  6d 61 67 61 7a 69 6e 65  |...:LDA magazine|
00001ae0  20 5c 20 69 73 20 74 68  65 20 6d 61 67 61 7a 69  | \ is the magazi|
00001af0  6e 65 20 6e 75 6d 62 65  72 20 74 68 65 20 6f 6e  |ne number the on|
00001b00  65 20 77 65 20 77 61 6e  74 3f 0d 08 a2 0f 43 4d  |e we want?....CM|
00001b10  50 20 75 73 65 72 6d 61  67 0d 08 ac 2d 42 4e 45  |P usermag...-BNE|
00001b20  20 72 65 74 75 72 6e 20  5c 20 72 65 74 75 72 6e  | return \ return|
00001b30  20 69 66 20 64 69 66 66  65 72 65 6e 74 20 6d 61  | if different ma|
00001b40  67 61 7a 69 6e 65 0d 08  b6 20 4c 44 59 20 23 26  |gazine... LDY #&|
00001b50  30 30 20 5c 20 72 65 61  64 20 62 79 74 65 73 20  |00 \ read bytes |
00001b60  30 20 2d 20 33 39 0d 08  c0 0d 2e 72 65 61 64 6d  |0 - 39.....readm|
00001b70  6f 72 65 0d 08 ca 24 4c  44 41 20 64 61 74 61 72  |ore...$LDA datar|
00001b80  65 67 20 5c 20 72 65 61  64 20 64 61 74 61 20 72  |eg \ read data r|
00001b90  65 67 69 73 74 65 72 0d  08 d4 17 84 41 20 23 26  |egister.....A #&|
00001ba0  38 30 20 5c 20 73 65 74  20 62 69 74 20 37 0d 08  |80 \ set bit 7..|
00001bb0  de 27 53 54 41 20 28 77  6f 72 6b 73 70 61 63 65  |.'STA (workspace|
00001bc0  29 2c 59 20 5c 20 73 74  6f 72 65 20 69 6e 20 62  |),Y \ store in b|
00001bd0  75 66 66 65 72 0d 08 e8  19 49 4e 59 20 5c 20 69  |uffer....INY \ i|
00001be0  6e 63 72 65 6d 65 6e 74  20 69 6e 64 65 78 0d 08  |ncrement index..|
00001bf0  f2 19 43 50 59 20 23 26  32 38 20 5c 20 64 65 63  |..CPY #&28 \ dec|
00001c00  69 6d 61 6c 20 34 30 0d  08 fc 2b 42 4e 45 20 72  |imal 40...+BNE r|
00001c10  65 61 64 6d 6f 72 65 20  5c 20 6d 6f 72 65 20 64  |eadmore \ more d|
00001c20  61 74 61 20 69 6e 20 74  68 69 73 20 70 61 63 6b  |ata in this pack|
00001c30  65 74 0d 09 06 0b 2e 72  65 74 75 72 6e 0d 09 10  |et.....return...|
00001c40  07 52 54 53 0d 09 1a 10  2e 63 68 65 63 6b 64 6f  |.RTS.....checkdo|
00001c50  75 62 6c 65 0d 09 24 26  4c 44 58 20 23 26 30 31  |uble..$&LDX #&01|
00001c60  20 5c 20 73 63 72 65 65  6e 20 72 6f 77 20 6e 75  | \ screen row nu|
00001c70  6d 62 65 72 73 20 31 2d  32 33 0d 09 2e 0f 2e 6e  |mbers 1-23.....n|
00001c80  65 78 74 63 6f 6c 75 6d  6e 0d 09 38 29 4c 44 59  |extcolumn..8)LDY|
00001c90  20 23 26 30 30 20 5c 20  73 63 72 65 65 6e 20 63  | #&00 \ screen c|
00001ca0  6f 6c 75 6d 6e 20 6e 75  6d 62 65 72 73 20 30 2d  |olumn numbers 0-|
00001cb0  34 30 0d 09 42 38 4a 53  52 20 73 65 74 75 70 20  |40..B8JSR setup |
00001cc0  5c 20 73 65 74 20 75 70  20 77 6f 72 6b 73 70 61  |\ set up workspa|
00001cd0  63 65 20 66 6f 72 20 69  6e 64 69 72 65 63 74 20  |ce for indirect |
00001ce0  61 64 64 72 65 73 73 69  6e 67 0d 09 4c 0f 2e 73  |addressing..L..s|
00001cf0  69 6e 67 6c 65 6c 6f 6f  70 0d 09 56 15 4c 44 41  |ingleloop..V.LDA|
00001d00  20 28 77 6f 72 6b 73 70  61 63 65 29 2c 59 0d 09  | (workspace),Y..|
00001d10  60 2d 4a 53 52 20 63 6f  6e 63 65 61 6c 20 5c 20  |`-JSR conceal \ |
00001d20  63 68 65 63 6b 20 66 6f  72 20 63 6f 6e 63 65 61  |check for concea|
00001d30  6c 65 64 20 64 69 73 70  6c 61 79 0d 09 6a 2a 43  |led display..j*C|
00001d40  4d 50 20 23 26 38 44 20  5c 20 54 54 58 20 64 6f  |MP #&8D \ TTX do|
00001d50  75 62 6c 65 20 68 65 69  67 68 74 20 63 68 61 72  |uble height char|
00001d60  61 63 74 65 72 0d 09 74  14 42 45 51 20 64 6f 75  |acter..t.BEQ dou|
00001d70  62 6c 65 68 65 69 67 68  74 0d 09 7e 07 49 4e 59  |bleheight..~.INY|
00001d80  0d 09 88 19 43 50 59 20  23 26 32 38 20 5c 20 64  |....CPY #&28 \ d|
00001d90  65 63 69 6d 61 6c 20 34  30 0d 09 92 12 42 43 43  |ecimal 40....BCC|
00001da0  20 73 69 6e 67 6c 65 6c  6f 6f 70 0d 09 9c 0d 2e  | singleloop.....|
00001db0  63 61 72 72 79 73 65 74  0d 09 a6 07 49 4e 58 0d  |carryset....INX.|
00001dc0  09 b0 19 43 50 58 20 23  26 31 38 20 5c 20 64 65  |...CPX #&18 \ de|
00001dd0  63 69 6d 61 6c 20 32 34  0d 09 ba 12 42 43 43 20  |cimal 24....BCC |
00001de0  6e 65 78 74 63 6f 6c 75  6d 6e 0d 09 c4 07 52 54  |nextcolumn....RT|
00001df0  53 0d 09 ce 11 2e 64 6f  75 62 6c 65 68 65 69 67  |S.....doubleheig|
00001e00  68 74 0d 09 d8 0c 4c 44  59 20 23 26 30 30 0d 09  |ht....LDY #&00..|
00001e10  e2 07 54 58 41 0d 09 ec  1a 50 48 41 20 5c 20 73  |..TXA....PHA \ s|
00001e20  74 6f 72 65 20 72 6f 77  20 6e 75 6d 62 65 72 0d  |tore row number.|
00001e30  09 f6 07 49 4e 58 0d 0a  00 07 54 58 41 0d 0a 0a  |...INX....TXA...|
00001e40  20 41 53 4c 20 41 20 5c  20 28 72 6f 77 20 6e 75  | ASL A \ (row nu|
00001e50  6d 62 65 72 20 2b 20 31  29 20 2a 20 32 0d 0a 14  |mber + 1) * 2...|
00001e60  07 54 41 58 0d 0a 1e 13  4c 44 41 20 62 75 66 66  |.TAX....LDA buff|
00001e70  74 61 62 6c 65 2c 58 0d  0a 28 13 53 54 41 20 64  |table,X..(.STA d|
00001e80  65 73 74 69 6e 61 74 69  6f 6e 0d 0a 32 15 4c 44  |estination..2.LD|
00001e90  41 20 62 75 66 66 74 61  62 6c 65 2b 31 2c 58 0d  |A bufftable+1,X.|
00001ea0  0a 3c 15 53 54 41 20 64  65 73 74 69 6e 61 74 69  |.<.STA destinati|
00001eb0  6f 6e 2b 31 0d 0a 46 07  50 4c 41 0d 0a 50 1c 54  |on+1..F.PLA..P.T|
00001ec0  41 58 20 5c 20 72 65 73  74 6f 72 65 20 72 6f 77  |AX \ restore row|
00001ed0  20 6e 75 6d 62 65 72 0d  0a 5a 0f 2e 64 6f 75 62  | number..Z..doub|
00001ee0  6c 65 6c 6f 6f 70 0d 0a  64 15 4c 44 41 20 28 77  |leloop..d.LDA (w|
00001ef0  6f 72 6b 73 70 61 63 65  29 2c 59 0d 0a 6e 2d 4a  |orkspace),Y..n-J|
00001f00  53 52 20 63 6f 6e 63 65  61 6c 20 5c 20 63 68 65  |SR conceal \ che|
00001f10  63 6b 20 66 6f 72 20 63  6f 6e 63 65 61 6c 65 64  |ck for concealed|
00001f20  20 64 69 73 70 6c 61 79  0d 0a 78 17 53 54 41 20  | display..x.STA |
00001f30  28 64 65 73 74 69 6e 61  74 69 6f 6e 29 2c 59 0d  |(destination),Y.|
00001f40  0a 82 07 49 4e 59 0d 0a  8c 19 43 50 59 20 23 26  |...INY....CPY #&|
00001f50  32 38 20 5c 20 64 65 63  69 6d 61 6c 20 34 30 0d  |28 \ decimal 40.|
00001f60  0a 96 12 42 43 43 20 64  6f 75 62 6c 65 6c 6f 6f  |...BCC doubleloo|
00001f70  70 0d 0a a0 07 49 4e 58  0d 0a aa 19 43 50 58 20  |p....INX....CPX |
00001f80  23 26 31 37 20 5c 20 64  65 63 69 6d 61 6c 20 32  |#&17 \ decimal 2|
00001f90  33 0d 0a b4 10 42 43 43  20 63 61 72 72 79 73 65  |3....BCC carryse|
00001fa0  74 0d 0a be 07 52 54 53  0d 0a c8 0c 2e 63 6f 6e  |t....RTS.....con|
00001fb0  63 65 61 6c 0d 0a d2 2c  43 4d 50 20 23 26 39 38  |ceal...,CMP #&98|
00001fc0  20 5c 20 54 54 58 20 63  6f 6e 63 65 61 6c 20 64  | \ TTX conceal d|
00001fd0  69 73 70 6c 61 79 20 63  68 61 72 61 63 74 65 72  |isplay character|
00001fe0  0d 0a dc 0e 42 4e 45 20  67 6f 62 61 63 6b 0d 0a  |....BNE goback..|
00001ff0  e6 29 4c 44 41 20 23 97  28 22 20 22 29 20 5c 20  |.)LDA #.(" ") \ |
00002000  73 75 62 73 74 69 74 75  74 65 20 77 69 74 68 20  |substitute with |
00002010  61 20 73 70 61 63 65 0d  0a f0 15 53 54 41 20 28  |a space....STA (|
00002020  77 6f 72 6b 73 70 61 63  65 29 2c 59 0d 0a fa 0b  |workspace),Y....|
00002030  2e 67 6f 62 61 63 6b 0d  0b 04 07 52 54 53 0d 0b  |.goback....RTS..|
00002040  0e 0a 2e 73 65 74 75 70  0d 0b 18 07 54 58 41 0d  |...setup....TXA.|
00002050  0b 22 1a 50 48 41 20 5c  20 73 74 6f 72 65 20 72  |.".PHA \ store r|
00002060  6f 77 20 6e 75 6d 62 65  72 0d 0b 2c 1c 41 53 4c  |ow number..,.ASL|
00002070  20 41 20 5c 20 28 72 6f  77 20 6e 75 6d 62 65 72  | A \ (row number|
00002080  29 20 2a 20 32 0d 0b 36  07 54 41 58 0d 0b 40 13  |) * 2..6.TAX..@.|
00002090  4c 44 41 20 62 75 66 66  74 61 62 6c 65 2c 58 0d  |LDA bufftable,X.|
000020a0  0b 4a 11 53 54 41 20 77  6f 72 6b 73 70 61 63 65  |.J.STA workspace|
000020b0  0d 0b 54 15 4c 44 41 20  62 75 66 66 74 61 62 6c  |..T.LDA bufftabl|
000020c0  65 2b 31 2c 58 0d 0b 5e  13 53 54 41 20 77 6f 72  |e+1,X..^.STA wor|
000020d0  6b 73 70 61 63 65 2b 31  0d 0b 68 07 50 4c 41 0d  |kspace+1..h.PLA.|
000020e0  0b 72 1c 54 41 58 20 5c  20 72 65 73 74 6f 72 65  |.r.TAX \ restore|
000020f0  20 72 6f 77 20 6e 75 6d  62 65 72 0d 0b 7c 07 52  | row number..|.R|
00002100  54 53 0d 0b 86 0d 2e 74  72 61 6e 73 66 65 72 0d  |TS.....transfer.|
00002110  0b 90 1f 4c 44 58 20 23  26 30 31 20 5c 20 73 63  |...LDX #&01 \ sc|
00002120  72 65 65 6e 20 72 6f 77  73 20 31 2d 32 33 0d 0b  |reen rows 1-23..|
00002130  9a 0d 2e 6e 65 78 74 6c  69 6e 65 0d 0b a4 1b 4c  |...nextline....L|
00002140  44 59 20 23 26 30 30 20  5c 20 63 6f 6c 75 6d 6e  |DY #&00 \ column|
00002150  73 20 30 2d 33 39 0d 0b  ae 0d 4a 53 52 20 76 64  |s 0-39....JSR vd|
00002160  75 33 31 0d 0b b8 38 4a  53 52 20 73 65 74 75 70  |u31...8JSR setup|
00002170  20 5c 20 73 65 74 20 75  70 20 77 6f 72 6b 73 70  | \ set up worksp|
00002180  61 63 65 20 66 6f 72 20  69 6e 64 69 72 65 63 74  |ace for indirect|
00002190  20 61 64 64 72 65 73 73  69 6e 67 0d 0b c2 10 2e  | addressing.....|
000021a0  77 72 69 74 65 73 63 72  65 65 6e 0d 0b cc 2d 4c  |writescreen...-L|
000021b0  44 41 20 28 77 6f 72 6b  73 70 61 63 65 29 2c 59  |DA (workspace),Y|
000021c0  20 5c 20 6c 6f 61 64 20  64 61 74 61 20 66 72 6f  | \ load data fro|
000021d0  6d 20 62 75 66 66 65 72  0d 0b d6 20 4a 53 52 20  |m buffer... JSR |
000021e0  6f 73 77 72 63 68 20 5c  20 77 72 69 74 65 20 74  |oswrch \ write t|
000021f0  6f 20 73 63 72 65 65 6e  0d 0b e0 21 4c 44 41 20  |o screen...!LDA |
00002200  23 97 28 22 20 22 29 20  5c 20 73 70 61 63 65 20  |#.(" ") \ space |
00002210  63 68 61 72 61 63 74 65  72 0d 0b ea 24 53 54 41  |character...$STA|
00002220  20 28 77 6f 72 6b 73 70  61 63 65 29 2c 59 20 5c  | (workspace),Y \|
00002230  20 63 6c 65 61 72 20 62  75 66 66 65 72 0d 0b f4  | clear buffer...|
00002240  07 49 4e 59 0d 0b fe 19  43 50 59 20 23 26 32 38  |.INY....CPY #&28|
00002250  20 5c 20 64 65 63 69 6d  61 6c 20 34 30 0d 0c 08  | \ decimal 40...|
00002260  13 42 43 43 20 77 72 69  74 65 73 63 72 65 65 6e  |.BCC writescreen|
00002270  0d 0c 12 07 49 4e 58 0d  0c 1c 19 43 50 58 20 23  |....INX....CPX #|
00002280  26 31 38 20 5c 20 64 65  63 69 6d 61 6c 20 32 34  |&18 \ decimal 24|
00002290  0d 0c 26 10 42 43 43 20  6e 65 78 74 6c 69 6e 65  |..&.BCC nextline|
000022a0  0d 0c 30 07 52 54 53 0d  0c 3a 0a 2e 76 64 75 33  |..0.RTS..:..vdu3|
000022b0  31 0d 0c 44 19 4c 44 41  20 23 26 31 46 20 5c 20  |1..D.LDA #&1F \ |
000022c0  64 65 63 69 6d 61 6c 20  33 31 0d 0c 4e 0e 4a 53  |decimal 31..N.JS|
000022d0  52 20 6f 73 77 72 63 68  0d 0c 58 07 54 59 41 0d  |R oswrch..X.TYA.|
000022e0  0c 62 0e 4a 53 52 20 6f  73 77 72 63 68 0d 0c 6c  |.b.JSR oswrch..l|
000022f0  07 54 58 41 0d 0c 76 1b  4a 4d 50 20 6f 73 77 72  |.TXA..v.JMP oswr|
00002300  63 68 20 5c 20 61 6e 64  20 72 65 74 75 72 6e 0d  |ch \ and return.|
00002310  0c 80 0d 2e 6f 6c 64 69  72 71 32 76 0d 0c 8a 0c  |....oldirq2v....|
00002320  45 51 55 57 20 26 30 30  0d 0c 94 0d 2e 68 61 6d  |EQUW &00.....ham|
00002330  74 61 62 6c 65 0d 0c 9e  12 45 51 55 44 20 26 30  |table....EQUD &0|
00002340  31 30 31 46 46 30 31 0d  0c a8 12 45 51 55 44 20  |101FF01....EQUD |
00002350  26 46 46 30 31 30 30 46  46 0d 0c b2 12 45 51 55  |&FF0100FF....EQU|
00002360  44 20 26 46 46 30 31 30  32 46 46 0d 0c bc 12 45  |D &FF0102FF....E|
00002370  51 55 44 20 26 30 37 46  46 46 46 30 41 0d 0c c6  |QUD &07FFFF0A...|
00002380  12 45 51 55 44 20 26 46  46 30 31 30 30 46 46 0d  |.EQUD &FF0100FF.|
00002390  0c d0 12 45 51 55 44 20  26 30 30 46 46 30 30 30  |...EQUD &00FF000|
000023a0  30 0d 0c da 12 45 51 55  44 20 26 30 42 46 46 46  |0....EQUD &0BFFF|
000023b0  46 30 36 0d 0c e4 12 45  51 55 44 20 26 46 46 30  |F06....EQUD &FF0|
000023c0  33 30 30 46 46 0d 0c ee  12 45 51 55 44 20 26 46  |300FF....EQUD &F|
000023d0  46 30 31 30 43 46 46 0d  0c f8 12 45 51 55 44 20  |F010CFF....EQUD |
000023e0  26 30 37 46 46 46 46 30  34 0d 0d 02 12 45 51 55  |&07FFFF04....EQU|
000023f0  44 20 26 30 37 46 46 46  46 30 36 0d 0d 0c 12 45  |D &07FFFF06....E|
00002400  51 55 44 20 26 30 37 30  37 30 37 46 46 0d 0d 16  |QUD &070707FF...|
00002410  12 45 51 55 44 20 26 30  35 46 46 46 46 30 36 0d  |.EQUD &05FFFF06.|
00002420  0d 20 12 45 51 55 44 20  26 46 46 30 44 30 30 46  |. .EQUD &FF0D00F|
00002430  46 0d 0d 2a 12 45 51 55  44 20 26 46 46 30 36 30  |F..*.EQUD &FF060|
00002440  36 30 36 0d 0d 34 12 45  51 55 44 20 26 30 37 46  |606..4.EQUD &07F|
00002450  46 46 46 30 36 0d 0d 3e  12 45 51 55 44 20 26 46  |FFF06..>.EQUD &F|
00002460  46 30 31 30 32 46 46 0d  0d 48 12 45 51 55 44 20  |F0102FF..H.EQUD |
00002470  26 30 39 46 46 46 46 30  34 0d 0d 52 12 45 51 55  |&09FFFF04..R.EQU|
00002480  44 20 26 30 32 46 46 30  32 30 32 0d 0d 5c 12 45  |D &02FF0202..\.E|
00002490  51 55 44 20 26 46 46 30  33 30 32 46 46 0d 0d 66  |QUD &FF0302FF..f|
000024a0  12 45 51 55 44 20 26 30  35 46 46 46 46 30 38 0d  |.EQUD &05FFFF08.|
000024b0  0d 70 12 45 51 55 44 20  26 46 46 30 33 30 30 46  |.p.EQUD &FF0300F|
000024c0  46 0d 0d 7a 12 45 51 55  44 20 26 46 46 30 33 30  |F..z.EQUD &FF030|
000024d0  32 46 46 0d 0d 84 12 45  51 55 44 20 26 30 33 30  |2FF....EQUD &030|
000024e0  33 46 46 30 33 0d 0d 8e  12 45 51 55 44 20 26 30  |3FF03....EQUD &0|
000024f0  35 46 46 46 46 30 34 0d  0d 98 12 45 51 55 44 20  |5FFFF04....EQUD |
00002500  26 46 46 30 34 30 34 30  34 0d 0d a2 12 45 51 55  |&FF040404....EQU|
00002510  44 20 26 46 46 30 46 30  32 46 46 0d 0d ac 12 45  |D &FF0F02FF....E|
00002520  51 55 44 20 26 30 37 46  46 46 46 30 34 0d 0d b6  |QUD &07FFFF04...|
00002530  12 45 51 55 44 20 26 30  35 30 35 30 35 46 46 0d  |.EQUD &050505FF.|
00002540  0d c0 12 45 51 55 44 20  26 30 35 46 46 46 46 30  |...EQUD &05FFFF0|
00002550  34 0d 0d ca 12 45 51 55  44 20 26 30 35 46 46 46  |4....EQUD &05FFF|
00002560  46 30 36 0d 0d d4 12 45  51 55 44 20 26 46 46 30  |F06....EQUD &FF0|
00002570  33 30 45 46 46 0d 0d de  12 45 51 55 44 20 26 46  |30EFF....EQUD &F|
00002580  46 30 31 30 43 46 46 0d  0d e8 12 45 51 55 44 20  |F010CFF....EQUD |
00002590  26 30 39 46 46 46 46 30  41 0d 0d f2 12 45 51 55  |&09FFFF0A....EQU|
000025a0  44 20 26 30 42 46 46 46  46 30 41 0d 0d fc 12 45  |D &0BFFFF0A....E|
000025b0  51 55 44 20 26 46 46 30  41 30 41 30 41 0d 0e 06  |QUD &FF0A0A0A...|
000025c0  12 45 51 55 44 20 26 30  42 46 46 46 46 30 38 0d  |.EQUD &0BFFFF08.|
000025d0  0e 10 12 45 51 55 44 20  26 46 46 30 44 30 30 46  |...EQUD &FF0D00F|
000025e0  46 0d 0e 1a 12 45 51 55  44 20 26 30 42 30 42 30  |F....EQUD &0B0B0|
000025f0  42 46 46 0d 0e 24 12 45  51 55 44 20 26 30 42 46  |BFF..$.EQUD &0BF|
00002600  46 46 46 30 41 0d 0e 2e  12 45 51 55 44 20 26 30  |FFF0A....EQUD &0|
00002610  43 46 46 30 43 30 43 0d  0e 38 12 45 51 55 44 20  |CFF0C0C..8.EQUD |
00002620  26 46 46 30 44 30 43 46  46 0d 0e 42 12 45 51 55  |&FF0D0CFF..B.EQU|
00002630  44 20 26 46 46 30 46 30  43 46 46 0d 0e 4c 12 45  |D &FF0F0CFF..L.E|
00002640  51 55 44 20 26 30 37 46  46 46 46 30 41 0d 0e 56  |QUD &07FFFF0A..V|
00002650  12 45 51 55 44 20 26 46  46 30 44 30 43 46 46 0d  |.EQUD &FF0D0CFF.|
00002660  0e 60 12 45 51 55 44 20  26 30 44 30 44 46 46 30  |.`.EQUD &0D0DFF0|
00002670  44 0d 0e 6a 12 45 51 55  44 20 26 30 42 46 46 46  |D..j.EQUD &0BFFF|
00002680  46 30 36 0d 0e 74 12 45  51 55 44 20 26 46 46 30  |F06..t.EQUD &FF0|
00002690  44 30 45 46 46 0d 0e 7e  12 45 51 55 44 20 26 30  |D0EFF..~.EQUD &0|
000026a0  39 46 46 46 46 30 38 0d  0e 88 12 45 51 55 44 20  |9FFFF08....EQUD |
000026b0  26 30 39 30 39 30 39 46  46 0d 0e 92 12 45 51 55  |&090909FF....EQU|
000026c0  44 20 26 46 46 30 46 30  32 46 46 0d 0e 9c 12 45  |D &FF0F02FF....E|
000026d0  51 55 44 20 26 30 39 46  46 46 46 30 41 0d 0e a6  |QUD &09FFFF0A...|
000026e0  12 45 51 55 44 20 26 46  46 30 38 30 38 30 38 0d  |.EQUD &FF080808.|
000026f0  0e b0 12 45 51 55 44 20  26 30 39 46 46 46 46 30  |...EQUD &09FFFF0|
00002700  38 0d 0e ba 12 45 51 55  44 20 26 30 42 46 46 46  |8....EQUD &0BFFF|
00002710  46 30 38 0d 0e c4 12 45  51 55 44 20 26 46 46 30  |F08....EQUD &FF0|
00002720  33 30 45 46 46 0d 0e ce  12 45 51 55 44 20 26 46  |30EFF....EQUD &F|
00002730  46 30 46 30 43 46 46 0d  0e d8 12 45 51 55 44 20  |F0F0CFF....EQUD |
00002740  26 30 39 46 46 46 46 30  34 0d 0e e2 12 45 51 55  |&09FFFF04....EQU|
00002750  44 20 26 30 46 30 46 46  46 30 46 0d 0e ec 12 45  |D &0F0FFF0F....E|
00002760  51 55 44 20 26 46 46 30  46 30 45 46 46 0d 0e f6  |QUD &FF0F0EFF...|
00002770  12 45 51 55 44 20 26 30  35 46 46 46 46 30 38 0d  |.EQUD &05FFFF08.|
00002780  0f 00 12 45 51 55 44 20  26 46 46 30 44 30 45 46  |...EQUD &FF0D0EF|
00002790  46 0d 0f 0a 12 45 51 55  44 20 26 46 46 30 46 30  |F....EQUD &FF0F0|
000027a0  45 46 46 0d 0f 14 12 45  51 55 44 20 26 30 45 46  |EFF....EQUD &0EF|
000027b0  46 30 45 30 45 0d 0f 1e  0e 2e 62 75 66 66 74 61  |F0E0E.....buffta|
000027c0  62 6c 65 0d 0f 28 0f 45  51 55 57 20 62 75 66 66  |ble..(.EQUW buff|
000027d0  65 72 0d 0f 32 12 45 51  55 57 20 62 75 66 66 65  |er..2.EQUW buffe|
000027e0  72 2b 34 30 0d 0f 3c 16  45 51 55 57 20 62 75 66  |r+40..<.EQUW buf|
000027f0  66 65 72 2b 28 32 2a 34  30 29 0d 0f 46 16 45 51  |fer+(2*40)..F.EQ|
00002800  55 57 20 62 75 66 66 65  72 2b 28 33 2a 34 30 29  |UW buffer+(3*40)|
00002810  0d 0f 50 16 45 51 55 57  20 62 75 66 66 65 72 2b  |..P.EQUW buffer+|
00002820  28 34 2a 34 30 29 0d 0f  5a 16 45 51 55 57 20 62  |(4*40)..Z.EQUW b|
00002830  75 66 66 65 72 2b 28 35  2a 34 30 29 0d 0f 64 16  |uffer+(5*40)..d.|
00002840  45 51 55 57 20 62 75 66  66 65 72 2b 28 36 2a 34  |EQUW buffer+(6*4|
00002850  30 29 0d 0f 6e 16 45 51  55 57 20 62 75 66 66 65  |0)..n.EQUW buffe|
00002860  72 2b 28 37 2a 34 30 29  0d 0f 78 16 45 51 55 57  |r+(7*40)..x.EQUW|
00002870  20 62 75 66 66 65 72 2b  28 38 2a 34 30 29 0d 0f  | buffer+(8*40)..|
00002880  82 16 45 51 55 57 20 62  75 66 66 65 72 2b 28 39  |..EQUW buffer+(9|
00002890  2a 34 30 29 0d 0f 8c 17  45 51 55 57 20 62 75 66  |*40)....EQUW buf|
000028a0  66 65 72 2b 28 31 30 2a  34 30 29 0d 0f 96 17 45  |fer+(10*40)....E|
000028b0  51 55 57 20 62 75 66 66  65 72 2b 28 31 31 2a 34  |QUW buffer+(11*4|
000028c0  30 29 0d 0f a0 17 45 51  55 57 20 62 75 66 66 65  |0)....EQUW buffe|
000028d0  72 2b 28 31 32 2a 34 30  29 0d 0f aa 17 45 51 55  |r+(12*40)....EQU|
000028e0  57 20 62 75 66 66 65 72  2b 28 31 33 2a 34 30 29  |W buffer+(13*40)|
000028f0  0d 0f b4 17 45 51 55 57  20 62 75 66 66 65 72 2b  |....EQUW buffer+|
00002900  28 31 34 2a 34 30 29 0d  0f be 17 45 51 55 57 20  |(14*40)....EQUW |
00002910  62 75 66 66 65 72 2b 28  31 35 2a 34 30 29 0d 0f  |buffer+(15*40)..|
00002920  c8 17 45 51 55 57 20 62  75 66 66 65 72 2b 28 31  |..EQUW buffer+(1|
00002930  36 2a 34 30 29 0d 0f d2  17 45 51 55 57 20 62 75  |6*40)....EQUW bu|
00002940  66 66 65 72 2b 28 31 37  2a 34 30 29 0d 0f dc 17  |ffer+(17*40)....|
00002950  45 51 55 57 20 62 75 66  66 65 72 2b 28 31 38 2a  |EQUW buffer+(18*|
00002960  34 30 29 0d 0f e6 17 45  51 55 57 20 62 75 66 66  |40)....EQUW buff|
00002970  65 72 2b 28 31 39 2a 34  30 29 0d 0f f0 17 45 51  |er+(19*40)....EQ|
00002980  55 57 20 62 75 66 66 65  72 2b 28 32 30 2a 34 30  |UW buffer+(20*40|
00002990  29 0d 0f fa 17 45 51 55  57 20 62 75 66 66 65 72  |)....EQUW buffer|
000029a0  2b 28 32 31 2a 34 30 29  0d 10 04 17 45 51 55 57  |+(21*40)....EQUW|
000029b0  20 62 75 66 66 65 72 2b  28 32 32 2a 34 30 29 0d  | buffer+(22*40).|
000029c0  10 0e 17 45 51 55 57 20  62 75 66 66 65 72 2b 28  |...EQUW buffer+(|
000029d0  32 33 2a 34 30 29 0d 10  18 17 45 51 55 57 20 62  |23*40)....EQUW b|
000029e0  75 66 66 65 72 2b 28 32  34 2a 34 30 29 0d 10 22  |uffer+(24*40).."|
000029f0  05 5d 0d 10 2c 05 ed 0d  10 36 05 e1 0d ff        |.]..,....6....|
000029fe
27-03-89/GRABBER.m0
27-03-89/GRABBER.m1
27-03-89/GRABBER.m2
27-03-89/GRABBER.m4
27-03-89/GRABBER.m5