Home » CEEFAX disks » telesoftware15.adl » 14-04-89/TSDP2

14-04-89/TSDP2

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 » telesoftware15.adl
Filename: 14-04-89/TSDP2
Read OK:
File size: 1F41 bytes
Load address: FFFF1A00
Exec address: FFFF8023
File contents
   10REM> TSDP2
   20MODE7
   30VDU23,1,0;0;0;0;
   40DIM mcode &500 :REM: space for machine code
   50DIM buff 40 :REM: TSDP buffer
   60PROCmcode :REM: assemble machine code
   70ttx$=CHR$(141)+CHR$(132)+CHR$(157)+CHR$(131)+"Television Service Data Packet 2  "+CHR$(156)
   80PRINTTAB(0,1)ttx$
   90PRINTTAB(0,2)ttx$
  100INPUTTAB(10,4)"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
  140PRINTTAB(5,7)"TSDP type ="
  150PRINTTAB(5,8)"Initial page ="
  160PRINTTAB(5,9)"Network ID code ="
  170PRINTTAB(5,10)"Sound ="
  180PRINTTAB(5,11)"Rating ="
  190PRINTTAB(5,12)"Data ="
  200PRINTTAB(5,13)"Day ="
  210PRINTTAB(5,14)"Month ="
  220PRINTTAB(5,15)"Hours ="
  230PRINTTAB(5,16)"Minutes ="
  240PRINTTAB(5,17)"Country ="
  250PRINTTAB(5,18)"Source ="
  260PRINTTAB(5,19)"Message ="
  270CALL mcode :REM: enable TTX interrupts
  280ONERROR GOTO 320
  290REPEAT
  300IF grabflag?0=2 PROCdisplay
  310UNTIL FALSE
  320CALL mcode :REM: disable TTX interrupts
  330VDU31,0,21,23,1,1;0;0;0;
  340END
  350DEFPROCdisplay
  360PRINTTAB(17,7);buff?0 :REM: TSDP type
  370b0=((buff?4)AND8)<>0:REM: bit 0 of magazine number
  380b1=((buff?6)AND4)<>0:REM: bit 1 of magazine number
  390b2=((buff?6)AND8)<>0:REM: bit 2 of magazine number
  400init=0:REM: initial magazine number
  410IF b0 init=1
  420IF b1 init=init+2
  430IF b2 init=init+4
  440PRINTTAB(20,8);~init;:REM: initial magazine
  450PRINT;~buff?2;~buff?1;:REM: initial page
  460PRINT;" ";~((buff?6)AND3);~buff?5;~((buff?4)AND7);~buff?3:REM: initial sub-page
  470PRINTTAB(23,9);~buff?7;~buff?8;~buff?9;~buff?10 :REM: Network ID code
  480CALL reverse :REM: reverse bits in VPS
  490sound=((vps?0)AND192)DIV64
  500IF sound=0 OR sound=3 PRINTTAB(13,10)"two channel sound"
  510IF sound=1 PRINTTAB(13,10)"stereo"
  520IF sound=2 PRINTTAB(13,10)"mono"
  530rate=((vps?0)AND48)DIV16
  540IF rate=2 PRINTTAB(14,11)"unrated" ELSE PRINTTAB(14,11)"restricted" :REM: programme rating
  550valid=((vps?0)AND12)DIV4 :REM: data validity
  560IF valid>1 PRINTTAB(12,12)"valid" ELSE PRINTTAB(12,12)"invalid":GOTO 650
  570PRINTTAB(11,13);(((vps?0)AND3)*8)+(((vps?1)AND224)DIV32) :REM: day
  580PRINTTAB(13,14);((vps?1)AND30)DIV2 :REM: month
  590PRINTTAB(13,15);(((vps?1)AND1)*32)+(((vps?2)AND240)DIV16) :REM: hours
  600PRINTTAB(15,16);(((vps?2)AND15)*4)+(((vps?3)AND192)DIV64) :REM: minutes
  610country=((vps?3)AND61)DIV4 :REM: country of origin
  620IF country=12 PRINTTAB(15,17)"UK" ELSE PRINTTAB(15,17);country
  630PRINTTAB(14,18);(((vps?3)AND3)*16)+(((vps?4)AND240)DIV16) :REM: source
  640VDU31,15,19 :REM: print message
  650FOR byte=20 TO 39
  660VDU (buff?byte OR &80)
  670NEXT
  680VDU7
  690grabflag?0=0 :REM: grabflag = searching
  700ENDPROC
  710DEFPROCmcode
  720packet=&70 :REM: row number of current packet
  730magazine=&71 :REM: magazine number of current page
  740grabflag=&72 :REM: page grabber flag
  750channel=&73 :REM: TV channel
  760temp=&74 :REM: temporary store
  770vps=&75 :REM: decoded VPS, 5 bytes
  780savereg=&FC :REM: interrupt accumulator save register
  790irq2v=&206 :REM: IRQ2 vector
  800ttxcontrol=&FC10 :REM: TTX control register, write only
  810ttxstatus=&FC10 :REM: TTX status register, read only
  820rowreg=&FC11 :REM: TTX row register, write only
  830datareg=&FC12 :REM: TTX data register, read & write
  840statclr=&FC13 :REM: TTX clear status register, read & write
  850FOR pass=0 TO 2 STEP 2
  860P%=mcode
  870[OPT pass
  880LDA #&00
  890STA grabflag \ grabflag = searching
  900LDX irq2v \ load secondary interrupt vector
  910LDY irq2v+1
  920CPY #interrupt DIV 256 \ has the vector been altered?
  930BEQ disable \ branch if interrupt vector altered
  940STX oldirq2v \ save secondary interrupt vector
  950STY oldirq2v+1
  960LDX #interrupt MOD 256 \ install new interrupt routine
  970LDY #interrupt DIV 256
  980SEI \ disable interrupts when altering vector
  990STX irq2v
 1000STY irq2v+1
 1010CLI \ re-enable interrupts
 1020LDA channel \ load (channel number + #&1C)
 1030STA ttxcontrol \ enable TTX
 1040RTS \ return to BASIC
 1050.disable
 1060LDA #&00
 1070STA ttxcontrol \ disable TTX
 1080LDX oldirq2v \ load original vector
 1090LDY oldirq2v+1
 1100SEI \ disable interrupts when altering vector
 1110STX irq2v \ restore original vector
 1120STY irq2v+1
 1130CLI \ re-enable interrupts
 1140RTS \ return to BASIC
 1150.interrupt
 1160BIT ttxstatus \ poll TTX hardware
 1170BMI ttxinter \ branch if TTX interrupt
 1180JMP (oldirq2v) \ not TTX interrupt
 1190.ttxinter
 1200LDA savereg \ interrupt accumulator save register
 1210PHA \ push interrupt accumulator save register
 1220TXA
 1230PHA \ push X
 1240TYA
 1250PHA \ push Y
 1260LDA grabflag \ has TSDP been grabbed?
 1270BNE clearstatus \ clear status and RTI if TSDP grabbed
 1280CLD \ clear decimal flag
 1290LDY #&00 \ start with row 0
 1300.readttxt
 1310STY rowreg \ try rows 0 to 15
 1320LDA datareg \ load framing code (#&27)
 1330BEQ emptyrow \ if zero try next row
 1340TYA
 1350PHA \ save row number
 1360JSR readpacket
 1370PLA
 1380TAY \ restore row number
 1390.emptyrow
 1400INY \ increment row number
 1410CPY #&10 \ try rows 0 - 15
 1420BNE readttxt
 1430.clearstatus
 1440LDA #&00
 1450LDY #&0F \ clear 16 rows in adaptor
 1460.clearloop
 1470STY rowreg
 1480STA datareg
 1490DEY
 1500BPL clearloop
 1510STA statclr \ clear status flags before returning
 1520PLA
 1530TAY \ restore Y
 1540PLA
 1550TAX \ restore X
 1560PLA
 1570STA savereg \ restore interrupt accumulator save register
 1580RTI \ return from interrupt
 1590.readpacket
 1600LDA grabflag \ just checking
 1610BNE return
 1620LDY datareg \ read magazine number
 1630LDA hamtable,Y \ de-ham it
 1640BMI return \ stop loading if error
 1650STA magazine \ save magazine number
 1660LDY datareg \ read packet number
 1670LDA hamtable,Y \ de-ham it
 1680BMI return \ stop loading if error
 1690STA packet \ save packet number
 1700LDA magazine \ load magazine number
 1710CMP #&08 \ bit 3 of mag. number is bit 0 of packet number
 1720ROL packet \ 5 bit packet number
 1730AND #&07 \ use only bits 0-2
 1740CMP #&00 \ is this magazine 0?
 1750BNE return
 1760LDA packet
 1770CMP #&1E \ look for TSDP
 1780BNE return \ ignore all other packets
 1790LDY #&00 \ read bytes 0 - 39
 1800.readmore
 1810LDX datareg \ read data register
 1820LDA hamtable,X \ de-ham the byte
 1830BMI return \ return if error
 1840STA buff,Y \ store in buffer
 1850INY \ increment index
 1860CPY #&14
 1870BCC readmore \ go back for more
 1880.readagain
 1890LDA datareg \ read data register
 1900STA buff,Y \ store in buffer
 1910INY \ increment index
 1920CPY #&28 \ decimal 40
 1930BNE readagain \ go back for more
 1940LDA buff \ TSDP type byte
 1950AND #&0E \ %00001110
 1960STA grabflag \ grabflag = 0 or 2
 1970.return
 1980RTS
 1990.reverse
 2000LDX #&14 \ VPS nybbles in bytes &0B - &13
 2010LDY #&04 \ decode VPS into 5 bytes
 2020.join
 2030LDA buff,X \ load VPS nybble
 2040ASL A \ move low nybble into high
 2050ASL A
 2060ASL A
 2070ASL A
 2080STA temp \ temporary zero page store
 2090DEX \ point to next nybble
 2100LDA buff,X \ load VPS nybble
 2110ORA temp \ join two nybbles into one byte
 2120STA vps,Y \ and store in zero page
 2130DEX \ point to next nybble
 2140DEY \ point to next byte
 2150BPL join \ branch if more VPS bytes
 2160LDX #&04 \ VPS now in 5 zero page bytes
 2170.outerloop
 2180LDA vps,X \ reverse bits in all VPS bytes
 2190STA temp \ temporary zero page store
 2200LDY #&07
 2210.innerloop
 2220ROL temp \ bit into carry
 2230ROR A \ carry into accumulator
 2240DEY
 2250BPL innerloop
 2260STA vps,X \ store reversed byte
 2270DEX
 2280BPL outerloop \ go back if more VPS bytes
 2290RTS
 2300.oldirq2v
 2310EQUW &00
 2320.hamtable
 2330EQUD &0101FF01
 2340EQUD &FF0100FF
 2350EQUD &FF0102FF
 2360EQUD &07FFFF0A
 2370EQUD &FF0100FF
 2380EQUD &00FF0000
 2390EQUD &0BFFFF06
 2400EQUD &FF0300FF
 2410EQUD &FF010CFF
 2420EQUD &07FFFF04
 2430EQUD &07FFFF06
 2440EQUD &070707FF
 2450EQUD &05FFFF06
 2460EQUD &FF0D00FF
 2470EQUD &FF060606
 2480EQUD &07FFFF06
 2490EQUD &FF0102FF
 2500EQUD &09FFFF04
 2510EQUD &02FF0202
 2520EQUD &FF0302FF
 2530EQUD &05FFFF08
 2540EQUD &FF0300FF
 2550EQUD &FF0302FF
 2560EQUD &0303FF03
 2570EQUD &05FFFF04
 2580EQUD &FF040404
 2590EQUD &FF0F02FF
 2600EQUD &07FFFF04
 2610EQUD &050505FF
 2620EQUD &05FFFF04
 2630EQUD &05FFFF06
 2640EQUD &FF030EFF
 2650EQUD &FF010CFF
 2660EQUD &09FFFF0A
 2670EQUD &0BFFFF0A
 2680EQUD &FF0A0A0A
 2690EQUD &0BFFFF08
 2700EQUD &FF0D00FF
 2710EQUD &0B0B0BFF
 2720EQUD &0BFFFF0A
 2730EQUD &0CFF0C0C
 2740EQUD &FF0D0CFF
 2750EQUD &FF0F0CFF
 2760EQUD &07FFFF0A
 2770EQUD &FF0D0CFF
 2780EQUD &0D0DFF0D
 2790EQUD &0BFFFF06
 2800EQUD &FF0D0EFF
 2810EQUD &09FFFF08
 2820EQUD &090909FF
 2830EQUD &FF0F02FF
 2840EQUD &09FFFF0A
 2850EQUD &FF080808
 2860EQUD &09FFFF08
 2870EQUD &0BFFFF08
 2880EQUD &FF030EFF
 2890EQUD &FF0F0CFF
 2900EQUD &09FFFF04
 2910EQUD &0F0FFF0F
 2920EQUD &FF0F0EFF
 2930EQUD &05FFFF08
 2940EQUD &FF0D0EFF
 2950EQUD &FF0F0EFF
 2960EQUD &0EFF0E0E
 2970]
 2980NEXT
 2990ENDPROC

�> TSDP2
�7
�23,1,0;0;0;0;
(+� mcode &500 :�: space for machine code
2� buff 40 :�: TSDP buffer
<$�mcode :�: assemble machine code
FPttx$=�(141)+�(132)+�(157)+�(131)+"Television Service Data Packet 2  "+�(156)
P�0,1)ttx$
Z�0,2)ttx$
d'�10,4)"TV channel (1-4) = "answer$
n$channel?0=�("&"+�answer$,1))+&1B
x'� channel?0 < &1C � channel?0 = &1C
�'� channel?0 > &1F � channel?0 = &1F
��5,7)"TSDP type ="
��5,8)"Initial page ="
��5,9)"Network ID code ="
��5,10)"Sound ="
��5,11)"Rating ="
��5,12)"Data ="
��5,13)"Day ="
��5,14)"Month ="
��5,15)"Hours ="
��5,16)"Minutes ="
��5,17)"Country ="
��5,18)"Source ="
�5,19)"Message ="
%� mcode :�: enable TTX interrupts

� � �D@A
"�
,� grabflag?0=2 �display
6� �
@&� mcode :�: disable TTX interrupts
J�31,0,21,23,1,1;0;0;0;
T�
^
��display
h �17,7);buff?0 :�: TSDP type
r2b0=((buff?4)�8)<>0:�: bit 0 of magazine number
|2b1=((buff?6)�4)<>0:�: bit 1 of magazine number
�2b2=((buff?6)�8)<>0:�: bit 2 of magazine number
�%init=0:�: initial magazine number
�� b0 init=1
�� b1 init=init+2
�� b2 init=init+4
�&�20,8);~init;:�: initial magazine
�&�;~buff?2;~buff?1;:�: initial page
�I�;" ";~((buff?6)�3);~buff?5;~((buff?4)�7);~buff?3:�: initial sub-page
�@�23,9);~buff?7;~buff?8;~buff?9;~buff?10 :�: Network ID code
�%� reverse :�: reverse bits in VPS
�sound=((vps?0)�192)�64
�3� sound=0 � sound=3 �13,10)"two channel sound"
�� sound=1 �13,10)"stereo"
� sound=2 �13,10)"mono"
rate=((vps?0)�48)�16
J� rate=2 �14,11)"unrated" � �14,11)"restricted" :�: programme rating
&*valid=((vps?0)�12)�4 :�: data validity
08� valid>1 �12,12)"valid" � �12,12)"invalid":� �tJB
:7�11,13);(((vps?0)�3)*8)+(((vps?1)�224)�32) :�: day
D%�13,14);((vps?1)�30)�2 :�: month
N:�13,15);(((vps?1)�1)*32)+(((vps?2)�240)�16) :�: hours
X<�15,16);(((vps?2)�15)*4)+(((vps?3)�192)�64) :�: minutes
b0country=((vps?3)�61)�4 :�: country of origin
l0� country=12 �15,17)"UK" � �15,17);country
v;�14,18);(((vps?3)�3)*16)+(((vps?4)�240)�16) :�: source
��31,15,19 :�: print message
�� byte=20 � 39
�� (buff?byte � &80)
��
��7
�)grabflag?0=0 :�: grabflag = searching
��
���mcode
�/packet=&70 :�: row number of current packet
�4magazine=&71 :�: magazine number of current page
�&grabflag=&72 :�: page grabber flag
�channel=&73 :�: TV channel
� temp=&74 :�: temporary store
$vps=&75 :�: decoded VPS, 5 bytes
7savereg=&FC :�: interrupt accumulator save register
irq2v=&206 :�: IRQ2 vector
 9ttxcontrol=&FC10 :�: TTX control register, write only
*6ttxstatus=&FC10 :�: TTX status register, read only
41rowreg=&FC11 :�: TTX row register, write only
>5datareg=&FC12 :�: TTX data register, read & write
H=statclr=&FC13 :�: TTX clear status register, read & write
R� pass=0 � 2 � 2
\P%=mcode
f
[OPT pass
pLDA #&00
z'STA grabflag \ grabflag = searching
�/LDX irq2v \ load secondary interrupt vector
�LDY irq2v+1
�7CPY #interrupt � 256 \ has the vector been altered?
�4BEQ disable \ branch if interrupt vector altered
�2STX oldirq2v \ save secondary interrupt vector
�STY oldirq2v+1
�8LDX #interrupt � 256 \ install new interrupt routine
�LDY #interrupt � 256
�1SEI \ disable interrupts when altering vector
�
STX irq2v
�STY irq2v+1
�CLI \ re-enable interrupts
�.LDA channel \ load (channel number + #&1C)
STA ttxcontrol \ enable TTX
RTS \ return to BASIC
.disable
$LDA #&00
. STA ttxcontrol \ disable TTX
8'LDX oldirq2v \ load original vector
BLDY oldirq2v+1
L1SEI \ disable interrupts when altering vector
V'STX irq2v \ restore original vector
`STY irq2v+1
jCLI \ re-enable interrupts
tRTS \ return to BASIC
~.interrupt
�%BIT ttxstatus \ poll TTX hardware
�*BMI ttxinter \ branch if TTX interrupt
�&JMP (oldirq2v) \ not TTX interrupt
�
.ttxinter
�5LDA savereg \ interrupt accumulator save register
�2PHA \ push interrupt accumulator save register
�TXA
�PHA \ push X
�TYA
�PHA \ push Y
�)LDA grabflag \ has TSDP been grabbed?
�:BNE clearstatus \ clear status and RTI if TSDP 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)
2'BEQ emptyrow \ if zero try next row
<TYA
FPHA \ save row number
PJSR readpacket
ZPLA
dTAY \ restore row number
n
.emptyrow
xINY \ increment row number
�CPY #&10 \ try rows 0 - 15
�BNE readttxt
�.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
"=STA savereg \ restore interrupt accumulator save register
,RTI \ return from interrupt
6.readpacket
@ LDA grabflag \ just checking
JBNE return
T&LDY datareg \ read magazine number
^LDA hamtable,Y \ de-ham it
h&BMI return \ stop loading if error
r'STA magazine \ save magazine number
|$LDY datareg \ read packet number
�LDA hamtable,Y \ de-ham it
�&BMI return \ 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
�"CMP #&00 \ is this magazine 0?
�BNE return
�LDA packet
�CMP #&1E \ look for TSDP
�)BNE return \ ignore all other packets
� LDY #&00 \ read bytes 0 - 39

.readmore
$LDX datareg \ read data register
$LDA hamtable,X \ de-ham the byte
& BMI return \ return if error
0 STA buff,Y \ store in buffer
:INY \ increment index
DCPY #&14
N#BCC readmore \ go back for more
X.readagain
b$LDA datareg \ read data register
l STA buff,Y \ store in buffer
vINY \ increment index
�CPY #&28 \ decimal 40
�$BNE readagain \ go back for more
�LDA buff \ TSDP type byte
�� #&0E \ %00001110
�$STA grabflag \ grabflag = 0 or 2
�.return
�RTS
�.reverse
�-LDX #&14 \ VPS nybbles in bytes &0B - &13
�&LDY #&04 \ decode VPS into 5 bytes
�	.join
� LDA buff,X \ load VPS nybble
�%ASL A \ move low nybble into high
	ASL A
	ASL A
	ASL A
 (STA temp \ temporary zero page store
*DEX \ point to next nybble
4 LDA buff,X \ load VPS nybble
>,�A temp \ join two nybbles into one byte
H&STA vps,Y \ and store in zero page
RDEX \ point to next nybble
\DEY \ point to next byte
f'BPL join \ branch if more VPS bytes
p+LDX #&04 \ VPS now in 5 zero page bytes
z.outerloop
�-LDA vps,X \ reverse bits in all VPS bytes
�(STA temp \ temporary zero page store
�LDY #&07
�.innerloop
�ROL temp \ bit into carry
�"ROR A \ carry into accumulator
�DEY
�BPL innerloop
�#STA vps,X \ store reversed byte
�DEX
�-BPL outerloop \ go back if more VPS bytes
�RTS
�
.oldirq2v
	EQUW &00
	
.hamtable
	EQUD &0101FF01
	$EQUD &FF0100FF
	.EQUD &FF0102FF
	8EQUD &07FFFF0A
	BEQUD &FF0100FF
	LEQUD &00FF0000
	VEQUD &0BFFFF06
	`EQUD &FF0300FF
	jEQUD &FF010CFF
	tEQUD &07FFFF04
	~EQUD &07FFFF06
	�EQUD &070707FF
	�EQUD &05FFFF06
	�EQUD &FF0D00FF
	�EQUD &FF060606
	�EQUD &07FFFF06
	�EQUD &FF0102FF
	�EQUD &09FFFF04
	�EQUD &02FF0202
	�EQUD &FF0302FF
	�EQUD &05FFFF08
	�EQUD &FF0300FF
	�EQUD &FF0302FF
EQUD &0303FF03

EQUD &05FFFF04
EQUD &FF040404
EQUD &FF0F02FF
(EQUD &07FFFF04
2EQUD &050505FF
<EQUD &05FFFF04
FEQUD &05FFFF06
PEQUD &FF030EFF
ZEQUD &FF010CFF
dEQUD &09FFFF0A
nEQUD &0BFFFF0A
xEQUD &FF0A0A0A
�EQUD &0BFFFF08
�EQUD &FF0D00FF
�EQUD &0B0B0BFF
�EQUD &0BFFFF0A
�EQUD &0CFF0C0C
�EQUD &FF0D0CFF
�EQUD &FF0F0CFF
�EQUD &07FFFF0A
�EQUD &FF0D0CFF
�EQUD &0D0DFF0D
�EQUD &0BFFFF06
�EQUD &FF0D0EFF
�EQUD &09FFFF08
EQUD &090909FF
EQUD &FF0F02FF
EQUD &09FFFF0A
"EQUD &FF080808
,EQUD &09FFFF08
6EQUD &0BFFFF08
@EQUD &FF030EFF
JEQUD &FF0F0CFF
TEQUD &09FFFF04
^EQUD &0F0FFF0F
hEQUD &FF0F0EFF
rEQUD &05FFFF08
|EQUD &FF0D0EFF
�EQUD &FF0F0EFF
�EQUD &0EFF0E0E
�]
��
��
�
00000000  0d 00 0a 0c f4 3e 20 54  53 44 50 32 0d 00 14 06  |.....> TSDP2....|
00000010  eb 37 0d 00 1e 12 ef 32  33 2c 31 2c 30 3b 30 3b  |.7.....23,1,0;0;|
00000020  30 3b 30 3b 0d 00 28 2b  de 20 6d 63 6f 64 65 20  |0;0;..(+. mcode |
00000030  26 35 30 30 20 3a f4 3a  20 73 70 61 63 65 20 66  |&500 :.: space f|
00000040  6f 72 20 6d 61 63 68 69  6e 65 20 63 6f 64 65 0d  |or machine code.|
00000050  00 32 1d de 20 62 75 66  66 20 34 30 20 3a f4 3a  |.2.. buff 40 :.:|
00000060  20 54 53 44 50 20 62 75  66 66 65 72 0d 00 3c 24  | TSDP buffer..<$|
00000070  f2 6d 63 6f 64 65 20 3a  f4 3a 20 61 73 73 65 6d  |.mcode :.: assem|
00000080  62 6c 65 20 6d 61 63 68  69 6e 65 20 63 6f 64 65  |ble machine code|
00000090  0d 00 46 50 74 74 78 24  3d bd 28 31 34 31 29 2b  |..FPttx$=.(141)+|
000000a0  bd 28 31 33 32 29 2b bd  28 31 35 37 29 2b bd 28  |.(132)+.(157)+.(|
000000b0  31 33 31 29 2b 22 54 65  6c 65 76 69 73 69 6f 6e  |131)+"Television|
000000c0  20 53 65 72 76 69 63 65  20 44 61 74 61 20 50 61  | Service Data Pa|
000000d0  63 6b 65 74 20 32 20 20  22 2b bd 28 31 35 36 29  |cket 2  "+.(156)|
000000e0  0d 00 50 0e f1 8a 30 2c  31 29 74 74 78 24 0d 00  |..P...0,1)ttx$..|
000000f0  5a 0e f1 8a 30 2c 32 29  74 74 78 24 0d 00 64 27  |Z...0,2)ttx$..d'|
00000100  e8 8a 31 30 2c 34 29 22  54 56 20 63 68 61 6e 6e  |..10,4)"TV chann|
00000110  65 6c 20 28 31 2d 34 29  20 3d 20 22 61 6e 73 77  |el (1-4) = "answ|
00000120  65 72 24 0d 00 6e 24 63  68 61 6e 6e 65 6c 3f 30  |er$..n$channel?0|
00000130  3d a0 28 22 26 22 2b c0  61 6e 73 77 65 72 24 2c  |=.("&"+.answer$,|
00000140  31 29 29 2b 26 31 42 0d  00 78 27 e7 20 63 68 61  |1))+&1B..x'. cha|
00000150  6e 6e 65 6c 3f 30 20 3c  20 26 31 43 20 8c 20 63  |nnel?0 < &1C . c|
00000160  68 61 6e 6e 65 6c 3f 30  20 3d 20 26 31 43 0d 00  |hannel?0 = &1C..|
00000170  82 27 e7 20 63 68 61 6e  6e 65 6c 3f 30 20 3e 20  |.'. channel?0 > |
00000180  26 31 46 20 8c 20 63 68  61 6e 6e 65 6c 3f 30 20  |&1F . channel?0 |
00000190  3d 20 26 31 46 0d 00 8c  17 f1 8a 35 2c 37 29 22  |= &1F......5,7)"|
000001a0  54 53 44 50 20 74 79 70  65 20 3d 22 0d 00 96 1a  |TSDP type ="....|
000001b0  f1 8a 35 2c 38 29 22 49  6e 69 74 69 61 6c 20 70  |..5,8)"Initial p|
000001c0  61 67 65 20 3d 22 0d 00  a0 1d f1 8a 35 2c 39 29  |age ="......5,9)|
000001d0  22 4e 65 74 77 6f 72 6b  20 49 44 20 63 6f 64 65  |"Network ID code|
000001e0  20 3d 22 0d 00 aa 14 f1  8a 35 2c 31 30 29 22 53  | ="......5,10)"S|
000001f0  6f 75 6e 64 20 3d 22 0d  00 b4 15 f1 8a 35 2c 31  |ound ="......5,1|
00000200  31 29 22 52 61 74 69 6e  67 20 3d 22 0d 00 be 13  |1)"Rating ="....|
00000210  f1 8a 35 2c 31 32 29 22  44 61 74 61 20 3d 22 0d  |..5,12)"Data =".|
00000220  00 c8 12 f1 8a 35 2c 31  33 29 22 44 61 79 20 3d  |.....5,13)"Day =|
00000230  22 0d 00 d2 14 f1 8a 35  2c 31 34 29 22 4d 6f 6e  |"......5,14)"Mon|
00000240  74 68 20 3d 22 0d 00 dc  14 f1 8a 35 2c 31 35 29  |th ="......5,15)|
00000250  22 48 6f 75 72 73 20 3d  22 0d 00 e6 16 f1 8a 35  |"Hours ="......5|
00000260  2c 31 36 29 22 4d 69 6e  75 74 65 73 20 3d 22 0d  |,16)"Minutes =".|
00000270  00 f0 16 f1 8a 35 2c 31  37 29 22 43 6f 75 6e 74  |.....5,17)"Count|
00000280  72 79 20 3d 22 0d 00 fa  15 f1 8a 35 2c 31 38 29  |ry ="......5,18)|
00000290  22 53 6f 75 72 63 65 20  3d 22 0d 01 04 16 f1 8a  |"Source ="......|
000002a0  35 2c 31 39 29 22 4d 65  73 73 61 67 65 20 3d 22  |5,19)"Message ="|
000002b0  0d 01 0e 25 d6 20 6d 63  6f 64 65 20 3a f4 3a 20  |...%. mcode :.: |
000002c0  65 6e 61 62 6c 65 20 54  54 58 20 69 6e 74 65 72  |enable TTX inter|
000002d0  72 75 70 74 73 0d 01 18  0d ee 85 20 e5 20 8d 44  |rupts...... . .D|
000002e0  40 41 0d 01 22 05 f5 0d  01 2c 1b e7 20 67 72 61  |@A.."....,.. gra|
000002f0  62 66 6c 61 67 3f 30 3d  32 20 f2 64 69 73 70 6c  |bflag?0=2 .displ|
00000300  61 79 0d 01 36 07 fd 20  a3 0d 01 40 26 d6 20 6d  |ay..6.. ...@&. m|
00000310  63 6f 64 65 20 3a f4 3a  20 64 69 73 61 62 6c 65  |code :.: disable|
00000320  20 54 54 58 20 69 6e 74  65 72 72 75 70 74 73 0d  | TTX interrupts.|
00000330  01 4a 1a ef 33 31 2c 30  2c 32 31 2c 32 33 2c 31  |.J..31,0,21,23,1|
00000340  2c 31 3b 30 3b 30 3b 30  3b 0d 01 54 05 e0 0d 01  |,1;0;0;0;..T....|
00000350  5e 0d dd f2 64 69 73 70  6c 61 79 0d 01 68 20 f1  |^...display..h .|
00000360  8a 31 37 2c 37 29 3b 62  75 66 66 3f 30 20 3a f4  |.17,7);buff?0 :.|
00000370  3a 20 54 53 44 50 20 74  79 70 65 0d 01 72 32 62  |: TSDP type..r2b|
00000380  30 3d 28 28 62 75 66 66  3f 34 29 80 38 29 3c 3e  |0=((buff?4).8)<>|
00000390  30 3a f4 3a 20 62 69 74  20 30 20 6f 66 20 6d 61  |0:.: bit 0 of ma|
000003a0  67 61 7a 69 6e 65 20 6e  75 6d 62 65 72 0d 01 7c  |gazine number..||
000003b0  32 62 31 3d 28 28 62 75  66 66 3f 36 29 80 34 29  |2b1=((buff?6).4)|
000003c0  3c 3e 30 3a f4 3a 20 62  69 74 20 31 20 6f 66 20  |<>0:.: bit 1 of |
000003d0  6d 61 67 61 7a 69 6e 65  20 6e 75 6d 62 65 72 0d  |magazine number.|
000003e0  01 86 32 62 32 3d 28 28  62 75 66 66 3f 36 29 80  |..2b2=((buff?6).|
000003f0  38 29 3c 3e 30 3a f4 3a  20 62 69 74 20 32 20 6f  |8)<>0:.: bit 2 o|
00000400  66 20 6d 61 67 61 7a 69  6e 65 20 6e 75 6d 62 65  |f magazine numbe|
00000410  72 0d 01 90 25 69 6e 69  74 3d 30 3a f4 3a 20 69  |r...%init=0:.: i|
00000420  6e 69 74 69 61 6c 20 6d  61 67 61 7a 69 6e 65 20  |nitial magazine |
00000430  6e 75 6d 62 65 72 0d 01  9a 0f e7 20 62 30 20 69  |number..... b0 i|
00000440  6e 69 74 3d 31 0d 01 a4  14 e7 20 62 31 20 69 6e  |nit=1..... b1 in|
00000450  69 74 3d 69 6e 69 74 2b  32 0d 01 ae 14 e7 20 62  |it=init+2..... b|
00000460  32 20 69 6e 69 74 3d 69  6e 69 74 2b 34 0d 01 b8  |2 init=init+4...|
00000470  26 f1 8a 32 30 2c 38 29  3b 7e 69 6e 69 74 3b 3a  |&..20,8);~init;:|
00000480  f4 3a 20 69 6e 69 74 69  61 6c 20 6d 61 67 61 7a  |.: initial magaz|
00000490  69 6e 65 0d 01 c2 26 f1  3b 7e 62 75 66 66 3f 32  |ine...&.;~buff?2|
000004a0  3b 7e 62 75 66 66 3f 31  3b 3a f4 3a 20 69 6e 69  |;~buff?1;:.: ini|
000004b0  74 69 61 6c 20 70 61 67  65 0d 01 cc 49 f1 3b 22  |tial page...I.;"|
000004c0  20 22 3b 7e 28 28 62 75  66 66 3f 36 29 80 33 29  | ";~((buff?6).3)|
000004d0  3b 7e 62 75 66 66 3f 35  3b 7e 28 28 62 75 66 66  |;~buff?5;~((buff|
000004e0  3f 34 29 80 37 29 3b 7e  62 75 66 66 3f 33 3a f4  |?4).7);~buff?3:.|
000004f0  3a 20 69 6e 69 74 69 61  6c 20 73 75 62 2d 70 61  |: initial sub-pa|
00000500  67 65 0d 01 d6 40 f1 8a  32 33 2c 39 29 3b 7e 62  |ge...@..23,9);~b|
00000510  75 66 66 3f 37 3b 7e 62  75 66 66 3f 38 3b 7e 62  |uff?7;~buff?8;~b|
00000520  75 66 66 3f 39 3b 7e 62  75 66 66 3f 31 30 20 3a  |uff?9;~buff?10 :|
00000530  f4 3a 20 4e 65 74 77 6f  72 6b 20 49 44 20 63 6f  |.: Network ID co|
00000540  64 65 0d 01 e0 25 d6 20  72 65 76 65 72 73 65 20  |de...%. reverse |
00000550  3a f4 3a 20 72 65 76 65  72 73 65 20 62 69 74 73  |:.: reverse bits|
00000560  20 69 6e 20 56 50 53 0d  01 ea 1a 73 6f 75 6e 64  | in VPS....sound|
00000570  3d 28 28 76 70 73 3f 30  29 80 31 39 32 29 81 36  |=((vps?0).192).6|
00000580  34 0d 01 f4 33 e7 20 73  6f 75 6e 64 3d 30 20 84  |4...3. sound=0 .|
00000590  20 73 6f 75 6e 64 3d 33  20 f1 8a 31 33 2c 31 30  | sound=3 ..13,10|
000005a0  29 22 74 77 6f 20 63 68  61 6e 6e 65 6c 20 73 6f  |)"two channel so|
000005b0  75 6e 64 22 0d 01 fe 1e  e7 20 73 6f 75 6e 64 3d  |und"..... sound=|
000005c0  31 20 f1 8a 31 33 2c 31  30 29 22 73 74 65 72 65  |1 ..13,10)"stere|
000005d0  6f 22 0d 02 08 1c e7 20  73 6f 75 6e 64 3d 32 20  |o"..... sound=2 |
000005e0  f1 8a 31 33 2c 31 30 29  22 6d 6f 6e 6f 22 0d 02  |..13,10)"mono"..|
000005f0  12 18 72 61 74 65 3d 28  28 76 70 73 3f 30 29 80  |..rate=((vps?0).|
00000600  34 38 29 81 31 36 0d 02  1c 4a e7 20 72 61 74 65  |48).16...J. rate|
00000610  3d 32 20 f1 8a 31 34 2c  31 31 29 22 75 6e 72 61  |=2 ..14,11)"unra|
00000620  74 65 64 22 20 8b 20 f1  8a 31 34 2c 31 31 29 22  |ted" . ..14,11)"|
00000630  72 65 73 74 72 69 63 74  65 64 22 20 3a f4 3a 20  |restricted" :.: |
00000640  70 72 6f 67 72 61 6d 6d  65 20 72 61 74 69 6e 67  |programme rating|
00000650  0d 02 26 2a 76 61 6c 69  64 3d 28 28 76 70 73 3f  |..&*valid=((vps?|
00000660  30 29 80 31 32 29 81 34  20 3a f4 3a 20 64 61 74  |0).12).4 :.: dat|
00000670  61 20 76 61 6c 69 64 69  74 79 0d 02 30 38 e7 20  |a validity..08. |
00000680  76 61 6c 69 64 3e 31 20  f1 8a 31 32 2c 31 32 29  |valid>1 ..12,12)|
00000690  22 76 61 6c 69 64 22 20  8b 20 f1 8a 31 32 2c 31  |"valid" . ..12,1|
000006a0  32 29 22 69 6e 76 61 6c  69 64 22 3a e5 20 8d 74  |2)"invalid":. .t|
000006b0  4a 42 0d 02 3a 37 f1 8a  31 31 2c 31 33 29 3b 28  |JB..:7..11,13);(|
000006c0  28 28 76 70 73 3f 30 29  80 33 29 2a 38 29 2b 28  |((vps?0).3)*8)+(|
000006d0  28 28 76 70 73 3f 31 29  80 32 32 34 29 81 33 32  |((vps?1).224).32|
000006e0  29 20 3a f4 3a 20 64 61  79 0d 02 44 25 f1 8a 31  |) :.: day..D%..1|
000006f0  33 2c 31 34 29 3b 28 28  76 70 73 3f 31 29 80 33  |3,14);((vps?1).3|
00000700  30 29 81 32 20 3a f4 3a  20 6d 6f 6e 74 68 0d 02  |0).2 :.: month..|
00000710  4e 3a f1 8a 31 33 2c 31  35 29 3b 28 28 28 76 70  |N:..13,15);(((vp|
00000720  73 3f 31 29 80 31 29 2a  33 32 29 2b 28 28 28 76  |s?1).1)*32)+(((v|
00000730  70 73 3f 32 29 80 32 34  30 29 81 31 36 29 20 3a  |ps?2).240).16) :|
00000740  f4 3a 20 68 6f 75 72 73  0d 02 58 3c f1 8a 31 35  |.: hours..X<..15|
00000750  2c 31 36 29 3b 28 28 28  76 70 73 3f 32 29 80 31  |,16);(((vps?2).1|
00000760  35 29 2a 34 29 2b 28 28  28 76 70 73 3f 33 29 80  |5)*4)+(((vps?3).|
00000770  31 39 32 29 81 36 34 29  20 3a f4 3a 20 6d 69 6e  |192).64) :.: min|
00000780  75 74 65 73 0d 02 62 30  63 6f 75 6e 74 72 79 3d  |utes..b0country=|
00000790  28 28 76 70 73 3f 33 29  80 36 31 29 81 34 20 3a  |((vps?3).61).4 :|
000007a0  f4 3a 20 63 6f 75 6e 74  72 79 20 6f 66 20 6f 72  |.: country of or|
000007b0  69 67 69 6e 0d 02 6c 30  e7 20 63 6f 75 6e 74 72  |igin..l0. countr|
000007c0  79 3d 31 32 20 f1 8a 31  35 2c 31 37 29 22 55 4b  |y=12 ..15,17)"UK|
000007d0  22 20 8b 20 f1 8a 31 35  2c 31 37 29 3b 63 6f 75  |" . ..15,17);cou|
000007e0  6e 74 72 79 0d 02 76 3b  f1 8a 31 34 2c 31 38 29  |ntry..v;..14,18)|
000007f0  3b 28 28 28 76 70 73 3f  33 29 80 33 29 2a 31 36  |;(((vps?3).3)*16|
00000800  29 2b 28 28 28 76 70 73  3f 34 29 80 32 34 30 29  |)+(((vps?4).240)|
00000810  81 31 36 29 20 3a f4 3a  20 73 6f 75 72 63 65 0d  |.16) :.: source.|
00000820  02 80 1f ef 33 31 2c 31  35 2c 31 39 20 3a f4 3a  |....31,15,19 :.:|
00000830  20 70 72 69 6e 74 20 6d  65 73 73 61 67 65 0d 02  | print message..|
00000840  8a 12 e3 20 62 79 74 65  3d 32 30 20 b8 20 33 39  |... byte=20 . 39|
00000850  0d 02 94 17 ef 20 28 62  75 66 66 3f 62 79 74 65  |..... (buff?byte|
00000860  20 84 20 26 38 30 29 0d  02 9e 05 ed 0d 02 a8 06  | . &80).........|
00000870  ef 37 0d 02 b2 29 67 72  61 62 66 6c 61 67 3f 30  |.7...)grabflag?0|
00000880  3d 30 20 3a f4 3a 20 67  72 61 62 66 6c 61 67 20  |=0 :.: grabflag |
00000890  3d 20 73 65 61 72 63 68  69 6e 67 0d 02 bc 05 e1  |= searching.....|
000008a0  0d 02 c6 0b dd f2 6d 63  6f 64 65 0d 02 d0 2f 70  |......mcode.../p|
000008b0  61 63 6b 65 74 3d 26 37  30 20 3a f4 3a 20 72 6f  |acket=&70 :.: ro|
000008c0  77 20 6e 75 6d 62 65 72  20 6f 66 20 63 75 72 72  |w number of curr|
000008d0  65 6e 74 20 70 61 63 6b  65 74 0d 02 da 34 6d 61  |ent packet...4ma|
000008e0  67 61 7a 69 6e 65 3d 26  37 31 20 3a f4 3a 20 6d  |gazine=&71 :.: m|
000008f0  61 67 61 7a 69 6e 65 20  6e 75 6d 62 65 72 20 6f  |agazine number o|
00000900  66 20 63 75 72 72 65 6e  74 20 70 61 67 65 0d 02  |f current page..|
00000910  e4 26 67 72 61 62 66 6c  61 67 3d 26 37 32 20 3a  |.&grabflag=&72 :|
00000920  f4 3a 20 70 61 67 65 20  67 72 61 62 62 65 72 20  |.: page grabber |
00000930  66 6c 61 67 0d 02 ee 1e  63 68 61 6e 6e 65 6c 3d  |flag....channel=|
00000940  26 37 33 20 3a f4 3a 20  54 56 20 63 68 61 6e 6e  |&73 :.: TV chann|
00000950  65 6c 0d 02 f8 20 74 65  6d 70 3d 26 37 34 20 3a  |el... temp=&74 :|
00000960  f4 3a 20 74 65 6d 70 6f  72 61 72 79 20 73 74 6f  |.: temporary sto|
00000970  72 65 0d 03 02 24 76 70  73 3d 26 37 35 20 3a f4  |re...$vps=&75 :.|
00000980  3a 20 64 65 63 6f 64 65  64 20 56 50 53 2c 20 35  |: decoded VPS, 5|
00000990  20 62 79 74 65 73 0d 03  0c 37 73 61 76 65 72 65  | bytes...7savere|
000009a0  67 3d 26 46 43 20 3a f4  3a 20 69 6e 74 65 72 72  |g=&FC :.: interr|
000009b0  75 70 74 20 61 63 63 75  6d 75 6c 61 74 6f 72 20  |upt accumulator |
000009c0  73 61 76 65 20 72 65 67  69 73 74 65 72 0d 03 16  |save register...|
000009d0  1e 69 72 71 32 76 3d 26  32 30 36 20 3a f4 3a 20  |.irq2v=&206 :.: |
000009e0  49 52 51 32 20 76 65 63  74 6f 72 0d 03 20 39 74  |IRQ2 vector.. 9t|
000009f0  74 78 63 6f 6e 74 72 6f  6c 3d 26 46 43 31 30 20  |txcontrol=&FC10 |
00000a00  3a f4 3a 20 54 54 58 20  63 6f 6e 74 72 6f 6c 20  |:.: TTX control |
00000a10  72 65 67 69 73 74 65 72  2c 20 77 72 69 74 65 20  |register, write |
00000a20  6f 6e 6c 79 0d 03 2a 36  74 74 78 73 74 61 74 75  |only..*6ttxstatu|
00000a30  73 3d 26 46 43 31 30 20  3a f4 3a 20 54 54 58 20  |s=&FC10 :.: TTX |
00000a40  73 74 61 74 75 73 20 72  65 67 69 73 74 65 72 2c  |status register,|
00000a50  20 72 65 61 64 20 6f 6e  6c 79 0d 03 34 31 72 6f  | read only..41ro|
00000a60  77 72 65 67 3d 26 46 43  31 31 20 3a f4 3a 20 54  |wreg=&FC11 :.: T|
00000a70  54 58 20 72 6f 77 20 72  65 67 69 73 74 65 72 2c  |TX row register,|
00000a80  20 77 72 69 74 65 20 6f  6e 6c 79 0d 03 3e 35 64  | write only..>5d|
00000a90  61 74 61 72 65 67 3d 26  46 43 31 32 20 3a f4 3a  |atareg=&FC12 :.:|
00000aa0  20 54 54 58 20 64 61 74  61 20 72 65 67 69 73 74  | TTX data regist|
00000ab0  65 72 2c 20 72 65 61 64  20 26 20 77 72 69 74 65  |er, read & write|
00000ac0  0d 03 48 3d 73 74 61 74  63 6c 72 3d 26 46 43 31  |..H=statclr=&FC1|
00000ad0  33 20 3a f4 3a 20 54 54  58 20 63 6c 65 61 72 20  |3 :.: TTX clear |
00000ae0  73 74 61 74 75 73 20 72  65 67 69 73 74 65 72 2c  |status register,|
00000af0  20 72 65 61 64 20 26 20  77 72 69 74 65 0d 03 52  | read & write..R|
00000b00  14 e3 20 70 61 73 73 3d  30 20 b8 20 32 20 88 20  |.. pass=0 . 2 . |
00000b10  32 0d 03 5c 0c 50 25 3d  6d 63 6f 64 65 0d 03 66  |2..\.P%=mcode..f|
00000b20  0d 5b 4f 50 54 20 70 61  73 73 0d 03 70 0c 4c 44  |.[OPT pass..p.LD|
00000b30  41 20 23 26 30 30 0d 03  7a 27 53 54 41 20 67 72  |A #&00..z'STA gr|
00000b40  61 62 66 6c 61 67 20 5c  20 67 72 61 62 66 6c 61  |abflag \ grabfla|
00000b50  67 20 3d 20 73 65 61 72  63 68 69 6e 67 0d 03 84  |g = searching...|
00000b60  2f 4c 44 58 20 69 72 71  32 76 20 5c 20 6c 6f 61  |/LDX irq2v \ loa|
00000b70  64 20 73 65 63 6f 6e 64  61 72 79 20 69 6e 74 65  |d secondary inte|
00000b80  72 72 75 70 74 20 76 65  63 74 6f 72 0d 03 8e 0f  |rrupt vector....|
00000b90  4c 44 59 20 69 72 71 32  76 2b 31 0d 03 98 37 43  |LDY irq2v+1...7C|
00000ba0  50 59 20 23 69 6e 74 65  72 72 75 70 74 20 81 20  |PY #interrupt . |
00000bb0  32 35 36 20 5c 20 68 61  73 20 74 68 65 20 76 65  |256 \ has the ve|
00000bc0  63 74 6f 72 20 62 65 65  6e 20 61 6c 74 65 72 65  |ctor been altere|
00000bd0  64 3f 0d 03 a2 34 42 45  51 20 64 69 73 61 62 6c  |d?...4BEQ disabl|
00000be0  65 20 5c 20 62 72 61 6e  63 68 20 69 66 20 69 6e  |e \ branch if in|
00000bf0  74 65 72 72 75 70 74 20  76 65 63 74 6f 72 20 61  |terrupt vector a|
00000c00  6c 74 65 72 65 64 0d 03  ac 32 53 54 58 20 6f 6c  |ltered...2STX ol|
00000c10  64 69 72 71 32 76 20 5c  20 73 61 76 65 20 73 65  |dirq2v \ save se|
00000c20  63 6f 6e 64 61 72 79 20  69 6e 74 65 72 72 75 70  |condary interrup|
00000c30  74 20 76 65 63 74 6f 72  0d 03 b6 12 53 54 59 20  |t vector....STY |
00000c40  6f 6c 64 69 72 71 32 76  2b 31 0d 03 c0 38 4c 44  |oldirq2v+1...8LD|
00000c50  58 20 23 69 6e 74 65 72  72 75 70 74 20 83 20 32  |X #interrupt . 2|
00000c60  35 36 20 5c 20 69 6e 73  74 61 6c 6c 20 6e 65 77  |56 \ install new|
00000c70  20 69 6e 74 65 72 72 75  70 74 20 72 6f 75 74 69  | interrupt routi|
00000c80  6e 65 0d 03 ca 18 4c 44  59 20 23 69 6e 74 65 72  |ne....LDY #inter|
00000c90  72 75 70 74 20 81 20 32  35 36 0d 03 d4 31 53 45  |rupt . 256...1SE|
00000ca0  49 20 5c 20 64 69 73 61  62 6c 65 20 69 6e 74 65  |I \ disable inte|
00000cb0  72 72 75 70 74 73 20 77  68 65 6e 20 61 6c 74 65  |rrupts when alte|
00000cc0  72 69 6e 67 20 76 65 63  74 6f 72 0d 03 de 0d 53  |ring vector....S|
00000cd0  54 58 20 69 72 71 32 76  0d 03 e8 0f 53 54 59 20  |TX irq2v....STY |
00000ce0  69 72 71 32 76 2b 31 0d  03 f2 1e 43 4c 49 20 5c  |irq2v+1....CLI \|
00000cf0  20 72 65 2d 65 6e 61 62  6c 65 20 69 6e 74 65 72  | re-enable inter|
00000d00  72 75 70 74 73 0d 03 fc  2e 4c 44 41 20 63 68 61  |rupts....LDA cha|
00000d10  6e 6e 65 6c 20 5c 20 6c  6f 61 64 20 28 63 68 61  |nnel \ load (cha|
00000d20  6e 6e 65 6c 20 6e 75 6d  62 65 72 20 2b 20 23 26  |nnel number + #&|
00000d30  31 43 29 0d 04 06 1f 53  54 41 20 74 74 78 63 6f  |1C)....STA ttxco|
00000d40  6e 74 72 6f 6c 20 5c 20  65 6e 61 62 6c 65 20 54  |ntrol \ enable T|
00000d50  54 58 0d 04 10 19 52 54  53 20 5c 20 72 65 74 75  |TX....RTS \ retu|
00000d60  72 6e 20 74 6f 20 42 41  53 49 43 0d 04 1a 0c 2e  |rn to BASIC.....|
00000d70  64 69 73 61 62 6c 65 0d  04 24 0c 4c 44 41 20 23  |disable..$.LDA #|
00000d80  26 30 30 0d 04 2e 20 53  54 41 20 74 74 78 63 6f  |&00... STA ttxco|
00000d90  6e 74 72 6f 6c 20 5c 20  64 69 73 61 62 6c 65 20  |ntrol \ disable |
00000da0  54 54 58 0d 04 38 27 4c  44 58 20 6f 6c 64 69 72  |TTX..8'LDX oldir|
00000db0  71 32 76 20 5c 20 6c 6f  61 64 20 6f 72 69 67 69  |q2v \ load origi|
00000dc0  6e 61 6c 20 76 65 63 74  6f 72 0d 04 42 12 4c 44  |nal vector..B.LD|
00000dd0  59 20 6f 6c 64 69 72 71  32 76 2b 31 0d 04 4c 31  |Y oldirq2v+1..L1|
00000de0  53 45 49 20 5c 20 64 69  73 61 62 6c 65 20 69 6e  |SEI \ disable in|
00000df0  74 65 72 72 75 70 74 73  20 77 68 65 6e 20 61 6c  |terrupts when al|
00000e00  74 65 72 69 6e 67 20 76  65 63 74 6f 72 0d 04 56  |tering vector..V|
00000e10  27 53 54 58 20 69 72 71  32 76 20 5c 20 72 65 73  |'STX irq2v \ res|
00000e20  74 6f 72 65 20 6f 72 69  67 69 6e 61 6c 20 76 65  |tore original ve|
00000e30  63 74 6f 72 0d 04 60 0f  53 54 59 20 69 72 71 32  |ctor..`.STY irq2|
00000e40  76 2b 31 0d 04 6a 1e 43  4c 49 20 5c 20 72 65 2d  |v+1..j.CLI \ re-|
00000e50  65 6e 61 62 6c 65 20 69  6e 74 65 72 72 75 70 74  |enable interrupt|
00000e60  73 0d 04 74 19 52 54 53  20 5c 20 72 65 74 75 72  |s..t.RTS \ retur|
00000e70  6e 20 74 6f 20 42 41 53  49 43 0d 04 7e 0e 2e 69  |n to BASIC..~..i|
00000e80  6e 74 65 72 72 75 70 74  0d 04 88 25 42 49 54 20  |nterrupt...%BIT |
00000e90  74 74 78 73 74 61 74 75  73 20 5c 20 70 6f 6c 6c  |ttxstatus \ poll|
00000ea0  20 54 54 58 20 68 61 72  64 77 61 72 65 0d 04 92  | TTX hardware...|
00000eb0  2a 42 4d 49 20 74 74 78  69 6e 74 65 72 20 5c 20  |*BMI ttxinter \ |
00000ec0  62 72 61 6e 63 68 20 69  66 20 54 54 58 20 69 6e  |branch if TTX in|
00000ed0  74 65 72 72 75 70 74 0d  04 9c 26 4a 4d 50 20 28  |terrupt...&JMP (|
00000ee0  6f 6c 64 69 72 71 32 76  29 20 5c 20 6e 6f 74 20  |oldirq2v) \ not |
00000ef0  54 54 58 20 69 6e 74 65  72 72 75 70 74 0d 04 a6  |TTX interrupt...|
00000f00  0d 2e 74 74 78 69 6e 74  65 72 0d 04 b0 35 4c 44  |..ttxinter...5LD|
00000f10  41 20 73 61 76 65 72 65  67 20 5c 20 69 6e 74 65  |A savereg \ inte|
00000f20  72 72 75 70 74 20 61 63  63 75 6d 75 6c 61 74 6f  |rrupt accumulato|
00000f30  72 20 73 61 76 65 20 72  65 67 69 73 74 65 72 0d  |r save register.|
00000f40  04 ba 32 50 48 41 20 5c  20 70 75 73 68 20 69 6e  |..2PHA \ push in|
00000f50  74 65 72 72 75 70 74 20  61 63 63 75 6d 75 6c 61  |terrupt accumula|
00000f60  74 6f 72 20 73 61 76 65  20 72 65 67 69 73 74 65  |tor save registe|
00000f70  72 0d 04 c4 07 54 58 41  0d 04 ce 10 50 48 41 20  |r....TXA....PHA |
00000f80  5c 20 70 75 73 68 20 58  0d 04 d8 07 54 59 41 0d  |\ push X....TYA.|
00000f90  04 e2 10 50 48 41 20 5c  20 70 75 73 68 20 59 0d  |...PHA \ push Y.|
00000fa0  04 ec 29 4c 44 41 20 67  72 61 62 66 6c 61 67 20  |..)LDA grabflag |
00000fb0  5c 20 68 61 73 20 54 53  44 50 20 62 65 65 6e 20  |\ has TSDP been |
00000fc0  67 72 61 62 62 65 64 3f  0d 04 f6 3a 42 4e 45 20  |grabbed?...:BNE |
00000fd0  63 6c 65 61 72 73 74 61  74 75 73 20 5c 20 63 6c  |clearstatus \ cl|
00000fe0  65 61 72 20 73 74 61 74  75 73 20 61 6e 64 20 52  |ear status and R|
00000ff0  54 49 20 69 66 20 54 53  44 50 20 67 72 61 62 62  |TI if TSDP grabb|
00001000  65 64 0d 05 00 1c 43 4c  44 20 5c 20 63 6c 65 61  |ed....CLD \ clea|
00001010  72 20 64 65 63 69 6d 61  6c 20 66 6c 61 67 0d 05  |r decimal flag..|
00001020  0a 1f 4c 44 59 20 23 26  30 30 20 5c 20 73 74 61  |..LDY #&00 \ sta|
00001030  72 74 20 77 69 74 68 20  72 6f 77 20 30 0d 05 14  |rt with row 0...|
00001040  0d 2e 72 65 61 64 74 74  78 74 0d 05 1e 21 53 54  |..readttxt...!ST|
00001050  59 20 72 6f 77 72 65 67  20 5c 20 74 72 79 20 72  |Y rowreg \ try r|
00001060  6f 77 73 20 30 20 74 6f  20 31 35 0d 05 28 2a 4c  |ows 0 to 15..(*L|
00001070  44 41 20 64 61 74 61 72  65 67 20 5c 20 6c 6f 61  |DA datareg \ loa|
00001080  64 20 66 72 61 6d 69 6e  67 20 63 6f 64 65 20 28  |d framing code (|
00001090  23 26 32 37 29 0d 05 32  27 42 45 51 20 65 6d 70  |#&27)..2'BEQ emp|
000010a0  74 79 72 6f 77 20 5c 20  69 66 20 7a 65 72 6f 20  |tyrow \ if zero |
000010b0  74 72 79 20 6e 65 78 74  20 72 6f 77 0d 05 3c 07  |try next row..<.|
000010c0  54 59 41 0d 05 46 19 50  48 41 20 5c 20 73 61 76  |TYA..F.PHA \ sav|
000010d0  65 20 72 6f 77 20 6e 75  6d 62 65 72 0d 05 50 12  |e row number..P.|
000010e0  4a 53 52 20 72 65 61 64  70 61 63 6b 65 74 0d 05  |JSR readpacket..|
000010f0  5a 07 50 4c 41 0d 05 64  1c 54 41 59 20 5c 20 72  |Z.PLA..d.TAY \ r|
00001100  65 73 74 6f 72 65 20 72  6f 77 20 6e 75 6d 62 65  |estore row numbe|
00001110  72 0d 05 6e 0d 2e 65 6d  70 74 79 72 6f 77 0d 05  |r..n..emptyrow..|
00001120  78 1e 49 4e 59 20 5c 20  69 6e 63 72 65 6d 65 6e  |x.INY \ incremen|
00001130  74 20 72 6f 77 20 6e 75  6d 62 65 72 0d 05 82 1e  |t row number....|
00001140  43 50 59 20 23 26 31 30  20 5c 20 74 72 79 20 72  |CPY #&10 \ try r|
00001150  6f 77 73 20 30 20 2d 20  31 35 0d 05 8c 10 42 4e  |ows 0 - 15....BN|
00001160  45 20 72 65 61 64 74 74  78 74 0d 05 96 10 2e 63  |E readttxt.....c|
00001170  6c 65 61 72 73 74 61 74  75 73 0d 05 a0 0c 4c 44  |learstatus....LD|
00001180  41 20 23 26 30 30 0d 05  aa 27 4c 44 59 20 23 26  |A #&00...'LDY #&|
00001190  30 46 20 5c 20 63 6c 65  61 72 20 31 36 20 72 6f  |0F \ clear 16 ro|
000011a0  77 73 20 69 6e 20 61 64  61 70 74 6f 72 0d 05 b4  |ws in adaptor...|
000011b0  0e 2e 63 6c 65 61 72 6c  6f 6f 70 0d 05 be 0e 53  |..clearloop....S|
000011c0  54 59 20 72 6f 77 72 65  67 0d 05 c8 0f 53 54 41  |TY rowreg....STA|
000011d0  20 64 61 74 61 72 65 67  0d 05 d2 07 44 45 59 0d  | datareg....DEY.|
000011e0  05 dc 11 42 50 4c 20 63  6c 65 61 72 6c 6f 6f 70  |...BPL clearloop|
000011f0  0d 05 e6 35 53 54 41 20  73 74 61 74 63 6c 72 20  |...5STA statclr |
00001200  5c 20 63 6c 65 61 72 20  73 74 61 74 75 73 20 66  |\ clear status f|
00001210  6c 61 67 73 20 62 65 66  6f 72 65 20 72 65 74 75  |lags before retu|
00001220  72 6e 69 6e 67 0d 05 f0  07 50 4c 41 0d 05 fa 13  |rning....PLA....|
00001230  54 41 59 20 5c 20 72 65  73 74 6f 72 65 20 59 0d  |TAY \ restore Y.|
00001240  06 04 07 50 4c 41 0d 06  0e 13 54 41 58 20 5c 20  |...PLA....TAX \ |
00001250  72 65 73 74 6f 72 65 20  58 0d 06 18 07 50 4c 41  |restore X....PLA|
00001260  0d 06 22 3d 53 54 41 20  73 61 76 65 72 65 67 20  |.."=STA savereg |
00001270  5c 20 72 65 73 74 6f 72  65 20 69 6e 74 65 72 72  |\ restore interr|
00001280  75 70 74 20 61 63 63 75  6d 75 6c 61 74 6f 72 20  |upt accumulator |
00001290  73 61 76 65 20 72 65 67  69 73 74 65 72 0d 06 2c  |save register..,|
000012a0  1f 52 54 49 20 5c 20 72  65 74 75 72 6e 20 66 72  |.RTI \ return fr|
000012b0  6f 6d 20 69 6e 74 65 72  72 75 70 74 0d 06 36 0f  |om interrupt..6.|
000012c0  2e 72 65 61 64 70 61 63  6b 65 74 0d 06 40 20 4c  |.readpacket..@ L|
000012d0  44 41 20 67 72 61 62 66  6c 61 67 20 5c 20 6a 75  |DA grabflag \ ju|
000012e0  73 74 20 63 68 65 63 6b  69 6e 67 0d 06 4a 0e 42  |st checking..J.B|
000012f0  4e 45 20 72 65 74 75 72  6e 0d 06 54 26 4c 44 59  |NE return..T&LDY|
00001300  20 64 61 74 61 72 65 67  20 5c 20 72 65 61 64 20  | datareg \ read |
00001310  6d 61 67 61 7a 69 6e 65  20 6e 75 6d 62 65 72 0d  |magazine number.|
00001320  06 5e 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 68  |Y \ de-ham it..h|
00001340  26 42 4d 49 20 72 65 74  75 72 6e 20 5c 20 73 74  |&BMI return \ st|
00001350  6f 70 20 6c 6f 61 64 69  6e 67 20 69 66 20 65 72  |op loading if er|
00001360  72 6f 72 0d 06 72 27 53  54 41 20 6d 61 67 61 7a  |ror..r'STA magaz|
00001370  69 6e 65 20 5c 20 73 61  76 65 20 6d 61 67 61 7a  |ine \ save magaz|
00001380  69 6e 65 20 6e 75 6d 62  65 72 0d 06 7c 24 4c 44  |ine number..|$LD|
00001390  59 20 64 61 74 61 72 65  67 20 5c 20 72 65 61 64  |Y datareg \ read|
000013a0  20 70 61 63 6b 65 74 20  6e 75 6d 62 65 72 0d 06  | packet number..|
000013b0  86 1e 4c 44 41 20 68 61  6d 74 61 62 6c 65 2c 59  |..LDA hamtable,Y|
000013c0  20 5c 20 64 65 2d 68 61  6d 20 69 74 0d 06 90 26  | \ de-ham it...&|
000013d0  42 4d 49 20 72 65 74 75  72 6e 20 5c 20 73 74 6f  |BMI return \ sto|
000013e0  70 20 6c 6f 61 64 69 6e  67 20 69 66 20 65 72 72  |p loading if err|
000013f0  6f 72 0d 06 9a 23 53 54  41 20 70 61 63 6b 65 74  |or...#STA packet|
00001400  20 5c 20 73 61 76 65 20  70 61 63 6b 65 74 20 6e  | \ save packet n|
00001410  75 6d 62 65 72 0d 06 a4  27 4c 44 41 20 6d 61 67  |umber...'LDA mag|
00001420  61 7a 69 6e 65 20 5c 20  6c 6f 61 64 20 6d 61 67  |azine \ load mag|
00001430  61 7a 69 6e 65 20 6e 75  6d 62 65 72 0d 06 ae 3d  |azine number...=|
00001440  43 4d 50 20 23 26 30 38  20 5c 20 62 69 74 20 33  |CMP #&08 \ bit 3|
00001450  20 6f 66 20 6d 61 67 2e  20 6e 75 6d 62 65 72 20  | of mag. number |
00001460  69 73 20 62 69 74 20 30  20 6f 66 20 70 61 63 6b  |is bit 0 of pack|
00001470  65 74 20 6e 75 6d 62 65  72 0d 06 b8 24 52 4f 4c  |et number...$ROL|
00001480  20 70 61 63 6b 65 74 20  5c 20 35 20 62 69 74 20  | packet \ 5 bit |
00001490  70 61 63 6b 65 74 20 6e  75 6d 62 65 72 0d 06 c2  |packet number...|
000014a0  1e 80 20 23 26 30 37 20  5c 20 75 73 65 20 6f 6e  |.. #&07 \ use on|
000014b0  6c 79 20 62 69 74 73 20  30 2d 32 0d 06 cc 22 43  |ly bits 0-2..."C|
000014c0  4d 50 20 23 26 30 30 20  5c 20 69 73 20 74 68 69  |MP #&00 \ is thi|
000014d0  73 20 6d 61 67 61 7a 69  6e 65 20 30 3f 0d 06 d6  |s magazine 0?...|
000014e0  0e 42 4e 45 20 72 65 74  75 72 6e 0d 06 e0 0e 4c  |.BNE return....L|
000014f0  44 41 20 70 61 63 6b 65  74 0d 06 ea 1c 43 4d 50  |DA packet....CMP|
00001500  20 23 26 31 45 20 5c 20  6c 6f 6f 6b 20 66 6f 72  | #&1E \ look for|
00001510  20 54 53 44 50 0d 06 f4  29 42 4e 45 20 72 65 74  | TSDP...)BNE ret|
00001520  75 72 6e 20 5c 20 69 67  6e 6f 72 65 20 61 6c 6c  |urn \ ignore all|
00001530  20 6f 74 68 65 72 20 70  61 63 6b 65 74 73 0d 06  | other packets..|
00001540  fe 20 4c 44 59 20 23 26  30 30 20 5c 20 72 65 61  |. LDY #&00 \ rea|
00001550  64 20 62 79 74 65 73 20  30 20 2d 20 33 39 0d 07  |d bytes 0 - 39..|
00001560  08 0d 2e 72 65 61 64 6d  6f 72 65 0d 07 12 24 4c  |...readmore...$L|
00001570  44 58 20 64 61 74 61 72  65 67 20 5c 20 72 65 61  |DX datareg \ rea|
00001580  64 20 64 61 74 61 20 72  65 67 69 73 74 65 72 0d  |d data register.|
00001590  07 1c 24 4c 44 41 20 68  61 6d 74 61 62 6c 65 2c  |..$LDA hamtable,|
000015a0  58 20 5c 20 64 65 2d 68  61 6d 20 74 68 65 20 62  |X \ de-ham the b|
000015b0  79 74 65 0d 07 26 20 42  4d 49 20 72 65 74 75 72  |yte..& BMI retur|
000015c0  6e 20 5c 20 72 65 74 75  72 6e 20 69 66 20 65 72  |n \ return if er|
000015d0  72 6f 72 0d 07 30 20 53  54 41 20 62 75 66 66 2c  |ror..0 STA buff,|
000015e0  59 20 5c 20 73 74 6f 72  65 20 69 6e 20 62 75 66  |Y \ store in buf|
000015f0  66 65 72 0d 07 3a 19 49  4e 59 20 5c 20 69 6e 63  |fer..:.INY \ inc|
00001600  72 65 6d 65 6e 74 20 69  6e 64 65 78 0d 07 44 0c  |rement index..D.|
00001610  43 50 59 20 23 26 31 34  0d 07 4e 23 42 43 43 20  |CPY #&14..N#BCC |
00001620  72 65 61 64 6d 6f 72 65  20 5c 20 67 6f 20 62 61  |readmore \ go ba|
00001630  63 6b 20 66 6f 72 20 6d  6f 72 65 0d 07 58 0e 2e  |ck for more..X..|
00001640  72 65 61 64 61 67 61 69  6e 0d 07 62 24 4c 44 41  |readagain..b$LDA|
00001650  20 64 61 74 61 72 65 67  20 5c 20 72 65 61 64 20  | datareg \ read |
00001660  64 61 74 61 20 72 65 67  69 73 74 65 72 0d 07 6c  |data register..l|
00001670  20 53 54 41 20 62 75 66  66 2c 59 20 5c 20 73 74  | STA buff,Y \ st|
00001680  6f 72 65 20 69 6e 20 62  75 66 66 65 72 0d 07 76  |ore in buffer..v|
00001690  19 49 4e 59 20 5c 20 69  6e 63 72 65 6d 65 6e 74  |.INY \ increment|
000016a0  20 69 6e 64 65 78 0d 07  80 19 43 50 59 20 23 26  | index....CPY #&|
000016b0  32 38 20 5c 20 64 65 63  69 6d 61 6c 20 34 30 0d  |28 \ decimal 40.|
000016c0  07 8a 24 42 4e 45 20 72  65 61 64 61 67 61 69 6e  |..$BNE readagain|
000016d0  20 5c 20 67 6f 20 62 61  63 6b 20 66 6f 72 20 6d  | \ go back for m|
000016e0  6f 72 65 0d 07 94 1d 4c  44 41 20 62 75 66 66 20  |ore....LDA buff |
000016f0  5c 20 54 53 44 50 20 74  79 70 65 20 62 79 74 65  |\ TSDP type byte|
00001700  0d 07 9e 16 80 20 23 26  30 45 20 5c 20 25 30 30  |..... #&0E \ %00|
00001710  30 30 31 31 31 30 0d 07  a8 24 53 54 41 20 67 72  |001110...$STA gr|
00001720  61 62 66 6c 61 67 20 5c  20 67 72 61 62 66 6c 61  |abflag \ grabfla|
00001730  67 20 3d 20 30 20 6f 72  20 32 0d 07 b2 0b 2e 72  |g = 0 or 2.....r|
00001740  65 74 75 72 6e 0d 07 bc  07 52 54 53 0d 07 c6 0c  |eturn....RTS....|
00001750  2e 72 65 76 65 72 73 65  0d 07 d0 2d 4c 44 58 20  |.reverse...-LDX |
00001760  23 26 31 34 20 5c 20 56  50 53 20 6e 79 62 62 6c  |#&14 \ VPS nybbl|
00001770  65 73 20 69 6e 20 62 79  74 65 73 20 26 30 42 20  |es in bytes &0B |
00001780  2d 20 26 31 33 0d 07 da  26 4c 44 59 20 23 26 30  |- &13...&LDY #&0|
00001790  34 20 5c 20 64 65 63 6f  64 65 20 56 50 53 20 69  |4 \ decode VPS i|
000017a0  6e 74 6f 20 35 20 62 79  74 65 73 0d 07 e4 09 2e  |nto 5 bytes.....|
000017b0  6a 6f 69 6e 0d 07 ee 20  4c 44 41 20 62 75 66 66  |join... LDA buff|
000017c0  2c 58 20 5c 20 6c 6f 61  64 20 56 50 53 20 6e 79  |,X \ load VPS ny|
000017d0  62 62 6c 65 0d 07 f8 25  41 53 4c 20 41 20 5c 20  |bble...%ASL A \ |
000017e0  6d 6f 76 65 20 6c 6f 77  20 6e 79 62 62 6c 65 20  |move low nybble |
000017f0  69 6e 74 6f 20 68 69 67  68 0d 08 02 09 41 53 4c  |into high....ASL|
00001800  20 41 0d 08 0c 09 41 53  4c 20 41 0d 08 16 09 41  | A....ASL A....A|
00001810  53 4c 20 41 0d 08 20 28  53 54 41 20 74 65 6d 70  |SL A.. (STA temp|
00001820  20 5c 20 74 65 6d 70 6f  72 61 72 79 20 7a 65 72  | \ temporary zer|
00001830  6f 20 70 61 67 65 20 73  74 6f 72 65 0d 08 2a 1e  |o page store..*.|
00001840  44 45 58 20 5c 20 70 6f  69 6e 74 20 74 6f 20 6e  |DEX \ point to n|
00001850  65 78 74 20 6e 79 62 62  6c 65 0d 08 34 20 4c 44  |ext nybble..4 LD|
00001860  41 20 62 75 66 66 2c 58  20 5c 20 6c 6f 61 64 20  |A buff,X \ load |
00001870  56 50 53 20 6e 79 62 62  6c 65 0d 08 3e 2c 84 41  |VPS nybble..>,.A|
00001880  20 74 65 6d 70 20 5c 20  6a 6f 69 6e 20 74 77 6f  | temp \ join two|
00001890  20 6e 79 62 62 6c 65 73  20 69 6e 74 6f 20 6f 6e  | nybbles into on|
000018a0  65 20 62 79 74 65 0d 08  48 26 53 54 41 20 76 70  |e byte..H&STA vp|
000018b0  73 2c 59 20 5c 20 61 6e  64 20 73 74 6f 72 65 20  |s,Y \ and store |
000018c0  69 6e 20 7a 65 72 6f 20  70 61 67 65 0d 08 52 1e  |in zero page..R.|
000018d0  44 45 58 20 5c 20 70 6f  69 6e 74 20 74 6f 20 6e  |DEX \ point to n|
000018e0  65 78 74 20 6e 79 62 62  6c 65 0d 08 5c 1c 44 45  |ext nybble..\.DE|
000018f0  59 20 5c 20 70 6f 69 6e  74 20 74 6f 20 6e 65 78  |Y \ point to nex|
00001900  74 20 62 79 74 65 0d 08  66 27 42 50 4c 20 6a 6f  |t byte..f'BPL jo|
00001910  69 6e 20 5c 20 62 72 61  6e 63 68 20 69 66 20 6d  |in \ branch if m|
00001920  6f 72 65 20 56 50 53 20  62 79 74 65 73 0d 08 70  |ore VPS bytes..p|
00001930  2b 4c 44 58 20 23 26 30  34 20 5c 20 56 50 53 20  |+LDX #&04 \ VPS |
00001940  6e 6f 77 20 69 6e 20 35  20 7a 65 72 6f 20 70 61  |now in 5 zero pa|
00001950  67 65 20 62 79 74 65 73  0d 08 7a 0e 2e 6f 75 74  |ge bytes..z..out|
00001960  65 72 6c 6f 6f 70 0d 08  84 2d 4c 44 41 20 76 70  |erloop...-LDA vp|
00001970  73 2c 58 20 5c 20 72 65  76 65 72 73 65 20 62 69  |s,X \ reverse bi|
00001980  74 73 20 69 6e 20 61 6c  6c 20 56 50 53 20 62 79  |ts in all VPS by|
00001990  74 65 73 0d 08 8e 28 53  54 41 20 74 65 6d 70 20  |tes...(STA temp |
000019a0  5c 20 74 65 6d 70 6f 72  61 72 79 20 7a 65 72 6f  |\ temporary zero|
000019b0  20 70 61 67 65 20 73 74  6f 72 65 0d 08 98 0c 4c  | page store....L|
000019c0  44 59 20 23 26 30 37 0d  08 a2 0e 2e 69 6e 6e 65  |DY #&07.....inne|
000019d0  72 6c 6f 6f 70 0d 08 ac  1d 52 4f 4c 20 74 65 6d  |rloop....ROL tem|
000019e0  70 20 5c 20 62 69 74 20  69 6e 74 6f 20 63 61 72  |p \ bit into car|
000019f0  72 79 0d 08 b6 22 52 4f  52 20 41 20 5c 20 63 61  |ry..."ROR A \ ca|
00001a00  72 72 79 20 69 6e 74 6f  20 61 63 63 75 6d 75 6c  |rry into accumul|
00001a10  61 74 6f 72 0d 08 c0 07  44 45 59 0d 08 ca 11 42  |ator....DEY....B|
00001a20  50 4c 20 69 6e 6e 65 72  6c 6f 6f 70 0d 08 d4 23  |PL innerloop...#|
00001a30  53 54 41 20 76 70 73 2c  58 20 5c 20 73 74 6f 72  |STA vps,X \ stor|
00001a40  65 20 72 65 76 65 72 73  65 64 20 62 79 74 65 0d  |e reversed byte.|
00001a50  08 de 07 44 45 58 0d 08  e8 2d 42 50 4c 20 6f 75  |...DEX...-BPL ou|
00001a60  74 65 72 6c 6f 6f 70 20  5c 20 67 6f 20 62 61 63  |terloop \ go bac|
00001a70  6b 20 69 66 20 6d 6f 72  65 20 56 50 53 20 62 79  |k if more VPS by|
00001a80  74 65 73 0d 08 f2 07 52  54 53 0d 08 fc 0d 2e 6f  |tes....RTS.....o|
00001a90  6c 64 69 72 71 32 76 0d  09 06 0c 45 51 55 57 20  |ldirq2v....EQUW |
00001aa0  26 30 30 0d 09 10 0d 2e  68 61 6d 74 61 62 6c 65  |&00.....hamtable|
00001ab0  0d 09 1a 12 45 51 55 44  20 26 30 31 30 31 46 46  |....EQUD &0101FF|
00001ac0  30 31 0d 09 24 12 45 51  55 44 20 26 46 46 30 31  |01..$.EQUD &FF01|
00001ad0  30 30 46 46 0d 09 2e 12  45 51 55 44 20 26 46 46  |00FF....EQUD &FF|
00001ae0  30 31 30 32 46 46 0d 09  38 12 45 51 55 44 20 26  |0102FF..8.EQUD &|
00001af0  30 37 46 46 46 46 30 41  0d 09 42 12 45 51 55 44  |07FFFF0A..B.EQUD|
00001b00  20 26 46 46 30 31 30 30  46 46 0d 09 4c 12 45 51  | &FF0100FF..L.EQ|
00001b10  55 44 20 26 30 30 46 46  30 30 30 30 0d 09 56 12  |UD &00FF0000..V.|
00001b20  45 51 55 44 20 26 30 42  46 46 46 46 30 36 0d 09  |EQUD &0BFFFF06..|
00001b30  60 12 45 51 55 44 20 26  46 46 30 33 30 30 46 46  |`.EQUD &FF0300FF|
00001b40  0d 09 6a 12 45 51 55 44  20 26 46 46 30 31 30 43  |..j.EQUD &FF010C|
00001b50  46 46 0d 09 74 12 45 51  55 44 20 26 30 37 46 46  |FF..t.EQUD &07FF|
00001b60  46 46 30 34 0d 09 7e 12  45 51 55 44 20 26 30 37  |FF04..~.EQUD &07|
00001b70  46 46 46 46 30 36 0d 09  88 12 45 51 55 44 20 26  |FFFF06....EQUD &|
00001b80  30 37 30 37 30 37 46 46  0d 09 92 12 45 51 55 44  |070707FF....EQUD|
00001b90  20 26 30 35 46 46 46 46  30 36 0d 09 9c 12 45 51  | &05FFFF06....EQ|
00001ba0  55 44 20 26 46 46 30 44  30 30 46 46 0d 09 a6 12  |UD &FF0D00FF....|
00001bb0  45 51 55 44 20 26 46 46  30 36 30 36 30 36 0d 09  |EQUD &FF060606..|
00001bc0  b0 12 45 51 55 44 20 26  30 37 46 46 46 46 30 36  |..EQUD &07FFFF06|
00001bd0  0d 09 ba 12 45 51 55 44  20 26 46 46 30 31 30 32  |....EQUD &FF0102|
00001be0  46 46 0d 09 c4 12 45 51  55 44 20 26 30 39 46 46  |FF....EQUD &09FF|
00001bf0  46 46 30 34 0d 09 ce 12  45 51 55 44 20 26 30 32  |FF04....EQUD &02|
00001c00  46 46 30 32 30 32 0d 09  d8 12 45 51 55 44 20 26  |FF0202....EQUD &|
00001c10  46 46 30 33 30 32 46 46  0d 09 e2 12 45 51 55 44  |FF0302FF....EQUD|
00001c20  20 26 30 35 46 46 46 46  30 38 0d 09 ec 12 45 51  | &05FFFF08....EQ|
00001c30  55 44 20 26 46 46 30 33  30 30 46 46 0d 09 f6 12  |UD &FF0300FF....|
00001c40  45 51 55 44 20 26 46 46  30 33 30 32 46 46 0d 0a  |EQUD &FF0302FF..|
00001c50  00 12 45 51 55 44 20 26  30 33 30 33 46 46 30 33  |..EQUD &0303FF03|
00001c60  0d 0a 0a 12 45 51 55 44  20 26 30 35 46 46 46 46  |....EQUD &05FFFF|
00001c70  30 34 0d 0a 14 12 45 51  55 44 20 26 46 46 30 34  |04....EQUD &FF04|
00001c80  30 34 30 34 0d 0a 1e 12  45 51 55 44 20 26 46 46  |0404....EQUD &FF|
00001c90  30 46 30 32 46 46 0d 0a  28 12 45 51 55 44 20 26  |0F02FF..(.EQUD &|
00001ca0  30 37 46 46 46 46 30 34  0d 0a 32 12 45 51 55 44  |07FFFF04..2.EQUD|
00001cb0  20 26 30 35 30 35 30 35  46 46 0d 0a 3c 12 45 51  | &050505FF..<.EQ|
00001cc0  55 44 20 26 30 35 46 46  46 46 30 34 0d 0a 46 12  |UD &05FFFF04..F.|
00001cd0  45 51 55 44 20 26 30 35  46 46 46 46 30 36 0d 0a  |EQUD &05FFFF06..|
00001ce0  50 12 45 51 55 44 20 26  46 46 30 33 30 45 46 46  |P.EQUD &FF030EFF|
00001cf0  0d 0a 5a 12 45 51 55 44  20 26 46 46 30 31 30 43  |..Z.EQUD &FF010C|
00001d00  46 46 0d 0a 64 12 45 51  55 44 20 26 30 39 46 46  |FF..d.EQUD &09FF|
00001d10  46 46 30 41 0d 0a 6e 12  45 51 55 44 20 26 30 42  |FF0A..n.EQUD &0B|
00001d20  46 46 46 46 30 41 0d 0a  78 12 45 51 55 44 20 26  |FFFF0A..x.EQUD &|
00001d30  46 46 30 41 30 41 30 41  0d 0a 82 12 45 51 55 44  |FF0A0A0A....EQUD|
00001d40  20 26 30 42 46 46 46 46  30 38 0d 0a 8c 12 45 51  | &0BFFFF08....EQ|
00001d50  55 44 20 26 46 46 30 44  30 30 46 46 0d 0a 96 12  |UD &FF0D00FF....|
00001d60  45 51 55 44 20 26 30 42  30 42 30 42 46 46 0d 0a  |EQUD &0B0B0BFF..|
00001d70  a0 12 45 51 55 44 20 26  30 42 46 46 46 46 30 41  |..EQUD &0BFFFF0A|
00001d80  0d 0a aa 12 45 51 55 44  20 26 30 43 46 46 30 43  |....EQUD &0CFF0C|
00001d90  30 43 0d 0a b4 12 45 51  55 44 20 26 46 46 30 44  |0C....EQUD &FF0D|
00001da0  30 43 46 46 0d 0a be 12  45 51 55 44 20 26 46 46  |0CFF....EQUD &FF|
00001db0  30 46 30 43 46 46 0d 0a  c8 12 45 51 55 44 20 26  |0F0CFF....EQUD &|
00001dc0  30 37 46 46 46 46 30 41  0d 0a d2 12 45 51 55 44  |07FFFF0A....EQUD|
00001dd0  20 26 46 46 30 44 30 43  46 46 0d 0a dc 12 45 51  | &FF0D0CFF....EQ|
00001de0  55 44 20 26 30 44 30 44  46 46 30 44 0d 0a e6 12  |UD &0D0DFF0D....|
00001df0  45 51 55 44 20 26 30 42  46 46 46 46 30 36 0d 0a  |EQUD &0BFFFF06..|
00001e00  f0 12 45 51 55 44 20 26  46 46 30 44 30 45 46 46  |..EQUD &FF0D0EFF|
00001e10  0d 0a fa 12 45 51 55 44  20 26 30 39 46 46 46 46  |....EQUD &09FFFF|
00001e20  30 38 0d 0b 04 12 45 51  55 44 20 26 30 39 30 39  |08....EQUD &0909|
00001e30  30 39 46 46 0d 0b 0e 12  45 51 55 44 20 26 46 46  |09FF....EQUD &FF|
00001e40  30 46 30 32 46 46 0d 0b  18 12 45 51 55 44 20 26  |0F02FF....EQUD &|
00001e50  30 39 46 46 46 46 30 41  0d 0b 22 12 45 51 55 44  |09FFFF0A..".EQUD|
00001e60  20 26 46 46 30 38 30 38  30 38 0d 0b 2c 12 45 51  | &FF080808..,.EQ|
00001e70  55 44 20 26 30 39 46 46  46 46 30 38 0d 0b 36 12  |UD &09FFFF08..6.|
00001e80  45 51 55 44 20 26 30 42  46 46 46 46 30 38 0d 0b  |EQUD &0BFFFF08..|
00001e90  40 12 45 51 55 44 20 26  46 46 30 33 30 45 46 46  |@.EQUD &FF030EFF|
00001ea0  0d 0b 4a 12 45 51 55 44  20 26 46 46 30 46 30 43  |..J.EQUD &FF0F0C|
00001eb0  46 46 0d 0b 54 12 45 51  55 44 20 26 30 39 46 46  |FF..T.EQUD &09FF|
00001ec0  46 46 30 34 0d 0b 5e 12  45 51 55 44 20 26 30 46  |FF04..^.EQUD &0F|
00001ed0  30 46 46 46 30 46 0d 0b  68 12 45 51 55 44 20 26  |0FFF0F..h.EQUD &|
00001ee0  46 46 30 46 30 45 46 46  0d 0b 72 12 45 51 55 44  |FF0F0EFF..r.EQUD|
00001ef0  20 26 30 35 46 46 46 46  30 38 0d 0b 7c 12 45 51  | &05FFFF08..|.EQ|
00001f00  55 44 20 26 46 46 30 44  30 45 46 46 0d 0b 86 12  |UD &FF0D0EFF....|
00001f10  45 51 55 44 20 26 46 46  30 46 30 45 46 46 0d 0b  |EQUD &FF0F0EFF..|
00001f20  90 12 45 51 55 44 20 26  30 45 46 46 30 45 30 45  |..EQUD &0EFF0E0E|
00001f30  0d 0b 9a 05 5d 0d 0b a4  05 ed 0d 0b ae 05 e1 0d  |....]...........|
00001f40  ff                                                |.|
00001f41
14-04-89/TSDP2.m0
14-04-89/TSDP2.m1
14-04-89/TSDP2.m2
14-04-89/TSDP2.m4
14-04-89/TSDP2.m5