NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0001 0002 OPTION BUNLST,TUNLST 0003 * OPTION XREF 0004 * OPTION DUNLST 0005 * AUTHOR: COLIN HINSON 0006 0001 MAXINT EQU 1 0007 0001 ALLOW EQU 1 ALLOW SUB PAGE ALLOCATION 0008 0001 FORCE EQU 1 FORCE SUB PAGE ALLOCATION 0009 0001 BBC2 EQU 1 ALLOW DATACAST CODE 0010 * 0011 COPY GLOBAL.990 A0001 * A0002 * RAM ALLOCATION FOR INSTANT TEXT A0003 * A0004 * AUTHOR: COLIN HINSON * A0005 * A0006 * MEMORY MAP FOR TMS9995: A0007 * A0008 * 0 TO >3FFF = EPROM A0009 * >4000 TO >BFFF = PAGED DRAM A0010 * >C000 TO >DFFF = SRAM (CAN BE CHANGED BY ALTERING THE PA A0011 * >E000 TO >EFFF = NOT CURRENTLY USED A0012 * >F000 TO >F0FF = TMS9995 INTERNAL RAM. A0013 * >F800 TO >F8FF = VDP REGISTER ACCESS A0014 * >F900 TO >F9FF = VDP DATA READ ACCESS A0015 * >FA00 TO >FAFF = VDP DATA WRITE ACCESS A0016 * >FB00 TO >FBFF = LOAD PULSE TO TMS3551 A0017 * >FC00 TO >FCFF = LATCH FOR DRAM PAGING. (MAPPER) A0018 * A0019 * CRU EQUATES A0020 * A0021 0080 IOPORT EQU >80 TMS9902 RS232 PORT A0022 0180 T3551 EQU >180 A0023 0280 SLOWS EQU >280 A0024 0380 KBDCRU EQU >380 A0025 * A0026 * Equates A0027 * A0028 000D VRAM EQU R13 A0029 * A0030 * EQUATES FOR MEMORY MAPPED DEVICES A0031 * A0032 F800 VDPREG EQU >F800 VDP REGISTER ADDRESS A0033 F900 VDPRD EQU >F900 VDP DATA READ ADDRESS A0034 FB00 LD3551 EQU >FB00 MEMORY MAPPED LOAD PULSE A0035 FC00 MAPPER EQU >FC00 RAM PAGE LATCH. A0036 * A0037 * EQUATES FOR THE PAGED RAM, MAPPED @>4000 ->BFFF A0038 * A0039 4000 DORG >4000 A0040 4000 MAPSTT BSS >8000 A0041 C000 MAPEND EQU $ A0042 0440 PAGSIZ EQU >440 ROWS 0-24, 27 AND COUNTERS A0043 001F MAXMAP EQU 31 A0044 001E PAGQTY EQU >7FFF/PAGSIZ NO. OF T/T PAGES IN ONE MAP PA A0045 * WARNING: >8000 GOES NEGATIVE! A0046 * EQUATE FOR SIZE OF LINKED LIST A0047 * =NO. OF MAPS, * PAGES PER MAP, * 6 BYTES PER ENTRY, DIVI NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0002 A0048 * BY SIZE OF ONE PAGE, +1 A0049 * THIS GIVES AN ANSWER IN PAGES. A0050 * A0051 0006 LNKSIZ EQU MAXMAP+1*PAGQTY*6/PAGSIZ+1 A0052 * A0053 * EQUATES FOR THE 8K STATIC, MAPPED @>C000 ->DFFF A0054 * A0055 C000 DORG >C000 A0056 C000 INDEX BSS >800*2 INDEX FOR PAGE START ADDRESSES A0057 D000 IDXEND EQU $ END OF INDEX A0058 D000 PAGCNT BSS 2 A0059 D002 MAGADR BSS 16 CURRENT MAGAZINE ADDRESSES A0060 D012 MAGMAP BSS 16 (LSB) CURRENT MAGAZINE MAP NUMBERS A0061 * (MSB) PAGE CLEARED STATUS A0062 D022 MAGPAG BSS 16 CURRENT MAGAZINE PAGE NUMBERS A0063 D032 MAGSUB BSS 16 CURRENT MAGAZINE SUB PAGE NO. A0064 D042 NXTTMP BSS 2 Temp variable used in NEXTRP A0065 D044 PKEY BSS 2 PS KEY FLAG/POINTER A0066 D046 HLPADR BSS 2 CURRENT HELP PAGE START. A0067 D048 HELPAG BSS 2 HELP PAGE COUNTER A0068 D04A RSTCNT BSS 2 RESET KEY PRESS COUNTER A0069 D04C LATPAG BSS 2 LATEST PAGE NUMBER A0070 D04E LATSUB BSS 2 LATEST SUB PAGE NUMER A0071 D050 PAG830 BSS 2 PAGE NUMBER GIVEN BY 8/30 A0072 D052 CNT830 BSS 2 PACKET 8/30 COUNTER A0073 D054 DGKBRA BSS 2 DIGIT KEY BRANCH ADR. STORE A0074 D056 SPECBR BSS 2 SPECIAL KEY SEQ. BRANCH STORE A0075 D058 INTBRA BSS 2 TIMER INTERRUPT BRANCH ADR A0076 D05A PKTSTT BSS 2 START OF DATA FROM PACKET 31 A0077 D05C PKTEND BSS 2 END OF DATA FROM PACKET 31 A0078 D05E DLADR BSS 2 ADDRESS OF DL BYTE IN ROW STORE A0079 D060 CRDATA BSS 2 SPACE FOR C RTN, LINE FEED A0080 D062 ROWDTA BSS 2 SPACE FOR ASCII ROW NUMBER A0081 D064 COLOND BSS 2 SPACE FOR A COLON A0082 D066 HSHCNT BSS 2 HASH COUNT A0083 D068 EVEN A0084 D068 DHTFGS BSS 24 DOUBLE HEIGHT FLAGS A0085 D080 STACK BSS 10 RETURN ADDRESS STACK A0086 * ###################FOR CHRIS A0087 * A0088 * STORE FOR HAMMING OF CURRENT/LAST DISPLAYED HEADER. A0089 * A0090 D08A HAMCHK BSS 8 A0091 * ################################### A0092 D092 KEYFLG BSS 1 DEBOUNCE COUNTER A0093 D093 KEYPRO BSS 1 KEY BEING PROCESSED A0094 D094 OLDTIM BSS 1 STORE FOR HEADER SECONDS A0095 D095 LCOLOR BSS 1 STORE FOR LAST HEADER COLOUR A0096 D095 CMDTA EQU $-1 A0097 D096 CM1DTA BSS 1 CM1 DATA STORE A0098 D097 CM2DTA BSS 1 CM2 DATA STORE A0099 D098 CM3DTA BSS 1 CM3 DATA STORE A0100 D099 CM4DTA BSS 1 CM4 DATA STORE A0101 D09A CHANEL BSS 1 DATACAST CHANNEL NUMBER STORE A0102 D09B DISP24 BSS 1 ROW 25 DISPLAY TYPE NUMBER A0103 D09C FTYPE BSS 1 F KEY TYPE LAST DISPLAYED A0104 D09D P31ROW BSS 1 CURRENT PACKET 31 WRITE ROW NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0003 A0105 D09E HELDCH BSS 1 HELD CHARACTER STORE A0106 D09F GOSET BSS 1 SEPARATED MOSAIC DATA A0107 * A0108 D0A0 EVEN A0109 D0A0 PRNTBF EQU $ START OF PRINT BUFFER. A0110 E000 DORG >E000 END OF RAM+1 A0111 E000 PBFEND EQU $ A0112 E000 EVEN A0113 * A0114 * A0115 * Internal TMS9995 Ram definfitions A0116 * A0117 F000 DORG >F000 A0118 F000 WSP BSS 32 Work space A0119 F001 R0LSB EQU WSP+1 LS BYTE OF R0 A0120 F003 R1LSB EQU WSP+R1+R1+1 LS BYTE OF R1 A0121 F005 R2LSB EQU WSP+R2+R2+1 LS BYTE OF R2 A0122 F009 R4LSB EQU WSP+R4+R4+1 LS BYTE OF R4 A0123 F011 R8LSB EQU WSP+R8+R8+1 LS BYTE OF R8 A0124 F020 INRWKS BSS 32 INROW WORKSPACE A0125 * A0126 * EQUATES FOR WORKS2 REGISTERS A0127 * A0128 0007 WR7 EQU 7 A0129 0008 WR8 EQU 8 A0130 0009 WR9 EQU 9 A0131 000A WR10 EQU 10 A0132 000B WR11 EQU 11 A0133 000C WR12 EQU 12 A0134 000D WR13 EQU 13 A0135 000E WR14 EQU 14 A0136 F040 EVEN A0137 F02E XOPWKS EQU $-18 A0138 F040 BSS 14 REGISTERS 9 TO 15 A0139 F04E DISADR BSS 2 CPU RAM ADR. OF DISPLAYED PAGE A0140 F050 PAGHEX BSS 2 HEX OF PAGE NO. (0-99) A0141 F052 SUBHEX BSS 2 HEX OF 2 LSB'S OF SUB PAGE DISPLAYED. A0142 * A0143 F054 DISMAP BSS 1 MAPPER VALUE FOR DISPLAYED PAGE A0144 F055 SERATR BSS 1 SERIAL ATTRIBUTE STORE A0145 * A0146 * Row store A0147 * A0148 F056 EVEN A0149 F056 ROWST EQU $ Start of row store A0150 F056 RMAG BSS 1 Magazine number A0151 F057 RROW BSS 1 Row number A0152 F058 PAGEU BSS 1 Page number units A0153 F059 PAGET BSS 1 Page number tens A0154 F05A SUBPU BSS 1 Sub page number A0155 F05B SUBPT BSS 1 A0156 F05C SUBPH BSS 1 A0157 F05D SUBPTH BSS 1 A0158 F05E CNTRLA BSS 1 Control group A A0159 F05F CNTRLB BSS 1 Control group B A0160 F060 BSS 24 A0161 F078 TIME BSS 7 Start of TIME field NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0004 A0162 F07F SECNDS BSS 1 SECONDS UNITS A0163 F080 ROWEND BSS 1 SPACE FOR COLON A0164 * A0165 F081 CHSDIS BSS 1 CURRENTLY DISPLAYED CHAR. SET. A0166 * A0167 F082 EVEN A0168 F082 MAGSER BSS 16 SERIAL MAGAZINE FLAGS FOR EACH MAG. A0169 F092 DISMAG BSS 2 DISPLAY PAGE MAGAZINE (*2 FOR INDEXING) A0170 * A0171 * DOWNLOADED CODE AREA A0172 * A0173 F094 BYTELP BSS >28 WORDS PART OF 'INROW' ROUTINE A0174 F0BC PUTRLP BSS >A PART OF 'PUTROW' ROUTINE A0175 F0C6 DLDEND EQU $ A0176 * A0177 F0C6 DORG >F0FA-32-20 A0178 * A0179 * NOTE THAT THESE TWO WORKSPACES ARE OVERLAPPING A0180 * A0181 F0C6 WORKS2 BSS 20 SECOND WORKSPACE A0182 F0DA INT1WS BSS 32 INTERRUPT 1 WORKSPACE A0183 * A0184 * EQUATES FOR INT1 REGISTERS A0185 * A0186 0006 R6I EQU 6 FLAG REGISTER A0187 0007 R7I EQU 7 A0188 0008 R8I EQU 8 A0189 0009 R9I EQU 9 A0190 000A R10I EQU 10 A0191 000B R11I EQU 11 A0192 000C R12I EQU 12 A0193 000D R13I EQU 13 A0194 000E R14I EQU 14 A0195 000F R15I EQU 15 A0196 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0005 A0198 ************************************************************ A0199 * * A0200 * VDP ram allocation * A0201 * * A0202 ************************************************************ A0203 * A0204 0028 NCHAR EQU 40 Number of characters a line A0205 001C NLINE EQU 28 Number of lines per page A0206 0460 PAGLEN EQU NCHAR*NLINE Length of stored page A0207 * A0208 0000 DORG 0 A0209 FFFE BAGC0 EQU $-2 Char gen 0 - alhpanumberics A0210 0000 BSS >500 A0211 04FE BAGC1 EQU $-2 Char gen 1 - not used A0212 04FE BAGC2 EQU $-2 Char gen 2 - not used A0213 04FE BAGC3 EQU $-2 Char gen 3 - Graphics A0214 0500 BSS >500 A0215 09FF BAPA EQU $-1 A0216 0A00 DSPLAY BSS 25*80 Display area A0217 11D0 BSS PAGLEN Stored page area A0218 162F BAMT EQU $-1 Start of buffer area A0219 162F BAMP EQU $-1 A0220 1630 CMPEND BSS >3FFF-$ BUFFER LENGTH (N/U IN CODE) A0221 3FFF BAMTF EQU $ End of buffer NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0006 0013 * 0014 0000 AORG 0 0015 0000 F000 DATA WSP,RESET Reset vector 0002 0098 0016 0004 F0DA DATA INT1WS,INT1 9902 INTERRUPT 0006 1994 0017 0008 FFFF DATA -1,-1 INT 2 000A FFFF 0018 * 0019 0040 AORG >40 0020 DXOP SETA,0 0021 0040 F02E DATA XOPWKS,SETADR 0042 23BA 0022 * 0023 COPY DATAS.990 B0001 * B0002 * DATA STATEMENTS ETC FOR INSTANT TEXT ROUTINES B0003 * B0004 * AUTHOR: COLIN HINSON B0005 * B0006 * EQUATES FOR ROW COUNTERS ETC. B0007 * B0008 0018 PKT24 EQU 24 B0009 0019 PKT27 EQU 25 B0010 001A HICNT EQU 26 MAXIMUM ROW COUNT B0011 001B COUNT4 EQU 27 MAX ROW COUNT DIVIDED BY 4 B0012 0410 COUNTS EQU 40*26 START OF ROW COUNTERS B0013 * B0014 * MASKS TO SPLIT THE MAP NUMBER FROM B0015 * THE PAGE ADDRESS B0016 * B0017 003F MAPMSK EQU >3F B0018 FFC0 PAGMSK EQU >FFC0 B0019 * B0020 * MASKS TO SPLIT THE SUB PAGE FLAG B0021 * FROM THE LINK ADDRESS B0022 * B0023 FFFE LNKMSK EQU >FFFE B0024 0001 SUBMSK EQU >0001 B0025 * B0026 * Constants B0027 * B0028 0044 EVEN B0029 0044 000A TEN DATA 10 B0030 0046 001A DEC26 DATA 26 B0031 0048 0028 FORTY DATA 40 B0032 004A 0050 N80 DATA 80 B0033 004C BB80 TIMVAL DATA 48000 16TH SECOND FOR DECREMENTER B0034 * B0035 004E 0001 WD0001 DATA >0001 B0036 0050 0002 WD0002 DATA >0002 B0037 0052 0004 WD0004 DATA >0004 B0038 0054 0008 WD0008 DATA >0008 B0039 0056 0010 WD0010 DATA >0010 B0040 0058 0020 WD0020 DATA >0020 B0041 005A 0040 WD0040 DATA >0040 B0042 005C 0080 WD0080 DATA >0080 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0007 B0043 005E 0100 WD0100 DATA >0100 B0044 0060 0200 WD0200 DATA >0200 B0045 0062 0400 WD0400 DATA >0400 B0046 0064 0800 WD0800 DATA >0800 B0047 0066 1000 WD1000 DATA >1000 B0048 0068 2000 WD2000 DATA >2000 B0049 006A 4000 WD4000 DATA >4000 B0050 006C 8000 WD8000 DATA >8000 B0051 006E 8100 WD8100 DATA >8100 B0052 * B0053 0070 0003 WD0003 DATA >0003 B0054 0072 1100 WD1100 DATA >1100 B0055 0074 1800 WD1800 DATA >1800 B0056 0076 C000 WDC000 DATA >C000 B0057 * B0058 004E BYTE00 EQU WD0001 B0059 005E BYTE01 EQU WD0100 B0060 0060 BYTE02 EQU WD0200 B0061 0062 BYTE04 EQU WD0400 B0062 0078 05 BYTE05 BYTE >05 B0063 0079 06 BYTE06 BYTE >06 B0064 007A 07 BYTE07 BYTE >07 B0065 007B 09 BYTE09 BYTE >09 B0066 007C 0B BYTE0B BYTE >0B B0067 007D 0C BYTE0C BYTE >0C B0068 007E 0D BYTE0D BYTE >0D B0069 0066 BYTE10 EQU WD1000 B0070 0072 BYTE11 EQU WD1100 B0071 0074 BYTE18 EQU WD1800 B0072 007F 19 BYTE19 BYTE >19 B0073 0080 1A BYTE1A BYTE >1A B0074 0068 BYTE20 EQU WD2000 B0075 0081 43 BYTE43 BYTE >43 FOR TMS9902 CONTROL REGISTER B0076 0082 48 BYTE48 BYTE >48 B0077 0083 60 BYTE60 BYTE >60 B0078 0084 62 BYTE62 BYTE >62 FOR TMS9902 CONTROL REGISTER B0079 0085 7F BYTE7F BYTE >7F B0080 006C BYTE80 EQU WD8000 B0081 0086 90 BYTE90 BYTE >90 B0082 0087 A0 BYTEA0 BYTE >A0 B0083 0088 A1 BYTEA1 BYTE >A1 B0084 0089 C0 BYTEC0 BYTE >C0 B0085 008A E0 BYTEE0 BYTE >E0 B0086 008B E7 BYTEE7 BYTE >E7 B0087 008C F0 BYTEF0 BYTE >F0 B0088 008D FF BYTEFF BYTE >FF B0089 * B0090 008E 50 CHP BYTE 'P' B0091 008F 2E FSTOP BYTE '.' B0092 0090 24 DOLLAR BYTE '$' B0093 0091 23 HASH BYTE '#' B0094 0092 53 TEXTS BYTE 'S' B0095 0066 MAXCNT EQU WD1000 MAXIMUM ROW COUNT B0096 0094 EVEN B0097 * B0098 004E TXHALT EQU WD0001 TRANSMIT HALT REQUESTED B0099 0050 BEMPTY EQU WD0002 PRINT BUFFER EMPTY NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0008 B0100 0052 PBFULL EQU WD0004 PRINT BUFFER FULL B0101 * B0102 * B0103 008A WHITE EQU BYTEE0 B0104 0089 CYAN EQU BYTEC0 B0105 0068 RED EQU WD2000 B0106 006A GREEN EQU WD4000 B0107 0083 YELLOW EQU BYTE60 B0108 0060 INCRUS EQU WD0200 B0109 * B0110 0062 CM1 EQU WD0400 B0111 0078 CM2 EQU BYTE05 B0112 0079 CM3 EQU BYTE06 B0113 007A CM4 EQU BYTE07 B0114 * B0115 004E SUBFLG EQU WD0001 B0116 005E TYPEA EQU WD0100 TYPE A DATACAST FORMAT B0117 0060 RI EQU WD0200 REPEAT INDICATOR BIT B0118 0062 CI EQU WD0400 CONTINUITY INDICATOR BIT B0119 0064 C4 EQU WD0800 B0120 0064 DL EQU WD0800 DATA LENGTH INDICATOR BIT B0121 0064 INC EQU WD0800 INCRUSTATION BIT B0122 0066 BT4 EQU WD1000 B0123 006C DC1 EQU WD8000 B0124 0066 DC4 EQU WD1000 B0125 005E DC8 EQU WD0100 B0126 006E DC1DC8 EQU WD8100 B0127 0072 DC4DC8 EQU WD1100 DC4 BIT AND DC8 BIT B0128 0060 WIDTH2 EQU WD0200 B0129 0068 CNCEAL EQU WD2000 CONCEAL BIT IN CM2 B0130 * B0131 * Control Flags (R6) B0132 * B0133 004E DHONRW EQU WD0001 DOUBLE HEIGHT ON ROW B0134 0052 MDCHNG EQU WD0004 N/F MODE CHANGE B0135 0054 NOSUBP EQU WD0008 NO SUB PAGES ALLOWED B0136 0056 PKT31 EQU WD0010 PACKET 31 IN ROW STORE B0137 0058 DCAST EQU WD0020 DATACAST ON DISPLAY FLAG B0138 *SPARE EQU WD0040 ROW 8/30 DEALT WITH B0139 005C RXDIS EQU WD0080 DISPLAYED PAGE IS BEING RX'D B0140 005E RH EQU WD0100 Roll header B0141 0060 NFST EQU WD0200 DISPLAYED PAGE IS N/F OR S/T B0142 0062 SUBHDR EQU WD0400 SUB PAGE HEADER FLAG B0143 0064 LEVEL2 EQU WD0800 LEVEL2 FEATURES FLAG B0144 0066 UNDLIN EQU WD1000 UNDERLINE FLAG B0145 0068 HELP EQU WD2000 IN HELP MODE B0146 006A HOLD EQU WD4000 IN HELD GRAPHICS MODE B0147 006C NOPAGE EQU WD8000 NO PAGE AVAILABLE B0148 * B0149 * MORE CONTROL FLAGS (R14) B0150 * B0151 004E NOHDR EQU WD0001 MESSAGE IN HEADER - DON'T OVERWRITE B0152 0050 PAGCHG EQU WD0002 PAGE QUANTITY HAS CHANGED B0153 0052 QTYKEY EQU WD0004 PAGE QTY KEY IS IN 'ON' STATE B0154 0094 0006 PAGRDY DATA >0002+>0004 PAGE QTY NEEDS TO BE WRITTEN B0155 0054 WRTPAG EQU WD0008 WRITE THE PAGE (RX=DISPLAY) B0156 0056 TEXT EQU WD0010 TEXT MODE (MIX=0) MIX MODE (MIX=1) NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0009 B0157 0058 NFDISP EQU WD0020 PAGE IS NEWSFLASH MODE B0158 *SPARE EQU WD0040 B0159 005C MIX EQU WD0080 MIX MODE (TEXT=1), N/F BOX(TXT=0) B0160 0096 0090 MIXTXT DATA >0090 MIX AND TEXT MODE FLAGS B0161 005E INHEDR EQU WD0100 INHIBIT HEADER BIT SET FOR DISPLAY B0162 0060 INH830 EQU WD0200 INHIBIT 8/30 INITIAL PAGE B0163 0062 OVRIDE EQU WD0400 8/30 INIT PAGE OVER-RIDDEN BY USER B0164 0064 ENDFLG EQU WD0800 BEEN PAST END OF LINKED LIST ONCE F NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0010 0025 COPY INIT.990 C0001 ************************************************************ C0002 * * C0003 * INIT - Main initialization * C0004 * * C0005 * Called by: None * C0006 * * C0007 * Calls: INIT * C0008 * GENCAR * C0009 * DISPN * C0010 * MEMIDT * C0011 * INROW * C0012 * CHKPGN * C0013 * CLRDIS * C0014 * * C0015 * AUTHOR: COLIN HINSON * C0016 ************************************************************ C0017 * C0018 * Clear the internal 9995 ram C0019 * C0020 0098 02A0 RESET STWP R0 Point to first ram location C0021 009A 05C0 INCT R0 C0022 009C 04F0 CRLOOP CLR *R0+ Clear a word C0023 009E 0280 CI R0,>F0FA End of internal ram ? 00A0 F0FA C0024 00A2 1AFC JL CRLOOP No - loop C0025 * C0026 * SET UP REGISTER POINTERS C0027 * C0028 00A4 020A LI R10,STACK Initalise the stack pointer 00A6 D080 C0029 00A8 020C LI R12,KBDCRU 00AA 0380 C0030 00AC 1D07 SBO 7 TV TO PICTURE MODE C0031 00AE 020D LI R13,>FA00 POINT TO VRAM WRITE 00B0 FA00 C0032 * C0033 * SET UP 'INRWKS' REGISTERS C0034 * C0035 00B2 02E0 LWPI INRWKS 00B4 F020 C0036 00B6 0200 LI INR0,>0300 00B8 0300 C0037 00BA 04C1 CLR INR1 C0038 00BC 0202 LI INR2,>0100 00BE 0100 C0039 00C0 04C4 CLR INR4 C0040 00C2 0206 LI INR6,>FF00 00C4 FF00 C0041 00C6 04C8 CLR INR8 C0042 00C8 020A LI INR10,>4000 MASK FOR CORRECTABLE HAMMING 00CA 4000 C0043 00CC 020D LI INR13,>8000 MASK FOR PARITY BIT 00CE 8000 C0044 00D0 020E LI INFVRM,VDPRD (R14)POINT TO VRAM READ 00D2 F900 C0045 00D4 020F LI INVREG,VDPREG (R15)POINT TO VDP REG. ACCESS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0011 00D6 F800 C0046 * C0047 * SET UP INTERRUPT WORKSPACE REGISTERS C0048 * C0049 00D8 02E0 LWPI INT1WS 00DA F0DA C0050 00DC 0208 LI R8I,PRNTBF POINT TO PRINT BUFFER START 00DE D0A0 C0051 00E0 C248 MOV R8I,R9I COPY C0052 00E2 C1A0 MOV @BEMPTY,R6I SET PRINT BUFFER EMPTY 00E4 0050 C0053 00E6 020C LI R12I,IOPORT SET UP CRU BASE ADR. 00E8 0080 C0054 00EA 02E0 LWPI WSP 00EC F000 C0055 * C0056 * CLEAR THE STATIC RAM (8K) C0057 * C0058 00EE 0200 LI R0,INDEX POINT TO FIRST LOCATION 00F0 C000 C0059 00F2 0201 LI R1,INDEX+>2000 POINT TO LAST LOCATION 00F4 E000 C0060 00F6 04F0 CLRSTC CLR *R0+ C0061 00F8 8040 C R0,R1 CHECK FOR END C0062 00FA 1AFD JL CLRSTC LOOP TILL DONE C0063 * C0064 * INIT FIRST PAGE C0065 * C0066 00FC 0200 LI R0,>0100 00FE 0100 C0067 0100 C800 MOV R0,@PAGHEX SET PAGE CAPTURE =100 0102 F050 C0068 0104 C800 MOV R0,@PAG830 INIT INDEX PAGE NO. 0106 D050 C0069 0108 0720 SETO @SUBHEX SUB PAGE IRRELEVANT 010A F052 C0070 * C0071 * INIT MISCELLANEOUS RAM C0072 * C0073 010C D820 MOVB @WHITE,@LCOLOR SET TIME TO WHITE 010E 008A 0110 D095 C0074 0112 D820 MOVB @INTCM1,@CM1DTA SET UP CM1 DATA STORE 0114 027C 0116 D096 C0075 0118 D820 MOVB @INTCM1+1,@CM2DTA SET UP CM2 DATA STORE 011A 027D 011C D097 C0076 011E D820 MOVB @BYTE01,@P31ROW INIT PACKET 31 WRITE ROW 0120 005E 0122 D09D C0077 0124 0200 LI R0,': ' ############ FOR CHRIS 0126 3A20 C0078 0128 D800 MOVB R0,@ROWEND 012A F080 C0079 012C 0200 LI R0,': ' 012E 3A20 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0012 C0080 0130 C800 MOV R0,@COLOND SET UP A COLON 0132 D064 C0081 0134 0200 LI R0,>0D0A LOAD NEW LINE 0136 0D0A C0082 0138 C800 MOV R0,@CRDATA SAVE ################# 013A D060 C0083 * C0084 * DOWNLOAD PART OF 'INROW' INTO INTERNAL RAM C0085 * C0086 013C 0200 LI R0,BYTELP POINT TO RAM 013E F094 C0087 0140 0201 LI R1,CODSTT POINT TO CODE 0142 022E C0088 0144 CC31 DWNLDL MOV *R1+,*R0+ MOVE THE CODE C0089 0146 0281 CI R1,CODEND CHECK FOR END 0148 0260 C0090 014A 1AFC JL DWNLDL C0091 * C0092 * Init VDP C0093 * C0094 014C D020 MOVB @VDPRD,R0 DO RANDOM VRAM READ 014E F900 C0095 0150 06A0 BL @INITVD 0152 0290 C0096 0154 06A0 BL @IBASE 0156 02AC C0097 * C0098 * STOP THE TMS3551 C0099 * C0100 0158 020C LI R12,T3551 015A 0180 C0101 015C 3220 LDCR @BYTE11,8 SEND STOP BIT 015E 0072 C0102 0160 D800 MOVB R0,@LD3551 SEND LOAD PULSE 0162 FB00 C0103 * C0104 * Init VDP ram C0105 * C0106 0164 0200 LI R0,DSPLAY Point to start of VDP ram 0166 0A00 C0107 0168 2C00 SETA R0 Program VDP pointer C0108 016A 04C0 CLR R0 C0109 016C 0201 LI R1,64*256 NUMBER OF BYTES TO CLEAR 016E 4000 C0110 0170 D740 IVRLP MOVB R0,*VRAM CLEAR A BYTE C0111 0172 0601 DEC R1 C0112 0174 16FD JNE IVRLP C0113 * C0114 * Download the character generators C0115 * C0116 0176 06A0 BL @GENCAR Download main character set 0178 176C C0117 017A 04C6 CLR R6 C0118 017C 04C7 CLR R7 C0119 * C0120 * CLEAR THE DISPLAY STORE (256K BYTES) C0121 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0013 C0122 017E 04C0 CLR R0 MAP COUNTER C0123 0180 0201 LI R1,' ' SET UP SPACES 0182 2020 C0124 0184 0203 LI R3,MAPEND POINT TO RAM END 0186 C000 C0125 0188 D820 CLRM10 MOVB @WSP+1,@MAPPER SET UP THE MAPPER LATCH 018A F001 018C FC00 C0126 018E 0202 LI R2,MAPSTT POINT TO RAM START 0190 4000 C0127 0192 CC81 CLRMAP MOV R1,*R2+ CLEAR RAM TO SPACES C0128 0194 80C2 C R2,R3 CHECK FOR END C0129 0196 1AFD JL CLRMAP LOOP TILL THERE C0130 0198 0580 INC R0 NEXT MAP C0131 019A 0280 CI R0,MAXMAP DONE? 019C 001F C0132 019E 12F4 JLE CLRM10 N C0133 * C0134 * SET UP THE LINKED LIST IN THE FIRST 3K OF THE MAPPED C0135 * RAM (PAGE 0) C0136 * C0137 01A0 04E0 CLR @MAPPER SET UP MAPPER 01A2 FC00 C0138 01A4 0201 LI R1,LNKSIZ*PAGSIZ+MAPSTT POINT TO FREE SPACE 01A6 5980 C0139 01A8 0200 LI R0,MAPSTT POINT TO START OF LINKED LIST 01AA 4000 C0140 01AC 04F0 SETL05 CLR *R0+ CLEAR THE AREA C0141 01AE 8040 C R0,R1 CHECK FOR END C0142 01B0 1AFD JL SETL05 C0143 01B2 04C0 CLR R0 MAP COUNTER C0144 01B4 0203 LI R3,PAGQTY-LNKSIZ SET UP PAGES FOR FIRST MAP PAG 01B6 0018 C0145 01B8 0202 LI R2,MAPSTT+4 POINT TO FREE STACK START+4 01BA 4004 C0146 01BC 020F LI R15,MAPSTT SET UP FREE POINTER 01BE 4000 C0147 01C0 1004 JMP SETL30 C0148 01C2 0201 SETL10 LI R1,MAPSTT POINT TO START OF MAP PAGE 01C4 4000 C0149 01C6 0203 LI R3,PAGQTY SET UP PAGES PER MAP 01C8 001E C0150 01CA C481 SETL30 MOV R1,*R2 SET UP STORE PAGE ADR. C0151 01CC EC80 SOC R0,*R2+ SET UP MAP NUMBER C0152 01CE C882 MOV R2,@-6(R2) SET UP NEXT LINK POINTER 01D0 FFFA C0153 01D2 0222 AI R2,4 POINT TO NEXT STORE LINK 01D4 0004 C0154 01D6 0221 AI R1,PAGSIZ COMPUTE NEXT PAGE ADR. 01D8 0440 C0155 01DA 0603 DEC R3 COUNT THE STORE PAGE C0156 01DC 16F6 JNE SETL30 AND LOOP TILL DONE C0157 01DE 0580 INC R0 NEXT MAP NUMBER C0158 01E0 0280 CI R0,MAXMAP CHECK FOR FINISH 01E2 001F C0159 01E4 12EE JLE SETL10 LOOP TILL DONE C0160 01E6 04E2 CLR @-10(R2) CLEAR LAST LINK POINTER NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0014 01E8 FFF6 C0161 * C0162 * Initalise the TMS3551 C0163 * C0164 01EA 020C LI R12,T3551 01EC 0180 C0165 01EE 0201 LI R1,DIDEND-DIDROM Fetch length of table 01F0 000B C0166 01F2 D021 INITDL MOVB @DIDROM-1(R1),R0 Fetch memory data 01F4 025F C0167 01F6 3200 LDCR R0,8 Send it to the TMS3551 C0168 01F8 D800 MOVB R0,@LD3551 SEND A LOAD PULSE 01FA FB00 C0169 01FC 0601 DEC R1 End of loop ? C0170 01FE 16F9 JNE INITDL No - repeat C0171 * C0172 0200 E1A0 SOC @RH,R6 Start the header rolling 0202 005E C0173 * C0174 * INITIALIZE THE TMS9902 FOR 9600 BAUD, 8 BITS, NO PARITY C0175 * AND 2 STOP BITS. C0176 * FOR FURTHER INFORMATION SEE THE 'TMS9902 DATA SHEETS' C0177 * C0178 0204 020C LI R12,IOPORT 9902 ADDRESS 0206 0080 C0179 0208 1D1F SBO 31 RESET TMS9902 UART C0180 * LDCR @BYTE62,8 SET CONTROL REG. C0181 020A 3220 LDCR @BYTE43,8 SET CONTROL REG. 020C 0081 C0182 020E 1E0D SBZ 13 DON'T SET UP INTERVAL TIMER C0183 0210 3320 LDCR @BD9600,12 BAUD RATE=9600 0212 026E C0184 0214 1E14 SBZ 20 DISABLE OTHER INTERRUPTS C0185 0216 1E15 SBZ 21 C0186 0218 1D12 SBO RIENB ENABLE RX INTERRUPTS C0187 * C0188 * ALLOW INTERRUPTS, CLEAR SCREEN & WRITE PAGE NUMBER C0189 * C0190 021A 0300 LIMI MAXINT ALLOW INTERRUPTS 021C 0001 C0191 021E 06A0 BL @CLRALL CLEAR THE WHOLE SCREEN 0220 2228 C0192 0222 06A0 BL @DISPN WRITE THE PAGE NUMBER 0224 22E6 C0193 * SET UP TEXT MODE C0194 0226 06A0 BL @GOTEXT GO TO TEXT MODE 0228 11A4 C0195 * C0196 022A 0460 B @RSTART GO START RECEPTION OF TELETEXT 022C 02DE C0197 * C0198 * THE FOLLOWING CODE IS DOWNLOADED INTO INTERNAL RAM TO GAIN C0199 * THE SPEED REQUIRED IF 16 LINES OF TELETEXT ARE SEND PER V C0200 * C0201 022E D7C0 CODSTT MOVB INR0,*INVREG SEND TO VDP C0202 0230 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS C0203 0232 2442 CZC INR2,INR1 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0015 C0204 0234 160C JNE EMPTYI C0205 0236 D05E MOVB *INFVRM,INR1 READ A BYTE FROM VRAM BUFFER C0206 0238 1C05 JOP PTYOK IF ODD PARITY, OK C0207 023A 9181 CB INR1,INR6 LEAD BYTE? C0208 023C 130A JEQ LKINLP YES, RESTART ROW C0209 *################### STARRED OUT TO LEAVE BAD PARITY DATA C0210 * MOVB INR6,INR1 SET BYTE TO >FF FOR BAD PARITY C0211 *############################################### C0212 023E 0261 ORI INR1,>8000 SET MSBIT = PARITY ERROR 0240 8000 C0213 0242 1001 JMP LVMSB C0214 0244 404D PTYOK SZC INR13,INR1 REMOVE 'PARITY' (ITS 8 BIT DATA C0215 0246 DCC1 LVMSB MOVB INR1,*INR3+ SAVE DATA IN ROW STORE C0216 0248 8143 C INR3,INR5 CHECK FOR END OF STORE C0217 024A 1AF1 JL CODSTT AND LOOP TILL THERE C0218 024C 045B RT C0219 * C0220 024E 0460 EMPTYI B @EMPTY 0250 056E C0221 0252 0460 LKINLP B @INLP 0254 05B0 C0222 0256 CODMID EQU $ C0223 * C0224 * ROW TRANSFER LOOP (DOWNLOADED INTO INTERNAL RAM) C0225 * C0226 *PUTRLP C0227 * C0228 0256 DC72 PTLOOP MOVB *R2+,*R1+ Fetch a byte (WAS MOVB *R2+,R0) C0229 *##################### STARRED OUT SO AS TO KEEP ERROR C0230 * JLT PUTR80 Error byte ? , YES C0231 * MOVB R0,*R1+ Send byte to page store C0232 *##################################################### C0233 0258 80C2 PUTR60 C R2,R3 End of row store ? C0234 025A 1AFD JL PTLOOP NO, LOOP C0235 025C 04D4 PUTRXT CLR *R4 ENSURE MAP PAGE ZERO C0236 025E 045B RT AND RETURN TO CALLER C0237 * ##################### STARRED OUT AS NO LONGER USED C0238 * PUTR80 MOVB *R1+,@-1(R2) GET A GOOD BYTE FROM STORE C0239 * JMP PUTR60 C0240 * ############################################# C0241 0260 CODEND EQU $ C0242 0028 BYTBSS EQU CODMID-CODSTT C0243 000A PUTBSS EQU CODEND-CODMID C0244 * C0245 * MESSAGES AND TABLES C0246 * C0247 0260 A1 DIDROM BYTE >A1 C0248 0261 12 BYTE >12 C0249 0262 73 BYTE >73 C0250 0263 24 BYTE >24 C0251 0264 F5 BYTE >F5 C0252 0265 F6 BYTE >F6 C0253 0266 07 BYTE >07 C0254 0267 A8 BYTE >A8 C0255 0268 F9 BYTE >F9 C0256 0269 EA BYTE >EA C0257 026A EB BYTE >EB NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0016 C0258 026B DIDEND EQU $ C0259 026C EVEN C0260 * C0261 * BAUD RATE TABLE FOR 9902 @ 3MHZ USING TMS 9995. C0262 * C0263 026C 001A DATA >1A 19,200 BAUD C0264 026E 0034 BD9600 DATA >34 9600 BAUD C0265 0270 0068 DATA >68 4800 BAUD C0266 0272 00D0 DATA >D0 2400 BAUD C0267 0274 01A0 DATA >1A0 1200 BAUD C0268 0276 0341 DATA >341 600 BAUD C0269 0278 04D0 DATA >4D0 300 BAUD C0270 027A 0638 DATA >638 110 BAUD C0271 ************************************************************ C0272 * * C0273 * INITVD - Initalises the VDP registers * C0274 * * C0275 * Comments: IBASE CALLED BY 'PROGPN' * C0276 * * C0277 ************************************************************ C0278 * C0279 027C 10 INTCM1 BYTE >10 C0280 027D 60 BYTE >60 C0281 027E 48 BYTE >48 C0282 027F 00 BYTE >00 C0283 * C0284 0280 162F BASDAT DATA BAMT Start of buffer area C0285 0282 162F DATA BAMP CPU buffer pointer C0286 0284 09FF DATA BAPA Start of display area C0287 0286 FFFE DATA BAGC0 Character generator 0 C0288 0288 04FE DATA BAGC1 Character generator 1 C0289 028A 04FE DATA BAGC2 Character generator 2 C0290 028C 04FE DATA BAGC3 Character generator 3 C0291 028E 3FFF DATA BAMTF End of buffer pointer C0292 * C0293 0290 0201 INITVD LI R1,7 1st register to be programmed 0292 0007 C0294 0294 06C1 NXVDP SWPB R1 Reg value to MSByte C0295 0296 D801 MOVB R1,@VDPREG Point to reg 0298 F800 C0296 029A 06C1 SWPB R1 Restore reg value C0297 029C D821 MOVB @INTCM1-4(R1),@VDPREG 029E 0278 02A0 F800 C0298 02A2 0601 DEC R1 C0299 02A4 0281 CI R1,4 02A6 0004 C0300 02A8 14F5 JHE NXVDP C0301 02AA 045B RT C0302 * C0303 02AC 020C IBASE LI R12,T3551 POINT TO TMS3551 02AE 0180 C0304 02B0 3220 LDCR @BYTE11,8 Stop the TMS3551 02B2 0072 C0305 02B4 D800 MOVB R0,@LD3551 SEND A LOAD PULSE 02B6 FB00 C0306 02B8 0201 LI R1,14+2 Offset into data table NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0017 02BA 0010 C0307 02BC 0202 LI R2,15*256 Reg number 02BE 0F00 C0308 02C0 2C21 NXBAS SETA @BASDAT-2(R1) Transfer it to the VDP 02C2 027E C0309 02C4 D802 MOVB R2,@VDPREG Transfer the data to the reg 02C6 F800 C0310 02C8 D802 MOVB R2,@VDPREG 02CA F800 C0311 02CC 0222 AI R2,-1*256 Point to next reg 02CE FF00 C0312 02D0 0641 DECT R1 Point to next reg value C0313 02D2 15F6 JGT NXBAS Loop if more registers C0314 02D4 3220 LDCR @BYTEA1,8 Start the TMS3551 02D6 0088 C0315 02D8 D800 MOVB R0,@LD3551 SEND A LOAD PULSE 02DA FB00 C0316 02DC 045B RT C0317 02DE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0018 0027 COPY MAIN.990 D0001 ************************************************************ D0002 * * D0003 * MAIN - Main program loop * D0004 * * D0005 * USE OF REGISTERS: * D0006 * R0 = WORK REGISTER * D0007 * R1 = INCOMING PAGE NUMBER * D0008 * R2 = WORK REGISTER * D0009 * R3 = N/U (USED IN SUBROUTINES) * D0010 * R4 = N/U (USED IN SUBROUTINES) * D0011 * R5 = N/U (USED IN SUBROUTINES) * D0012 * R6 = FLAG BIT REGISTER * D0013 * R7 = INCOMING MAGAZINE NUMBER (TIMES 2) * D0014 * R8 = INCOMING SUB PAGE NUMBER * D0015 * R9 = INCOMING ROW NUMBER * D0016 * R10= STACK POINTER * D0017 * R11= WORK REGISTER * D0018 * R12= N/U (USED IN SUBROUTINES) * D0019 * R13= POINTER TO VDP MEMORY ACCESS * D0020 * R14= FLAG BIT REGISTER * D0021 * R15= FIRST FREE LINK POINTER * D0022 * * D0023 * Called by: None * D0024 * * D0025 * Calls: IBASE * D0026 * INROW * D0027 * PUTROW * D0028 * PUTHDR * D0029 * DISRAM * D0030 * SERMAG * D0031 * ALOCAT * D0032 * NFMODE * D0033 * CLRDIS * D0034 * DISHDR * D0035 * DISTIM * D0036 * RWPAGE * D0037 * DISPN * D0038 * * D0039 * AUTHOR: COLIN HINSON * D0040 ************************************************************ D0041 * D0042 * Restart the program when buffer overflow occurs D0043 * D0044 02DE 020A RSTART LI R10,STACK 02E0 D080 D0045 02E2 06A0 BL @IBASE Reprogram base address reg's 02E4 02AC D0046 02E6 0200 LI R0,MAGMAP+16 POINT TO END OF AREA 02E8 D022 D0047 02EA 0201 LI R1,MAGADR SET TO CLEAR 'MAGADR' AREA 02EC D002 D0048 02EE 04F1 RSTA10 CLR *R1+ D0049 02F0 8001 C R1,R0 D0050 02F2 1AFD JL RSTA10 D0051 02F4 0220 AI R0,16 02F6 0010 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0019 D0052 02F8 0731 RSTA20 SETO *R1+ SETO 'MAGPAG' AREA TO ONES D0053 02FA 8001 C R1,R0 D0054 02FC 1AFD JL RSTA20 D0055 * D0056 * GET A ROW, IF A HEADER, PACKET 31 OR PACKET 8/30, GO D0057 * DEAL WITH IT SEPARATELY. D0058 * D0059 02FE 06A0 RXROW BL @INROW GET A ROW 0300 056A D0060 0302 21A0 COC @PKT31,R6 PACKET 31? 0304 0056 D0061 0306 133D JEQ DIS31 YES, DISPLAY IT D0062 0308 D260 MOVB @RROW,R9 GET THE ROW NO. 030A F057 D0063 030C 133D JEQ HDRRXD IF HEADER, GO DEAL WITH IT D0064 * D0065 * IF PAGE REQUESTED HAS SAME MAGAZINE AS IS BEING RECEIVED A D0066 * END OF INITIALIZATION, AND NO HEADER HAS BEEN RECEIVED, I D0067 * WILL HAVE NO RAM ALLOCATED TO IT. IF THIS CONDITION ARIS D0068 * THE ROW IS ABORTED. D0069 * D0070 030E C027 MOV @MAGADR(R7),R0 CHECK FOR VALID ADR AVAILABLE 0310 D002 D0071 0312 13F5 JEQ RXROW IF ZERO, NOT AVAILABLE D0072 * D0073 0314 06A0 BL @PUTROW SAVE THE ROW TO RAM 0316 2134 D0074 * D0075 * IF THE ROW BELONGS TO THE PAGE BEING DISPLAYED, IT IS PUT D0076 * ON THE DISPLAY VIA 'DISRAM', HAVING FIRST HAD THE PARITY D0077 * PROBLEMS SORTED OUT. D0078 * D0079 0318 21A0 COC @DCAST,R6 DATACAST ON DISPLAY? 031A 0058 D0080 031C 13F0 JEQ RXROW YES, NO TELETEXT DISPLAY D0081 031E 21A0 COC @RXDIS,R6 IS DISPLAYED PAGE BEING RX'D? 0320 005C D0082 0322 161F JNE DOHASH NO, NEXT ROW ########### D0083 * D0084 * ############################## D0085 * THE DISPLAYED PAGE IS BEING RECEIVED, THEREFORE THE INCOM D0086 * ROW BELONGS TO THIS PAGE IF IT IS THE CORRECT MAGAZINE ( D0087 * THE EXCEPTION OF 8/30 AND PACKET 31). IF THE ROW IS NOT D0088 * CORRECT MAGAZINE, THEN IT MUST BE A ROW FROM A PARALLEL D0089 * MAGAZINE. D0090 * D0091 0324 8807 C R7,@DISMAG IS ROW FROM DISPLAYED MAGAZINE? 0326 F092 D0092 0328 161C JNE DOHASH NO, NEXT ROW ########### D0093 032A D020 MOVB @PAGHEX,R0 CAN WE WRITE TO SCREEN? 032C F050 D0094 032E 1119 JLT DOHASH NO, NEXT ROW ########### D0095 0330 9809 CB R9,@BYTE18 ON SCREEN ROW? (LESS THAN 24) 0332 0074 D0096 0334 1A05 JL RXRW10 YES, GO DISPLAY IT D0097 0336 1618 JNE DOROWN IF NOT 24, NEXT ROW ############ D0098 0338 9820 CB @DISP24,@BYTE04 ROW830 ON DISPLAY? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0020 033A D09B 033C 0062 D0099 033E 1414 JHE DOROWN YES, NEXT ROW ################## D0100 0340 41A0 RXRW10 SZC @DHONRW,R6 CLEAR DOUBLE HEIGHT FLAG 0342 004E D0101 * ######################### FOR CHRIS ###################### D0102 * PUT THE DISPLAY ROW (1-24) IN THE PRINT BUFFER D0103 * D0104 0344 06A0 BL @PTROWN ROW NUMBER (R9) TO PRINT BUFFER 0346 1A54 D0105 0348 0200 LI R0,ROWST+2 POINT TO ROW STORE DATA 034A F058 D0106 034C C800 MOV R0,@PKTSTT SAVE FOR PRINT ROUTINE 034E D05A D0107 0350 0200 LI R0,ROWEND+1 POINT TO END OF ROW STORE DATA 0352 F081 D0108 0354 C800 MOV R0,@PKTEND SAVE FOR PRINT ROUTINE 0356 D05C D0109 0358 06A0 BL @PRINT DATA TO BUFFER. 035A 19F8 D0110 * ########################################################## D0111 035C 06A0 BL @DISRAM DISPLAY THE ROW 035E 1356 D0112 0360 10CE JMP RXROW AND GET THE NEXT ROW D0113 * ######################### FOR CHRIS ###################### D0114 * ENTRIES TO HERE USED TO BE TO 'RXROW' D0115 * NOTE: THE CALLED ROUTINES ARE IN THE INTERRUPT FILE. D0116 * D0117 * PUT A HASH IN THE PRINT BUFFER. (ROW FROM WRONG PAGE) D0118 * D0119 0362 06A0 DOHASH BL @PTHASH HASH TO BUFFER 0364 1A20 D0120 0366 10CB JMP RXROW NEXT ROW D0121 * D0122 * PUT ROW, NUMBER OF WHICH IS IN R9 IN PRINT BUFFER D0123 * THIS ROW WILL BE A GHOST ROW, OR POSSIBLY ROW 24 D0124 * D0125 0368 06A0 DOROWN BL @PTROWN ROW NUMBER (R9) TO PRINT BUFFER 036A 1A54 D0126 036C 0200 LI R0,ROWST+2 POINT TO ROW STORE DATA 036E F058 D0127 0370 C800 MOV R0,@PKTSTT SAVE FOR PRINT ROUTINE 0372 D05A D0128 0374 0200 LI R0,ROWEND+1 POINT TO END OF ROW STORE DATA 0376 F081 D0129 0378 C800 MOV R0,@PKTEND SAVE FOR PRINT ROUTINE 037A D05C D0130 037C 06A0 BL @PRINT DATA TO BUFFER. 037E 19F8 D0131 * ########################################################## D0132 0380 10BE JMP RXROW D0133 * ########################################################## D0134 * D0135 * DEAL WITH PACKET 31 D0136 * D0137 0382 06A0 DIS31 BL @DTACST ROW TO BUFFER & SCREEN 0384 16F4 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0021 D0138 0386 10BB JMP RXROW D0139 * D0140 * DEAL WITH A HEADER: D0141 * SET UP THE PAGE NO. IN HEX IN R1 (UNLESS HEX PAGE NUMBER) D0142 * IF HEX PAGE NUMBER, SET FLAG (HEXHDR), INVALIDATE THE D0143 * MAGAZINE AND DEAL WITH THE TERMINATED PAGE (IF NECESSARY) D0144 * D0145 0388 04E0 HDRRXD CLR @MAPPER MAPPER PAGE ZERO FOR LINKS 038A FC00 D0146 038C C020 MOV @INRWKS+INR7+INR7,R0 GET CORRECTABLE ERROR FLAG 038E F02E D0147 0390 1672 JNE HDRHEX IF SET, USE 'HEX HEADER' PATH D0148 0392 D020 MOVB @PAGET,R0 GET PAGE TENS (R0 IS CLEARED) 0394 F059 D0149 0396 9800 CB R0,@BYTE09 CHECK FOR HEX 0398 007B D0150 039A 1B6D JH HDRHEX IF HEX, WRITE TIME ONLY D0151 039C 0A40 SLA R0,4 TO MS NIBBLE D0152 039E D220 MOVB @PAGEU,R8 PAGE UNITS TO R0 MSB, LS NIBBLE 03A0 F058 D0153 03A2 9808 CB R8,@BYTE09 HEX? 03A4 007B D0154 03A6 1B67 JH HDRHEX YES, TIME ONLY D0155 03A8 F008 SOCB R8,R0 ADD THE PAGE UNITS D0156 03AA D060 MOVB @RMAG,R1 GET THE MAGAZINE NO. 03AC F056 D0157 03AE D800 MOVB R0,@WSP+R1+R1+1 ADD TO THE MAG NO. 03B0 F003 D0158 03B2 04C8 CLR R8 D0159 03B4 C081 MOV R1,R2 COPY D0160 03B6 0A12 SLA R2,1 WORD ALIGN D0161 03B8 41A0 SZC @NOSUBP,R6 ALLOW SUB PAGES 03BA 0054 D0162 03BC C0A2 MOV @INDEX(R2),R2 GET SUB PAGE & LINK DATA 03BE C000 D0163 03C0 1305 JEQ DOSUB IF ZERO, DO SUB PAGE BIT D0164 03C2 20A0 COC @SUBFLG,R2 SUB PAGES ALLOWED? 03C4 004E D0165 03C6 1302 JEQ DOSUB YES, JUMP D0166 03C8 E1A0 SOC @NOSUBP,R6 INHIBIT SUB PAGE ALLOCATION 03CA 0054 D0167 * D0168 * SET UP THE SUB PAGE NUMBER IN R8 (UNITS & TENS ONLY) D0169 * D0170 03CC D220 DOSUB MOVB @SUBPT,R8 GET THE SUB PAGE TENS 03CE F05B D0171 03D0 0948 SRL R8,4 ALIGN D0172 03D2 F820 SOCB @SUBPU,@R8LSB ADD THE SUB PAGE UNITS 03D4 F05A 03D6 F011 D0173 03D8 41A0 SZC @SUBHDR,R6 SET 'NOT SUB PAGE' 03DA 0062 D0174 03DC 0248 ANDI R8,>007F REMOVE THE CLEAR PAGE BIT (C4) 03DE 007F D0175 03E0 1302 JEQ BYPALC IF NOT A SUB PAGE JUMP D0176 03E2 E1A0 SOC @SUBHDR,R6 SET 'SUB PAGE HEADER' 03E4 0062 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0022 D0177 * D0178 * BYPASS THE ALLOCATION SUBROUTINE IF POSSIBLE D0179 * D0180 03E6 0281 BYPALC CI R1,>493 DEBUG FACILITY 03E8 0493 D0181 03EA 1605 JNE COLIN DEBUG FACILITY D0182 03EC 1000 NOP DEBUG FACILITY D0183 03EE 0288 CI R8,>00 DEBUG FACILITY 03F0 0000 D0184 03F2 1601 JNE COLIN DEBUG FACILITY D0185 03F4 1000 NOP DEBUG FACILITY D0186 03F6 89C1 COLIN C R1,@MAGPAG(R7) SAME PAGE AS PRESENTLY BEING R 03F8 D022 D0187 03FA 1642 JNE ALCRQD NO, ALLOCATION OF RAM REQUIRED D0188 03FC 89C8 C R8,@MAGSUB(R7) SAME SUB PAGE? 03FE D032 D0189 0400 163F JNE ALCRQD NO, ALLOCATION OF RAM REQUIRED D0190 0402 C2E7 MOV @MAGADR(R7),R11 MAGAZINE ENABLED? 0404 D002 D0191 0406 1604 JNE REQCHK YES, SKIP D0192 0408 06A0 BL @PTHASH HASH TO PRINT BUFFER 040A 1A20 D0193 040C 0460 B @RXROW GET NEXT ROW 040E 02FE D0194 * CHECK FOR RX= DISPLAY D0195 0410 8801 REQCHK C R1,@PAGHEX RX'D HEADER = REQUEST? 0412 F050 D0196 0414 1302 JEQ PTCHK2 YES D0197 0416 0460 B @SAVHD3 HASH TO BUFFER, AND SAVE ROW 0418 0542 D0198 * ######################### FOR CHRIS ###################### D0199 * PUT THE HEADER FROM THE DISPLAY PAGE IN THE PRINT BUFFER D0200 * FIRST HOWEVER, WE NEED TO CHECK IF THE DATA CHANGED FRO D0201 * THE PREVIOUS VALID HEADER. THIS IS DONE ONLY FROM THE D0202 * HAMMING DATA AT THE START OF THE ROW. THE SECONDS IN T D0203 * TIME CAN BE CHECKED IF REQUIRED AT A LATER STAGE. D0204 * D0205 041A 06A0 PTCHK2 BL @PTROWN ROW NUMBER (R9) TO PRINT BUFFER 041C 1A54 D0206 041E 0200 LI R0,ROWST+2 POINT TO START OF HAMMING 0420 F058 D0207 0422 8830 C *R0+,@HAMCHK COMPARE THE 8 BYTES 0424 D08A D0208 0426 160C JNE DIFFER D0209 0428 8830 C *R0+,@HAMCHK+2 042A D08C D0210 042C 1609 JNE DIFFER D0211 042E 8830 C *R0+,@HAMCHK+4 0430 D08E D0212 0432 1606 JNE DIFFER D0213 0434 8810 C *R0,@HAMCHK+6 0436 D090 D0214 0438 1603 JNE DIFFER D0215 043A 06A0 BL @PCOLON COLON TO BUFFER 043C 1A42 D0216 043E 1014 JMP REQC10 THEN SKIP ROW TO BUFFER D0217 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0023 D0218 * THE HEADERS ARE DIFFERENT, SAVE THE NEW DATA D0219 * D0220 0440 0200 DIFFER LI R0,ROWST+2 POINT TO START OF HAMMING 0442 F058 D0221 0444 C830 MOV *R0+,@HAMCHK SAVE THE NEW 8 BYTES 0446 D08A D0222 0448 C830 MOV *R0+,@HAMCHK+2 044A D08C D0223 044C C830 MOV *R0+,@HAMCHK+4 044E D08E D0224 0450 C810 MOV *R0,@HAMCHK+6 0452 D090 D0225 0454 0200 LI R0,ROWST+2 POINT TO ROW STORE DATA 0456 F058 D0226 0458 C800 MOV R0,@PKTSTT SAVE FOR PRINT ROUTINE 045A D05A D0227 045C 0200 LI R0,ROWEND+1 POINT TO END OF ROW STORE DATA 045E F081 D0228 0460 C800 MOV R0,@PKTEND SAVE FOR PRINT ROUTINE 0462 D05C D0229 0464 06A0 BL @PRINT DATA TO BUFFER. 0466 19F8 D0230 * ########################################################## D0231 0468 21A0 REQC10 COC @NOSUBP,R6 SUB PAGES ALLOWED? 046A 0054 D0232 046C 1358 JEQ INCD30 NO, GO CHECK FOR ERASE D0233 046E 8220 C @SUBHEX,R8 SAME SUB PAGE? 0470 F052 D0234 0472 1669 JNE SAVHD2 NO, BYPASS DISPLAY BIT D0235 0474 1054 JMP INCD30 YES, GO CHECK FOR ERASE D0236 * D0237 0476 06A0 HDRHEX BL @SERMAG SORT OUT PAGE TERMINATIONS 0478 07F0 D0238 047A 06A0 BL @PTHASH ######### HASH TO BUFFER 047C 1A20 D0239 047E 1065 JMP WRTIME AND GO SORT OUT SERIAL MAGS D0240 * D0241 * ALLOCATION DATA REQUIRED FOR INCOMING FIRST HEADER OF PAGE D0242 * D0243 0480 06A0 ALCRQD BL @SERMAG TERMINATE PAGES AS REQUIRED 0482 07F0 D0244 0484 C9C1 MOV R1,@MAGPAG(R7) SAVE THE PAGE NUMBER 0486 D022 D0245 0488 C9C8 MOV R8,@MAGSUB(R7) SAVE THE SUB PAGE (IF ANY) 048A D032 D0246 * D0247 * GET THE PAGE START ADDRESS. IF RAM HAS ALREADY D0248 * BEEN ALLOCATED, THEN THE ADDRESS OF THE START D0249 * WILL BE PLACED IN 'MAGADR(R7)' WITH THE D0250 * MAPPER PAGE NO. IN 'MAGMAP(R7)'. IF RAM D0251 * IS NOT ALREADY ALLOCATED, THEN IT IS ALLOCATED D0252 * AND THE ADDRESSES SET UP AS ABOVE. D0253 * IF THE RAM CANNOT BE ALLOCATED, THEN THE DATA D0254 * STATEMENT FOLLOWING THE CALL IS USED AS A BRANCH D0255 * ADDRESS, WITH 'MAGADR(R7)' CLEARED. D0256 * D0257 048C 06A0 BL @ALOCAT ALLOCATE THE RAM NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0024 048E 0862 D0258 0490 02FE DATA RXROW IF NO RAM, GO TO RXROW D0259 * D0260 * RAM HAS BEEN ALLOCATED FOR THE INCOMING PAGE D0261 * R1 = INCOMING PAGE NUMBER D0262 * R8 = INCOMING SUB PAGE NUMBER D0263 * D0264 0492 8801 C R1,@PAGHEX RX'D HEADER = REQUEST? 0494 F050 D0265 0496 1657 JNE SAVHD2 NO D0266 0498 25A0 CZC @NOSUBP,R6 SUB PAGES ALLOWED? 049A 0054 D0267 049C 1605 JNE PTCHK1 NO, DON'T CHECK SUB PAGE D0268 049E C2E0 MOV @SUBHEX,R11 GET SUB PAGE REQUEST 04A0 F052 D0269 04A2 1102 JLT PTCHK1 IF INVALID, FIX IT D0270 04A4 82C8 C R8,R11 SAME SUB PAGE? D0271 04A6 164D JNE SAVHD3 NO, BYPASS DISPLAY BIT D0272 * D0273 * INCOMING PAGE IS DISPLAYED PAGE D0274 * D0275 * ######################### FOR CHRIS ###################### D0276 * PUT THE HEADER FROM THE DISPLAY PAGE IN THE PRINT BUFFER D0277 * FIRST HOWEVER, WE NEED TO CHECK IF THE DATA CHANGED FRO D0278 * THE PREVIOUS VALID HEADER. THIS IS DONE ONLY FROM THE D0279 * HAMMING DATA AT THE START OF THE ROW. THE SECONDS IN T D0280 * TIME CAN BE CHECKED IF REQUIRED AT A LATER STAGE. D0281 * D0282 04A8 06A0 PTCHK1 BL @PTROWN ROW NUMBER (R9) TO PRINT BUFFER 04AA 1A54 D0283 04AC 0200 LI R0,ROWST+2 POINT TO START OF HAMMING 04AE F058 D0284 04B0 8830 C *R0+,@HAMCHK COMPARE THE 8 BYTES 04B2 D08A D0285 04B4 160C JNE DIFFR2 D0286 04B6 8830 C *R0+,@HAMCHK+2 04B8 D08C D0287 04BA 1609 JNE DIFFR2 D0288 04BC 8830 C *R0+,@HAMCHK+4 04BE D08E D0289 04C0 1606 JNE DIFFR2 D0290 04C2 8810 C *R0,@HAMCHK+6 04C4 D090 D0291 04C6 1603 JNE DIFFR2 D0292 04C8 06A0 BL @PCOLON COLON TO BUFFER 04CA 1A42 D0293 04CC 1014 JMP INCDSP THEN SKIP ROW TO BUFFER D0294 * D0295 * THE HEADERS ARE DIFFERENT, SAVE THE NEW DATA D0296 * D0297 04CE 0200 DIFFR2 LI R0,ROWST+2 POINT TO START OF HAMMING 04D0 F058 D0298 04D2 C830 MOV *R0+,@HAMCHK SAVE THE NEW 8 BYTES 04D4 D08A D0299 04D6 C830 MOV *R0+,@HAMCHK+2 04D8 D08C D0300 04DA C830 MOV *R0+,@HAMCHK+4 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0025 04DC D08E D0301 04DE C810 MOV *R0,@HAMCHK+6 04E0 D090 D0302 04E2 0200 LI R0,ROWST+2 POINT TO ROW STORE DATA 04E4 F058 D0303 04E6 C800 MOV R0,@PKTSTT SAVE FOR PRINT ROUTINE 04E8 D05A D0304 04EA 0200 LI R0,ROWEND+1 POINT TO END OF ROW STORE DATA 04EC F081 D0305 04EE C800 MOV R0,@PKTEND SAVE FOR PRINT ROUTINE 04F0 D05C D0306 04F2 06A0 BL @PRINT DATA TO BUFFER. 04F4 19F8 D0307 * ########################################################## D0308 04F6 D0309 04F6 23A0 INCDSP COC @QTYKEY,R14 PAGE QTY ON DISPLAY? 04F8 0052 D0310 04FA 1302 JEQ INCD10 YES, NO HEADER D0311 04FC 43A0 SZC @NOHDR,R14 ALLOW HEADER DISPLAY 04FE 004E D0312 0500 C808 INCD10 MOV R8,@SUBHEX SUB PAGE MAY HAVE CHANGED 0502 F052 D0313 0504 C827 MOV @MAGADR(R7),@DISADR GET DISPLAY ADR 0506 D002 0508 F04E D0314 050A D827 MOVB @MAGMAP+1(R7),@DISMAP GET MAPPER VALUE 050C D013 050E F054 D0315 0510 E1A0 SOC @RXDIS,R6 SET RX'D PAGE = DISPLAY PAGE 0512 005C D0316 * D0317 * IN ORDER TO RESOLVE PROBLEMS WITH SUBTITLES, WE NEED D0318 * TO CLEAR THE PAGE IMMEDIATELY IF REQUIRED TO DO SO BY D0319 * THE HEADER, HOWEVER THIS CAUSES PROBLEMS WITH SUB PAGES D0320 * OTHER THAN ZERO, SO THIS IS ONLY CARRIED OUT IF THE D0321 * DISPLAYED SUB PAGE IS ZERO D0322 * D0323 0514 D020 MOVB @SUBPTH,R0 GET THE N/F & S/T BITS 0516 F05D D0324 0518 06A0 BL @NFMODE CHECK FOR MODE CHANGE 051A 1268 D0325 051C 051E DATA INCD30 ADDRESS TO GO TO IF MODE CHANGE D0326 051E 25A0 INCD30 CZC @NOSUBP,R6 SUB PAGES ALLOWED? 0520 0054 D0327 0522 1603 JNE CHKERZ NO, CHECK FOR ERASE BIT D0328 0524 C2E0 MOV @SUBHEX,R11 SUB PAGE ZERO? 0526 F052 D0329 0528 1607 JNE SAVHDR NO, SKIP D0330 052A D2E0 CHKERZ MOVB @SUBPT,R11 GET C4 052C F05B D0331 052E 024B ANDI R11,>0800 LEAVE ONLY C4 0530 0800 D0332 0532 1302 JEQ SAVHDR NOT SET, SKIP D0333 0534 06A0 BL @CLRDIS CLEAR THE DISPLAY (ONLY) 0536 2238 D0334 * D0335 * SAVE THE HEADER TO PAGE STORE, THEN DISPLAY TIME IF REQUIR NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0026 D0336 * D0337 0538 06A0 SAVHDR BL @PUTHDR SAVE THE HEADER TO RAM 053A 21CA D0338 053C 06A0 BL @DISHDR DISPLAY THE HEADER IF ALLOWED 053E 130C D0339 0540 1004 JMP WRTIME D0340 * D0341 0542 06A0 SAVHD3 BL @PTHASH HASH TO PRINT BUFFER ######### 0544 1A20 D0342 0546 06A0 SAVHD2 BL @PUTHDR SAVE THE HEADER TO RAM 0548 21CA D0343 * D0344 054A D2E0 WRTIME MOVB @INRWKS+INR7+INR7,R11 ANY CORRECTABLE ERRORS? 054C F02E D0345 054E 1602 JNE INCD50 YES, AVOID TIME DISPLAY D0346 0550 06A0 BL @DISTIM DISPLAY THE TIME (IF CHANGED) 0552 1290 D0347 0554 23A0 INCD50 COC @WRTPAG,R14 RE-WRITE PAGE? 0556 0054 D0348 0558 1606 JNE NXTPKT NO, JUMP D0349 055A 43A0 SZC @WRTPAG,R14 CLEAR THE FLAG 055C 0054 D0350 055E 06A0 BL @RWPAGE RE-WRITE THE PAGE 0560 1AD0 D0351 0562 06A0 BL @DISPN RE-WRITE PAGE NO. 0564 22E6 D0352 0566 0460 NXTPKT B @RXROW GET NEXT PACKET 0568 02FE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0027 0029 COPY INROW.990 E0001 ************************************************************ E0002 * * E0003 * INROW - Fetch the next packet from the buffer * E0004 * and place it in the 'row store' with * E0005 * the TMS3551 in direct mode. This * E0006 * means that all the hamming and parity * E0007 * processing need to be done in s/ware. * E0008 * * E0009 * Preconditions: Various registers are preset. * E0010 * * E0011 * Postconditions: * E0012 * * E0013 * * E0014 * ROWST' = Packet from buffer * E0015 * * E0016 * If the buffer is found to be in the * E0017 * over flow condition, the routine will * E0018 * abort to the 'RSTART' routine * E0019 * * E0020 * Called by: MAIN * E0021 * * E0022 * * E0023 * Local variables: CONTEXT SWITCH * E0024 * * E0025 * Global variables: ROWST - The row store * E0026 * * E0027 * NOTE THAT THE HAMMING TABLE GIVES >FF OUT FOR >FF IN. * E0028 * * E0029 * * E0030 * AUTHOR: COLIN HINSON * E0031 ************************************************************ E0032 * E0033 * EQUATES FOR REGISTERS IN THIS WORKSPACE E0034 * E0035 0000 INR0 EQU 0 E0036 0001 INR1 EQU 1 E0037 0002 INR2 EQU 2 E0038 0003 INR3 EQU 3 E0039 0004 INR4 EQU 4 E0040 0005 INR5 EQU 5 E0041 0006 INR6 EQU 6 E0042 0007 INR7 EQU 7 E0043 0008 INR8 EQU 8 E0044 0009 INR9 EQU 9 E0045 000A INR10 EQU 10 E0046 000C INR12 EQU 12 E0047 000D INR13 EQU 13 E0048 000E INFVRM EQU 14 E0049 000F INVREG EQU 15 E0050 * E0051 * REGISTERS ARE INITIALISED AS FOLLOWS: E0052 * INR0 = >0300 E0053 * INR1 = 0 E0054 * INR2 = >0100 E0055 * INR4 = 0 E0056 * INR6 = >FF00 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0028 E0057 * INR8 = 0 E0058 * INR9 = HOLDS MAG/ROW BYTE (FOR PACKET 31 ETC) E0059 * INR10= >4000 (MASK FOR CORRECTABLE HAMMING) E0060 * INR11= RETURN ADDRESS FOR BL E0061 * INR12= WORK REGISTER E0062 * INR13= >8000 PARITY BIT MASK. E0063 * INR14 (INFVRM) POINT TO VDP RAM READ E0064 * INR15= (INVREG)>F800 POINT TO VDP REG. ACCESS E0065 * E0066 F029 INR4LS EQU INRWKS+R4+R4+1 E0067 F031 INR8LS EQU INRWKS+R8+R8+1 E0068 * E0069 * E0070 056A CE8B INROW MOV R11,*R10+ SAVE RETURN POINTER E0071 056C 1016 JMP INRO10 E0072 * E0073 056E 2460 EMPTY CZC @WD0200,INR1 Jump if buffer not overflowed 0570 0060 E0074 0572 130C JEQ EMPT10 E0075 0574 02E0 LWPI WSP BACK TO MAIN WORKSPACE 0576 F000 E0076 0578 0460 B @RSTART Restart the program 057A 02DE E0077 * E0078 * SUBROUTINE TO CHECK FOR CORRECTABLE HAMMING ERRORS E0079 * E0080 057C 9181 CHKHAM CB INR1,INR6 LEAD BYTE? E0081 057E 131F JEQ LEADFF YES, DEAL WITH IT E0082 0580 204A COC INR10,INR1 CORRECTABLE HAMMING? E0083 0582 1616 JNE INLP NO, NEXT ROW E0084 0584 0707 SETO INR7 E0085 0586 0241 ANDI INR1,>0F00 REMOVE FLAG BITS 0588 0F00 E0086 058A 045B RT E0087 * E0088 * E0089 * E0090 058C 02E0 EMPT10 LWPI WSP BACK TO NORMAL WORKSPACE 058E F000 E0091 0590 21A0 COC @MDCHNG,R6 NEED TO CHANGE DISPLAY MODE? 0592 0052 E0092 0594 1602 JNE INRO10 NO, SKIP E0093 0596 06A0 BL @CHGMOD YES, GO CHANGE THE MODE 0598 1164 E0094 * E0095 059A 06A0 INRO10 BL @KEY Check for a key press 059C 095E E0096 * E0097 059E 23A0 COC @PAGRDY,R14 HAVE WE A PAGE QTY TO WRITE? 05A0 0094 E0098 05A2 1604 JNE INRO20 E0099 05A4 43A0 SZC @PAGCHG,R14 CLEAR THE PAGE QUANTITY CHANGE 05A6 0050 E0100 05A8 06A0 BL @PGQNTY 05AA 225A E0101 * E0102 05AC 02E0 INRO20 LWPI INRWKS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0029 05AE F020 E0103 05B0 D7C0 INLP MOVB INR0,*INVREG POINT TO STATUS REG. E0104 05B2 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0105 05B4 2442 CZC INR2,INR1 E0106 05B6 16DB JNE EMPTY JUMP IF BUFFER EMPTY E0107 05B8 D05E MOVB *INFVRM,INR1 READ A BYTE FROM VRAM BUFFER E0108 05BA 9181 INFF CB INR1,INR6 Is it a lead byte ? E0109 05BC 16F9 JNE INLP No - start again E0110 * E0111 * LEAD BYTE RECEIVED. GET THE MAGAZINE PACKET E0112 * E0113 05BE D7C0 LEADFF MOVB INR0,*INVREG SEND TO VDP E0114 05C0 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0115 05C2 2442 CZC INR2,INR1 E0116 05C4 16D4 JNE EMPTY JUMP IF BUFFER EMPTY E0117 * GET A BYTE E0118 05C6 04C7 CLR INR7 CLEAR HAMMING ERROR FLAG E0119 05C8 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 05CA F031 E0120 05CC D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 05CE 17E8 E0121 05D0 1503 JGT GROW10 E0122 05D2 1302 JEQ GROW10 E0123 05D4 06A0 BL @CHKHAM CHECK FOR CORRECTABLE ERRORS 05D6 057C E0124 05D8 0203 GROW10 LI INR3,ROWST POINT TO INTERNAL RAM STORE 05DA F056 E0125 05DC D241 MOVB INR1,INR9 SAVE THE ROW LSB E0126 05DE 0241 ANDI INR1,>0700 REMOVE ROW LSB 05E0 0700 E0127 05E2 DCC1 MOVB INR1,*INR3+ SAVE IN STORE E0128 05E4 0971 SRL INR1,7 ALIGN TO WORD OFFSET E0129 05E6 C801 MOV INR1,@WSP+R7+R7 SET UP MAG NO IN MAIN R7 05E8 F00E E0130 * E0131 * WE'VE GOT THE MAGAZINE NUMBER, NOW GET A ROW 0 THRU 25, 27 E0132 * E0133 05EA 04C1 CLR INR1 FOR BYTE MOVES E0134 05EC D7C0 MOVB INR0,*INVREG SEND TO VDP E0135 05EE D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0136 05F0 2442 CZC INR2,INR1 E0137 05F2 16BD JNE EMPTY JUMP IF BUFFER EMPTY E0138 05F4 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 05F6 F031 E0139 05F8 D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 05FA 17E8 E0140 05FC 1503 JGT GROW20 E0141 05FE 1302 JEQ GROW20 E0142 0600 06A0 BL @CHKHAM CHECK FOR CORRECTABLE ERRORS 0602 057C E0143 0604 B041 GROW20 AB INR1,INR1 (SLA INR1,1) E0144 0606 C309 MOV INR9,INR12 SAVE FOR PACKET 31 E0145 0608 024C ANDI INR12,>0800 LEAVE ROW LSB ONLY 060A 0800 E0146 060C 1302 JEQ EVENRW E0147 060E B060 AB @BYTE01,INR1 ADD ROW LSB 0610 005E NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0030 E0148 0612 D041 EVENRW MOVB INR1,INR1 E0149 0614 1313 JEQ HEADER IF ROW ZERO, DEAL WITH HEADER E0150 0616 C1C7 MOV INR7,INR7 CHECK FOR HAMMING ERRORS E0151 0618 16CB JNE INLP IF FOUND, NEXT ROW E0152 061A 0281 CI INR1,25*256 PACKET 25 (NOT USED)? 061C 1900 E0153 061E 1A0C JL ROWOK NO, DISPLAY ROW, OK E0154 0620 13C7 JEQ INLP YES, ABORT E0155 0622 0281 CI INR1,27*256 ROW 27 OR 26? 0624 1B00 E0156 0626 1327 JEQ PROC27 IF 27, PROCESS HAMMING E0157 0628 1A07 JL ROWOK IF 26, PASS ON (FOR TIME BEING) E0158 062A 0281 CI INR1,30*256 ROW 30 062C 1E00 E0159 062E 1667 JNE CHKP31 NO, CHECK FOR PACKET 31 E0160 0630 9820 CB @RMAG,@BYTE00 MAG 0, EVEN ROW? (8/30) 0632 F056 0634 004E E0161 0636 133D JEQ ATE30 YES, GO DEAL WITH IT E0162 0638 DCC1 ROWOK MOVB INR1,*INR3+ SAVE THE ROW NO. E0163 063A 1012 JMP GETREM AND GET THE REMAINDER OF THE ROW E0164 * E0165 * IF IT'S A HEADER, WE NEED TO READ 8 HAMMING BYTES E0166 * E0167 063C DCC1 HEADER MOVB INR1,*INR3+ SAVE THE ROW NO. E0168 063E 0209 LI INR9,8 0640 0008 E0169 0642 D7C0 INRHAM MOVB INR0,*INVREG SEND TO VDP E0170 0644 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0171 0646 2442 CZC INR2,INR1 E0172 0648 1692 MTLINK JNE EMPTY JUMP IF BUFFER EMPTY E0173 064A D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 064C F031 E0174 064E D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 0650 17E8 E0175 0652 1503 JGT GROW30 E0176 0654 1302 JEQ GROW30 E0177 0656 06A0 BL @CHKHAM CHECK FOR CORRECTABLE ERRORS 0658 057C E0178 065A DCC1 GROW30 MOVB INR1,*INR3+ SAVE HAMMING IN ROW STORE E0179 065C 0609 DEC INR9 E0180 065E 16F1 JNE INRHAM E0181 * MOV R7,R7 ANY CORRECTABLE ERRORS? E0182 * JNE INRXIT YES, EXIT E0183 * E0184 * WE HAVE NOW GOT ALL THE HAMMING, PUT THE DATA IN STORE. E0185 * E0186 0660 0205 GETREM LI INR5,ROWST+42 POINT TO END OF STORE 0662 F080 E0187 * E0188 0664 06A0 BL @BYTELP 0666 F094 E0189 *BYTELP MOVB INR0,*INVREG SEND TO VDP E0190 * MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0191 * CZC INR2,INR1 E0192 * JNE EMPTY2 $$$$$$$$$ JUMP IF BUFFER EMPTY $$$$$EMPT E0193 * MOVB *INFVRM,INR1 READ A BYTE FROM VRAM BUFFER NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0031 E0194 * JOP PTYOK IF ODD PARTIY, OK E0195 * CB INR1,INR6 LEAD BYTE? E0196 * JEQ INLP YES, RESTART ROW E0197 * MOVB INR6,INR1 SET BYTE TO >FF FOR BAD PARITY E0198 * JMP LVMSB E0199 *PTYOK SZC INR13,INR1 REMOVE 'PARITY' (ITS 8 BIT DAT E0200 *LVMSB MOVB INR1,*INR3+ SAVE HAMMING IN ROW STORE E0201 * C INR3,INR5 CHECK FOR END OF STORE E0202 * JL BYTELP AND LOOP TILL THERE E0203 0668 02E0 INRXIT LWPI WSP 066A F000 E0204 066C 064A INRXT2 DECT R10 E0205 066E C2DA MOV *R10,R11 E0206 0670 045B RT E0207 * E0208 0672 0460 EMPTY2 B @EMPTY 0674 056E E0209 * E0210 * DEAL WITH PACKET 27 E0211 * E0212 0676 DCC1 PROC27 MOVB INR1,*INR3+ SAVE THE ROW NO. E0213 0678 0205 LI INR5,ROWST+40 POINT TO END OF HAMMING 067A F07E E0214 * E0215 067C D7C0 PR2710 MOVB INR0,*INVREG SEND TO VDP E0216 067E D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0217 0680 2442 CZC INR2,INR1 E0218 0682 16E2 JNE MTLINK JUMP IF BUFFER EMPTY E0219 0684 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 0686 F031 E0220 0688 D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 068A 17E8 E0221 068C 1196 JLT INFF EXIT IF >FF (OR HAMMING ERROR) E0222 068E DCC1 MOVB INR1,*INR3+ SAVE DECODED HAMMING E0223 0690 8143 C INR3,INR5 END OF HAMMING? E0224 0692 1AF4 JL PR2710 NO, LOOP E0225 * E0226 * LAST TWO BYTES ARE CRC E0227 * E0228 0694 0205 LI INR5,ROWST+42 0696 F080 E0229 0698 D7C0 PR2720 MOVB INR0,*INVREG SEND TO VDP E0230 069A D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0231 069C 2442 CZC INR2,INR1 E0232 069E 162B JNE MT10 JUMP IF BUFFER EMPTY E0233 06A0 DCDE MOVB *INFVRM,*INR3+ E0234 06A2 8143 C INR3,INR5 E0235 06A4 1AF9 JL PR2720 E0236 06A6 D060 MOVB @ROWST+2,INR1 GET DESIGNATION CODE 06A8 F058 E0237 06AA 13DE JEQ INRXIT IF ZERO, OK E0238 06AC 1026 JMP INLPLK ELSE START NEXT ROW E0239 * E0240 06AE 0460 INFFLK B @INFF 06B0 05BA E0241 ************************************************************ E0242 * * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0032 E0243 * DEAL WITH PACKET 8/30 * E0244 * * E0245 ************************************************************ E0246 06B2 DCC1 ATE30 MOVB INR1,*INR3+ SAVE THE ROW NO. E0247 06B4 0205 LI INR5,ROWST+9 POINT TO END OF HAMMING 06B6 F05F E0248 * E0249 * GET THE HAMMING CODED BYTES E0250 * E0251 06B8 D7C0 ATE310 MOVB INR0,*INVREG SEND TO VDP E0252 06BA D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0253 06BC 2442 CZC INR2,INR1 E0254 06BE 161B JNE MT10 JUMP IF BUFFER EMPTY E0255 06C0 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 06C2 F031 E0256 06C4 D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 06C6 17E8 E0257 06C8 11F2 JLT INFFLK EXIT IF >FF (OR HAMMING ERROR) E0258 06CA DCC1 MOVB INR1,*INR3+ SAVE DECODED HAMMING E0259 06CC 8143 C INR3,INR5 END OF HAMMING? E0260 06CE 1AF4 JL ATE310 NO, LOOP E0261 * E0262 * GET THE REMAINING 8 BIT BYTES E0263 * E0264 06D0 0205 LI INR5,ROWST+42 POINT TO END OF STORE 06D2 F080 E0265 06D4 D7C0 ATE3LP MOVB INR0,*INVREG SEND TO VDP E0266 06D6 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0267 06D8 2442 CZC INR2,INR1 E0268 06DA 160D JNE MT10 JUMP IF BUFFER EMPTY E0269 06DC D05E MOVB *INFVRM,INR1 READ A BYTE FROM VRAM BUFFER E0270 06DE 9181 CB INR1,INR6 LEAD BYTE? E0271 06E0 1308 JEQ LDFFLK YES, RESTART ROW E0272 06E2 DCC1 MOVB INR1,*INR3+ SAVE BYTE IN ROW STORE E0273 06E4 8143 C INR3,INR5 CHECK FOR END OF STORE E0274 06E6 1AF6 JL ATE3LP AND LOOP TILL THERE E0275 * E0276 * GOT THE ROW SUCCESSFULLY E0277 * E0278 06E8 02E0 LWPI WSP GO TO MAIN WORKSPACE 06EA F000 E0279 06EC 06A0 BL @ROW830 DEAL WITH THE PACKET 06EE 1FAC E0280 06F0 10BD JMP INRXT2 AND RETURN TO MAIN ROUTINE E0281 * E0282 06F2 0460 LDFFLK B @LEADFF 06F4 05BE E0283 06F6 0460 MT10 B @EMPTY 06F8 056E E0284 06FA 0460 INLPLK B @INLP 06FC 05B0 E0285 ************************************************************ E0286 * * E0287 * CHECK FOR AND DEAL WITH PACKET 31 (DATACAST) * E0288 * * E0289 ************************************************************ E0290 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0033 E0291 * REGISTERS ARE INITIALISED AS FOLLOWS: E0292 * R0 = >0300 E0293 * R1 = >XX00 WORK REG E0294 * R2 = >0100 E0295 * R3 = POINTER FOR ROWST (LOADED) E0296 * R4 = WORK REGR E0297 * R6 = >FF00 E0298 * R7 = >0F00 NOT USED E0299 * R8 = >00XX HAMMING INDEX REG E0300 * R9 = HOLDS CHANNEL IDENTIFIER (MAG/ROW BYTE) E0301 * R10= >4000 MASK FOR CORRECTABLE HAMMING E0302 * R11= >F800 POINT TO VDP REG. ACCESS E0303 * R12= WORK REGISTER E0304 * R14= (INFVRM) POINTER TO VDP RAM READ E0305 * E0306 * NOTE: MAGAZINE NUMBER IS IN R7 OF MAIN WORKSPACE E0307 * E0308 06FE 0281 CHKP31 CI INR1,31*256 PACKET 31 ? 0700 1F00 E0309 0702 16FB JNE INLPLK NO, EXIT TO INLP E0310 * E0311 * FOUND PACKET 31, DUMP IT TO INTERNAL RAM, HAMMING CORRECTE E0312 * CHECK THAT THE 'CHANNEL' IS 8,9,10 OR 11 E0313 * E0314 0704 0249 ANDI INR9,>FF00 REMOVE ANY LSB 0706 FF00 E0315 0708 0289 CI INR9,>0800 CHANNEL LOWER THAN 8? 070A 0800 E0316 070C 1AF6 JL INLPLK YES, ABORT E0317 070E 0289 CI INR9,>0B00 CHANNEL HIGHER THAN 11? 0710 0B00 E0318 0712 1BF3 JH INLPLK YES, ABORT E0319 0714 0203 LI INR3,ROWST RESET BUFFER POINTER 0716 F056 E0320 0718 CCC9 MOV INR9,*INR3+ SAVE R9 (DO WE NEED IT?) E0321 * AND CLEAR THE NEXT BYTE E0322 * E0323 * ASMIF BBC2 ######################################### E0324 * E0325 * START WITH THE 'FT' BYTE. E0326 * E0327 * LSBIT (7) = 0 FOR FORMAT BELOW, 1=UNDEFINED E0328 * BIT 6 = 1 IF PACKET REPEAT FACILITY IS IN USE E0329 * BIT 5 = 1 IF CONTINUITY INDICATOR IS EXPLICIT, OTHE E0330 * IT IS IMPLICIT. E0331 * BIT 4 = 1 IF DATA LENGTH INDICATOR IS IN USE. E0332 * E0333 071A D7C0 MOVB INR0,*INVREG SEND TO VDP E0334 071C D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0335 071E 2442 CZC INR2,INR1 E0336 0720 16EA JNE MT10 JUMP IF BUFFER EMPTY E0337 0722 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 0724 F031 E0338 0726 D068 MOVB @HAMTAB(INR8),INR1 GET HAMMING CORRECTION 0728 17E8 E0339 072A 11C1 JLT INFFLK BAD HAMMING, CHECK FOR LEAD E0340 072C 2460 CZC @TYPEA,INR1 CHECK FOR TYPE A FORMAT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0034 072E 005E E0341 0730 16E4 JNE INLPLK IF WRONG, ABORT E0342 0732 DCC1 MOVB INR1,*INR3+ SAVE HAMMING IN ROW STORE E0343 0734 D141 MOVB INR1,INR5 COPY FOR DL, CI & RI BYTE INFO E0344 * E0345 * GET THE 'AL' BYTE (GIVES ADDRESS LENGTH OF HAMMING BYTES E0346 * E0347 0736 04C4 CLR INR4 ADDRESS BYTE COUNTER E0348 0738 D7C0 MOVB INR0,*INVREG SEND TO VDP E0349 073A D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0350 073C 2442 CZC INR2,INR1 E0351 073E 16DB JNE MT10 JUMP IF BUFFER EMPTY E0352 0740 D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 0742 F031 E0353 0744 D068 MOVB @HAMTAB(R8),INR1 GET HAMMING CORRECTION 0746 17E8 E0354 0748 11B2 JLT INFFLK BAD HAMMING, CHECK FOR LEAD E0355 074A 0281 CI INR1,>0600 CHECK VALID AL 074C 0600 E0356 074E 1BD5 JH INLPLK IF NOT, ABORT E0357 0750 DCC1 MOVB INR1,*INR3+ SAVE HAMMING IN ROW STORE E0358 0752 D801 MOVB INR1,@INR4LS SAVE FOR HAMMING BYTE COUNTER 0754 F029 E0359 * E0360 * ADDRESS LENGTH IS NOW IN INR4. GET THAT NUMBER OF E0361 * HAMMING BYTES INTO INTERNAL RAM STORE E0362 * E0363 0756 D7C0 ALLOOP MOVB INR0,*INVREG SEND TO VDP E0364 0758 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0365 075A 2442 CZC INR2,INR1 E0366 075C 16CC JNE MT10 JUMP IF BUFFER EMPTY E0367 075E D81E MOVB *INFVRM,@INR8LS READ A BYTE FROM VRAM BUFFER 0760 F031 E0368 0762 D068 MOVB @HAMTAB(R8),INR1 GET HAMMING CORRECTION 0764 17E8 E0369 0766 11A3 JLT INFFLK BAD HAMMING, CHECK FOR LEAD E0370 0768 DCC1 MOVB INR1,*INR3+ SAVE HAMMING IN ROW STORE E0371 076A 0604 DEC INR4 UPDATE COUNTER E0372 076C 16F4 JNE ALLOOP LOOP UNTIL ZERO E0373 * E0374 * NEXT (IF IT EXISTS) IS THE REPEAT INDICATOR BYTE E0375 * THIS BYTE IS NOT HAMMING PROTECTED E0376 * E0377 076E 2160 COC @RI,INR5 RI PRESENT? 0770 0060 E0378 0772 1605 JNE CHKCI E0379 0774 D7C0 MOVB INR0,*INVREG SEND TO VDP E0380 0776 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0381 0778 2442 CZC INR2,INR1 E0382 077A 16BD JNE MT10 JUMP IF BUFFER EMPTY E0383 077C DCDE MOVB *INFVRM,*INR3+ SAVE A BYTE TO ROW STORE E0384 * E0385 * NEXT IS THE CONTINUITY INDICATOR (IF IT EXISTS) E0386 * THIS BYTE IS NOT HAMMING PROTECTED E0387 * E0388 077E 2160 CHKCI COC @CI,INR5 CI PRESENT? 0780 0062 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0035 E0389 0782 1605 JNE CHKDL NO, JUMP E0390 0784 D7C0 MOVB INR0,*INVREG SEND TO VDP E0391 0786 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0392 0788 2442 CZC INR2,INR1 E0393 078A 16B5 JNE MT10 JUMP IF BUFFER EMPTY E0394 078C DCDE MOVB *INFVRM,*INR3+ SAVE IN ROW STORE E0395 * E0396 * NEXT IS THE DATA LENGTH BYTE (IF IT EXISTS) E0397 * E0398 078E 04E0 CHKDL CLR @PKTEND 0790 D05C E0399 0792 2160 COC @DL,INR5 DL PRESENT? 0794 0064 E0400 0796 1307 JEQ CHKD10 YES, JUMP E0401 0798 04E0 CLR @DLADR CLEAR THE POINTER TO DL BYTE 079A D05E E0402 079C 0205 LI INR5,ROWST+40 SET UP DEFAULT END ADR. 079E F07E E0403 07A0 C805 MOV INR5,@PKTEND AND STORE IT 07A2 D05C E0404 07A4 100F JMP BTLP31 AND GO GET THE DATA E0405 * E0406 * A DL BYTE EXISTS E0407 * E0408 07A6 D7C0 CHKD10 MOVB INR0,*INVREG SEND TO VDP E0409 07A8 D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0410 07AA 2442 CZC INR2,INR1 E0411 07AC 16A4 JNE MT10 JUMP IF BUFFER EMPTY E0412 07AE D11E MOVB *INFVRM,INR4 READ A BYTE FROM VRAM BUFFER E0413 07B0 0244 ANDI INR4,>3F00 REMOVE UNUSED BITS 07B2 3F00 E0414 07B4 DCC4 MOVB INR4,*INR3+ COPY TO BUFFER E0415 07B6 0984 SRL INR4,8 MOVE TO LSB E0416 07B8 A103 A INR3,INR4 COMPUTE END ADR. E0417 07BA 0284 CI INR4,ROWST+42 CHECK VALID RANGE 07BC F080 E0418 07BE 1B9D JH INLPLK IF NOT, ABORT E0419 07C0 C804 MOV INR4,@PKTEND STORE AS END OF PACKET 07C2 D05C E0420 * E0421 * WE HAVE NOW GOT ALL THE HAMMING, PUT THE DATA IN STORE. E0422 * E0423 07C4 C803 BTLP31 MOV R3,@PKTSTT STORE THE DATA START POINT 07C6 D05A E0424 * E0425 * ASMEND ######################################## E0426 * E0427 07C8 0205 LI INR5,ROWST+42 POINT TO END OF STORE 07CA F080 E0428 07CC D7C0 BTLP32 MOVB INR0,*INVREG SEND TO VDP E0429 07CE D05F MOVB *INVREG,INR1 GET STATUS REGISTER CONTENTS E0430 07D0 2442 CZC INR2,INR1 E0431 07D2 160C JNE EMPTY3 $$$$$$$$$$$ DEBUG $$$$$$$$ E0432 07D4 D05E MOVB *INFVRM,INR1 READ A BYTE FROM VRAM BUFFER E0433 07D6 404D SZC INR13,INR1 REMOVE 'PARITY' (ITS 8 BIT DATA E0434 07D8 DCC1 MOVB INR1,*INR3+ SAVE BYTE IN ROW STORE E0435 07DA 8143 C INR3,INR5 CHECK FOR END OF STORE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0036 E0436 07DC 1AF7 JL BTLP32 AND LOOP TILL THERE E0437 * E0438 * ASMIF BBC2 ####################################### E0439 07DE 02E0 LWPI WSP BACK TO MAIN WORKSPACE 07E0 F000 E0440 07E2 E1A0 SOC @PKT31,R6 SIGNAL PACKET 31 07E4 0056 E0441 07E6 064A DECT R10 E0442 07E8 C2DA MOV *R10,R11 E0443 07EA 045B RT E0444 * E0445 * ASMELSE ######################################## E0446 * B @INLP E0447 * ASMEND ######################################## E0448 * E0449 07EC 0460 EMPTY3 B @EMPTY $$$$$$$$ DEBUG 07EE 056E E0450 * E0451 07F0 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0037 0031 COPY SERMAG.990 F0001 ************************************************************ F0002 * * F0003 * SERMAG - SORT OUT SERIAL MAGAZINES * F0004 * * F0005 * Preconditions: * F0006 * * F0007 * Postconditions: * F0008 * * F0009 * Called by: * F0010 * * F0011 * Calls: * F0012 * * F0013 * Local variables: * F0014 * * F0015 * Global variables: * F0016 * * F0017 * Comments: If the TV Channel is changed, then * F0018 * ALL 8 WORDS OF 'MAGSER' MUST BE * F0019 * CLEARED. * F0020 * * F0021 * AUTHOR: COLIN HINSON * F0022 ************************************************************ F0023 07F0 04E7 SERMAG CLR @MAGADR(R7) TERMINATE THE MAGAZINE 07F2 D002 F0024 07F4 0727 SETO @MAGPAG(R7) TERMINATE THE PAGE 07F6 D022 F0025 07F8 D020 MOVB @CNTRLB,R0 GET THE SERIAL FLAG BIT 07FA F05F F0026 07FC 0240 ANDI R0,>0100 LEAVE ONLY THE FLAG BIT 07FE 0100 F0027 0800 131E JEQ PARMAG IF PARALLEL, DEAL WITH IT F0028 * SERIAL MAGAZINE F0029 0802 05A7 INC @MAGSER(R7) COUNT THE OCCURRENCE 0804 F082 F0030 0806 1503 JGT SERM10 IF POSITIVE, SKIP F0031 0808 C9E0 MOV @WD4000,@MAGSER(R7) RESET TO MID VALUE 080A 006A 080C F082 F0032 080E 04C5 SERM10 CLR R5 CLEAR INDEXING POINTER F0033 * LOOP F0034 0810 C025 SERM20 MOV @MAGSER(R5),R0 GET SER MAG FLAG FOR INDEXED M 0812 F082 F0035 0814 110F JLT SERM40 F0036 0816 130E JEQ SERM40 F0037 0818 04E5 CLR @MAGADR(R5) TERMINATE THE MAGAZINE 081A D002 F0038 081C 0725 SETO @MAGPAG(R5) TERMINATE THE PAGE 081E D022 F0039 0820 8805 C R5,@DISMAG SAME AS DISPLAYED MAGAZINE? 0822 F092 F0040 0824 1607 JNE SERM40 NO, SKIP F0041 0826 21A0 COC @RXDIS,R6 RX PAGE = DISPLAY? 0828 005C F0042 082A 1604 JNE SERM40 NO, SKIP F0043 082C 41A0 SZC @RXDIS,R6 CLEAR THE RX=DISPLAY FLAG 082E 005C NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0038 F0044 0830 E3A0 SOC @WRTPAG,R14 SET FLAG TO RE-WRITE THE PAGE 0832 0054 F0045 0834 05C5 SERM40 INCT R5 NEXT MAGAZINE F0046 0836 0285 CI R5,16 DONE ALL MAGAZINES? 0838 0010 F0047 083A 1AEA JL SERM20 NO, LOOP F0048 083C 045B RT F0049 * F0050 083E 0627 PARMAG DEC @MAGSER(R7) COUNT THE OCCURRENCE 0840 F082 F0051 0842 1104 JLT PARM10 IF STILL NEGATIVE, SKIP F0052 0844 1303 JEQ PARM10 F0053 0846 C9E0 MOV @WDC000,@MAGSER(R7) RESTORE TO MID VALUE 0848 0076 084A F082 F0054 084C 8807 PARM10 C R7,@DISMAG SAME MAGAZINE AS DISPLAY? 084E F092 F0055 0850 1607 JNE PARM20 NO, EXIT F0056 0852 21A0 COC @RXDIS,R6 RX PAGE = DISPLAY? 0854 005C F0057 0856 1604 JNE PARM20 NO, SKIP F0058 0858 41A0 SZC @RXDIS,R6 CLEAR THE RX=DISPLAY FLAG 085A 005C F0059 085C E3A0 SOC @WRTPAG,R14 SET FLAG TO RE-WRITE THE PAGE 085E 0054 F0060 0860 045B PARM20 RT F0061 0862 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0039 0033 COPY ALLOCATE.990 G0001 ************************************************************ G0002 * * G0003 * ALLOCATE - Allocate a page store * G0004 * * G0005 * Called by: MAIN * G0006 * * G0007 * USE OF REGISTERS: * G0008 * R0 = WORK REGISTER * G0009 * R1 = INCOMING PAGE NUMBER * G0010 * R2 = WORK REGISTER * G0011 * R3 = WORK REGISTER * G0012 * R4 = WORK REGISTER * G0013 * R6 = FLAG BIT REGISTER * G0014 * R7 = INCOMING MAGAZINE NUMBER (TIMES 2) * G0015 * R8 = INCOMING SUB PAGE NUMBER * G0016 * R9 = INCOMING ROW NUMBER (N/U) * G0017 * R10= STACK POINTER * G0018 * R11= RETURN ADDRESS * G0019 * R13= POINTER TO VDP MEMORY ACCESS * G0020 * R14= FLAG BIT REGISTER * G0021 * R15= POINTS TO FIRST AVAILABLE PAGE LINK * G0022 * * G0023 * AVAILABLE: R5,R12 * G0024 * * G0025 * CALLED BY: MAIN * G0026 * * G0027 * CALLS: NONE * G0028 * AUTHOR: COLIN HINSON * G0029 ************************************************************ G0030 0862 04E0 ALOCAT CLR @MAPPER ENSURE PAGE ZERO 0864 FC00 G0031 0866 C0C1 MOV R1,R3 COPY FOR FUTURE TEST G0032 0868 0A11 SLA R1,1 WORD ALIGN G0033 086A C0A1 MOV @INDEX(R1),R2 GET THE LINK ADDRESS 086C C000 G0034 086E 0242 ANDI R2,LNKMSK REMOVE SUB PAGE BIT 0870 FFFE G0035 0872 1630 JNE ALOC30 IF NOT ZERO, ALREADY ALLOCATED G0036 * G0037 * ALLOCATE RAM FOR NEW PAGE G0038 * G0039 0874 C3CF MOV R15,R15 ANY RAM LEFT? G0040 0876 1356 JEQ ALCABT NO, ABORT G0041 0878 05A0 INC @PAGCNT COUNT THE PAGE 087A D000 G0042 087C E3A0 SOC @PAGCHG,R14 SET 'PAGE QTY CHANGED' FLAG 087E 0050 G0043 0880 C84F MOV R15,@INDEX(R1) SET UP LINK POINTER 0882 C000 G0044 * G0045 * ASMIF FORCE G0046 * ASMELSE G0047 0884 C208 MOV R8,R8 SUB PAGE? G0048 0886 1302 JEQ ALOC10 NO G0049 * ASMEND G0050 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0040 G0051 * ASMIF ALLOW G0052 * ANDI R3,>F CHECK FOR PAGE UNITS=0 G0053 * JEQ ALOC10 IF SO, NO SUB PAGE ALLOCATION G0054 0888 05A1 INC @INDEX(R1) SET SUB PAGE BIT 088A C000 G0055 * ASMEND G0056 * G0057 088C C0CF ALOC10 MOV R15,R3 SAVE OLD POINTER G0058 088E C3DF MOV *R15,R15 GET NEW POINTER G0059 0890 04F3 CLR *R3+ CLEAR POINTER TO NEXT LINK G0060 0892 CCC8 MOV R8,*R3+ SET UP SUB PAGE G0061 0894 C013 MOV *R3,R0 GET PAGE/MAP ADDRESS G0062 0896 0704 SETO R4 SET 'PAGE ALREADY CLEARED' G0063 0898 C080 MOV R0,R2 COPY G0064 089A 0240 ANDI R0,PAGMSK REMOVE MAP NUMBER 089C FFC0 G0065 089E 0242 ANDI R2,MAPMSK REMOVE PAGE ADDRESS. 08A0 003F G0066 08A2 06C2 SWPB R2 G0067 08A4 C9C0 MOV R0,@MAGADR(R7) SET UP PAGE ADDRESS 08A6 D002 G0068 08A8 D9C4 MOVB R4,@MAGMAP(R7) INDICATE PAGE CLEARED STATUS 08AA D012 G0069 08AC D9C2 MOVB R2,@MAGMAP+1(R7) SET UP MAP NUMBER 08AE D013 G0070 08B0 D802 MOVB R2,@MAPPER SET UP MAPPER 08B2 FC00 G0071 08B4 0220 AI R0,COUNTS POINT TO ROW COUNTS 08B6 0410 G0072 08B8 0204 LI R4,28 26 COUNTS TO CLEAR 08BA 001C G0073 08BC 04F0 ALOC20 CLR *R0+ CLEAR 2 COUNTS G0074 08BE 0644 DECT R4 COUNT THEM G0075 08C0 16FD JNE ALOC20 LOOP TILL DONE G0076 08C2 04E0 CLR @MAPPER RESTORE MAPPER PAGE 0 08C4 FC00 G0077 08C6 0911 SRL R1,1 RESTORE PAGE NUMBER G0078 08C8 C801 ALDBUG MOV R1,@LATPAG SAVE FOR LATEST PAGE 08CA D04C G0079 08CC C808 MOV R8,@LATSUB SAVE FOR LATEST SUB PAGE 08CE D04E G0080 08D0 05CB INCT R11 BYPASS ABORT ADDRESS G0081 08D2 045B RT G0082 * G0083 * GET THE PAGE AND MAP FOR ALREADY ALLOCATED PAGE NUMBER G0084 * G0085 08D4 25A0 ALOC30 CZC @NOSUBP,R6 SUB PAGE LINK ALLOWED? 08D6 0054 G0086 08D8 1310 JEQ ALOC35 YES G0087 08DA 05C2 INCT R2 POINT TO SUB PAGE STORE G0088 08DC CC88 MOV R8,*R2+ SAVE CURRENT SUB PAGE NO G0089 08DE C012 ALOC33 MOV *R2,R0 GET THE PAGE/MAP ADR. G0090 08E0 C080 MOV R0,R2 COPY G0091 08E2 0240 ANDI R0,PAGMSK REMOVE MAP NUMBER 08E4 FFC0 G0092 08E6 0242 ANDI R2,MAPMSK REMOVE PAGE ADDRESS. 08E8 003F NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0041 G0093 08EA C9C0 MOV R0,@MAGADR(R7) SET UP PAGE ADDRESS 08EC D002 G0094 08EE C9E0 MOV @R2LSB,@MAGMAP+1(R7) SET MAP, SET PAGE NOT CLEAR 08F0 F005 08F2 D013 G0095 08F4 0911 SRL R1,1 RESTORE PAGE NUMBER G0096 08F6 05CB INCT R11 BYPASS ABORT ADDRESS G0097 08F8 045B RT G0098 * G0099 08FA C0F2 ALOC35 MOV *R2+,R3 GET NEXT LINK G0100 08FC 1308 JEQ ALOC40 IF ZERO, NO MORE LINKS G0101 08FE 0283 CI R3,>2020 DEBUG CHECK 0900 2020 G0102 0902 1601 JNE DEBUG2 DEBUG CHECK G0103 0904 1000 NOP DEBUG CHECK G0104 0906 8C88 DEBUG2 C R8,*R2+ CORRECT SUB PAGE? G0105 0908 13EA JEQ ALOC33 YES, JUMP G0106 090A C083 MOV R3,R2 SET UP NEXT LINK POINTER G0107 090C 10F6 JMP ALOC35 AND LOOP BACK G0108 * G0109 * NO FURTHER LINKS LEFT G0110 * G0111 090E 8C88 ALOC40 C R8,*R2+ CHECK SUB PAGE ON LAST LINK G0112 0910 13E6 JEQ ALOC33 IF SAME, JUMP G0113 0912 C3CF MOV R15,R15 ANY RAM LEFT? G0114 0914 1307 JEQ ALCABT NO, ABORT G0115 0916 C88F MOV R15,@-4(R2) SET UP NEXT LINK POINTER 0918 FFFC G0116 091A 05A0 INC @PAGCNT COUNT THE PAGE 091C D000 G0117 091E E3A0 SOC @PAGCHG,R14 SET PAGE QTY CHANGED 0920 0050 G0118 0922 10B4 JMP ALOC10 G0119 * G0120 * ABORT ALLOCATION, AND BRANCH VIA DATA STATEMENT G0121 * G0122 0924 04E7 ALCABT CLR @MAGADR(R7) KILL THE MAGAZINE 0926 D002 G0123 0928 C2DB MOV *R11,R11 GET THE DATA STATEMENT G0124 092A 045B B *R11 AND BRANCH TO IT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0042 0035 COPY KEY1.990 H0001 ************************************************************ H0002 * * H0003 * KEY - Keyboard scanning routine * H0004 * * H0005 * * H0006 * AUTHOR: COLIN HINSON * H0007 ************************************************************ H0008 092C 03 PAGNOT BYTE >03 YELLOW TEXT H0009 092D 20 TEXT ' PAGE NOT AVAILABLE ' H0010 0944 00 BYTE 0 H0011 0945 03 LNKNOT BYTE >03 YELLOW TEXT H0012 0946 20 TEXT ' LINK NOT AVAILABLE ' H0013 095D 00 BYTE 0 H0014 * H0015 * Start of KEYboard routines H0016 * H0017 095E CE8B KEY MOV R11,*R10+ Save return address H0018 0960 06A0 BL @ENCODE See if key pressed 0962 1910 H0019 0964 43A0 SZC @NOHDR,R14 ALLOW HEADER DISPLAY 0966 004E H0020 0968 04E0 CLR @MAPPER ENSURE LINKED LIST IN MAP 096A FC00 H0021 096C 0281 CI R1,>23 IS IT THE QUANTITY KEY? 096E 0023 H0022 0970 1603 JNE KEY100 NO, JUMP H0023 0972 2BA0 XOR @QTYKEY,R14 INVERT THE FLAG 0974 0052 H0024 0976 1002 JMP KEY150 H0025 0978 43A0 KEY100 SZC @QTYKEY,R14 CLEAR THE FLAG 097A 0052 H0026 097C 0281 KEY150 CI R1,>10 Digit key ? 097E 0010 H0027 0980 1A25 JL KDIGIT Yes - jump H0028 0982 C020 MOV @SPECBR,R0 GET SPECIAL KEY BR. ADR. 0984 D056 H0029 0986 160A JNE BRANR0 NOT ZERO, SPECIAL SEQUENCE H0030 * H0031 0988 0281 CI R1,>1B IS IT THE RESET KEY? 098A 001B H0032 098C 1304 JEQ KEY200 YES, PROCESS IT H0033 098E 04E0 CLR @RSTCNT CLEAR THE RESET COUNTER 0990 D04A H0034 0992 43A0 SZC @ENDFLG,R14 CLEAR THE LOOP END FLAG 0994 0064 H0035 0996 0A11 KEY200 SLA R1,1 H0036 0998 C021 MOV @KEYTAB->20(R1),R0 Offset into table 099A 097E H0037 099C 0450 BRANR0 B *R0 Go process key H0038 * H0039 * Jump table for key routines (TABLE STARTS AT >10 KEY) H0040 * H0041 099E 1106 KEYTAB DATA TXTKEY PAGE SELECT H0042 09A0 0B02 DATA KNEXT NEXT PAGE H0043 09A2 0B9E DATA KPREV PREVIOUS PAGE H0044 09A4 0C5A DATA KFLOF RED FLOF KEY NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0043 H0045 09A6 0C5A DATA KFLOF GREEN FLOF KEY H0046 09A8 0C5A DATA KFLOF YELLOW FLOF KEY H0047 09AA 0C5A DATA KFLOF CYAN FLOF KEY H0048 09AC 0E4A DATA KREVL REVEAL KEY H0049 09AE 0C5A DATA KFLOF INDEX FLOF KEY H0050 09B0 0E62 DATA CLRKEY CLEAR PAGE KEY H0051 09B2 0F00 DATA ALOCKY DE-ALLOCATE SUB PAGE KEY H0052 09B4 0E82 DATA RSETKY RESET KEY H0053 09B6 0FAE DATA DCSTKY DATACAST KEY H0054 09B8 100E DATA LEV2KY UNDERLINE ENABLE KEY H0055 09BA 0AB2 DATA KEXIT1 WAS HELP KEY H0056 09BC 0CF2 DATA DUMPKY DUMP THE PAGE IN HEX H0057 09BE 0AE8 DATA LATKEY LATEST PAGE KEY H0058 09C0 0E96 DATA DLTKEY DELETE THE PAGE KEY H0059 09C2 0AFA DATA PNEXT NEXT PAGE KEY H0060 09C4 1030 DATA QNTYKY PAGE QUANTITY DISPLAY KEY H0061 09C6 112C DATA MIXKEY GO TO MIX MODE KEY H0062 09C8 1152 DATA PICKEY PICTURE MODE KEY H0063 09CA 1064 DATA R24KEY ROW 24 DISPLAY MODE KEY H0064 ************************************************************ H0065 * * H0066 * DIGIT KEY HAS BEEN PRESSED * H0067 * * H0068 ************************************************************ H0069 09CC C801 KDIGIT MOV R1,@NXTTMP Save digit value 09CE D042 H0070 09D0 C020 MOV @DGKBRA,R0 GET DIGIT KEY BR. ADR. 09D2 D054 H0071 09D4 16E3 JNE BRANR0 NOT ZERO, EXECUTE ADR IN R0 H0072 * H0073 09D6 0281 CI R1,9 AVOID THE HEX FOR THE TIME BEING 09D8 0009 H0074 09DA 1B6B JH KEXIT1 H0075 09DC C060 MOV @PKEY,R1 Waiting for a page digit ? 09DE D044 H0076 09E0 1604 JNE KDGT10 YES, JUMP H0077 09E2 06A0 BL @NOPKEY SIMULATE PAGE KEY PRESS 09E4 0AC4 H0078 09E6 C060 MOV @PKEY,R1 GET NEW PKEY VALUE (SHOULD BE 1) 09E8 D044 H0079 09EA 43A0 KDGT10 SZC @INHEDR,R14 ALLOW HEADER DISPLAY (& PAGE N 09EC 005E H0080 09EE C020 MOV @NXTTMP,R0 Restore digit 09F0 D042 H0081 09F2 0A80 SLA R0,8 Digit to MSByte H0082 09F4 0281 CI R1,1 MAGAZINE NO. ENTRY? 09F6 0001 H0083 09F8 1608 JNE KDGT13 NO, JUMP H0084 09FA 0280 CI R0,>0800 VALID MAG. NO.? 09FC 0800 H0085 09FE 1B59 JH KEXIT1 NO, ABORT H0086 0A00 1601 JNE KDGT12 JUMP IF NOT MAG 8. H0087 0A02 04C0 CLR R0 SET TO MAG 0. H0088 0A04 F800 KDGT12 SOCB R0,@PAGHEX SAVE NEW DIGIT 0A06 F050 H0089 0A08 1059 JMP UPDKEY UPDATE PKEY & EXIT H0090 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0044 H0091 0A0A 0281 KDGT13 CI R1,2 PAGE TENS? 0A0C 0002 H0092 0A0E 1604 JNE KDGT14 H0093 0A10 0A40 SLA R0,4 TO MS NIBBLE H0094 0A12 D800 MOVB R0,@PAGHEX+1 SAVE 0A14 F051 H0095 0A16 1052 JMP UPDKEY UPDATE COUNTER & EXIT H0096 * H0097 0A18 F800 KDGT14 SOCB R0,@PAGHEX+1 SAVE PAGE UNITS 0A1A F051 H0098 0A1C 5820 SZCB @BYTE80,@PAGHEX ALLOW RX PAGE DISPLAY 0A1E 006C 0A20 F050 H0099 0A22 C060 MOV @PAGHEX,R1 GET WHOLE PAGE NUMBER 0A24 F050 H0100 0A26 0A11 SLA R1,1 WORD OFFSET H0101 0A28 C2E1 MOV @INDEX(R1),R11 GET PAGE ADDRESS 0A2A C000 H0102 0A2C 160B JNE KDGT25 PAGE AVAILABLE, JUMP H0103 0A2E E3A0 KDGT16 SOC @NOHDR,R14 ALLOW NO HEADERS 0A30 004E H0104 0A32 06A0 BL @TXTSCN 0A34 12E8 H0105 0A36 00 BYTE 0,8 ROW 0, COL 9 H0106 0A38 092C DATA PAGNOT 'PAGE NOT AVAILABLE' H0107 0A3A 04E0 CLR @PKEY 0A3C D044 H0108 0A3E 1021 JMP DSPNLK AND EXIT H0109 * H0110 0A40 C2E1 KDGT20 MOV @INDEX(R1),R11 GET PAGE ADDRESS 0A42 C000 H0111 0A44 22E0 KDGT25 COC @SUBFLG,R11 SUB PAGE INVOLVED? 0A46 004E H0112 0A48 1305 JEQ KDGT30 YES, JUMP H0113 0A4A 05CB INCT R11 POINT TO SUB PAGE DATA H0114 0A4C C83B MOV *R11+,@SUBHEX GET SUB PAGE DATA 0A4E F052 H0115 0A50 C01B MOV *R11,R0 GET PAGE/MAP DATA H0116 0A52 1007 JMP SCRE10 PUT DATA ON SCREEN H0117 * H0118 0A54 0703 KDGT30 SETO R3 CLEAR THE SUB PAGE NUMBER H0119 0A56 06A0 BL @GETNSP GET THE LOWEST SUB PAGE ADR. 0A58 0B66 H0120 0A5A 0A5E DATA SUBSCN DISPLAY IF AVAILABLE H0121 0A5C 1030 JMP NPCLR IF NOT, ABORT H0122 * H0123 * PUT THE SUB PAGE ADDRESSED BY R0 ON THE SCREEN H0124 * H0125 0A5E C803 SUBSCN MOV R3,@SUBHEX SET UP THE SUB PAGE 0A60 F052 H0126 0A62 C040 SCRE10 MOV R0,R1 COPY H0127 0A64 E3A0 SOC @OVRIDE,R14 SET USER OVER-RIDE OF 8/30 0A66 0062 H0128 0A68 0240 ANDI R0,PAGMSK REMOVE MAP DATA 0A6A FFC0 H0129 0A6C C800 MOV R0,@DISADR PASS THE ADDRESS 0A6E F04E NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0045 H0130 0A70 0241 ANDI R1,MAPMSK LEAVE THE MAP NUMBER 0A72 003F H0131 0A74 D820 MOVB @R1LSB,@DISMAP PASS TO DISPLAY ROUTINE 0A76 F003 0A78 F054 H0132 0A7A 04E0 CLR @PKEY CLEAR THE KEY DIGIT POINTER 0A7C D044 H0133 0A7E 06A0 BL @RWPAGE RE-WRITE THE PAGE 0A80 1AD0 H0134 0A82 06A0 DSPNLK BL @DISPN Display the page number 0A84 22E6 H0135 * CHECK FOR NEW PAGE = RX'D PAGE H0136 0A86 41A0 SZC @RXDIS,R6 CLEAR RX=DISPLAY FLAG 0A88 005C H0137 0A8A C060 MOV @PAGHEX,R1 GET DISPLAY PAGE NO 0A8C F050 H0138 0A8E C081 MOV R1,R2 COPY H0139 0A90 0982 SRL R2,8 MAG. NO TO LSB H0140 0A92 A082 A R2,R2 WORD ALIGN H0141 0A94 8881 C R1,@MAGPAG(R2) SAME PAGE AS BEING RX'D? 0A96 D022 H0142 0A98 160C JNE KEXIT1 NO, EXIT H0143 0A9A A041 A R1,R1 WORD ALIGN H0144 0A9C C061 MOV @INDEX(R1),R1 GET SUB PAGE/LINK DATA 0A9E C000 H0145 0AA0 0241 ANDI R1,SUBFLG SUB PAGE INVOLVED? 0AA2 004E H0146 0AA4 1304 JEQ SETRXD NO, SET FLAG AND EXIT H0147 0AA6 88A0 C @SUBHEX,@MAGSUB(R2) SAME SUB PAGE? 0AA8 F052 0AAA D032 H0148 0AAC 1602 JNE KEXIT1 NO, EXIT H0149 0AAE E1A0 SETRXD SOC @RXDIS,R6 SET RX=DISPLAY FLAG 0AB0 005C H0150 0AB2 04E0 KEXIT1 CLR @MAPPER 0AB4 FC00 H0151 0AB6 064A DECT R10 H0152 0AB8 C2DA MOV *R10,R11 Restore return address H0153 0ABA 045B RT H0154 * H0155 0ABC 0581 UPDKEY INC R1 UPDATE DIGIT COUNTER H0156 0ABE C801 NPCLR MOV R1,@PKEY Save key pointer 0AC0 D044 H0157 0AC2 10DF JMP DSPNLK H0158 ************************************************************ H0159 * * H0160 * PAGE SELECT KEY ROUTINE * H0161 * * H0162 ************************************************************ H0163 0AC4 CE8B NOPKEY MOV R11,*R10+ SET UP RETURN ADDRESS H0164 0AC6 0720 PSKEY SETO @SUBHEX CLEAR THE SUB PAGE NUMBER 0AC8 F052 H0165 0ACA C820 MOV @WD8000,@PAGHEX INVALID PAGE NUMBER 0ACC 006C 0ACE F050 H0166 0AD0 C820 MOV @WD0001,@PKEY SET UP 'PAGE KEY' POINTER 0AD2 004E NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0046 0AD4 D044 H0167 0AD6 06A0 BL @DISPN DISPLAY THE (BLANK) PAGE NO. 0AD8 22E6 H0168 0ADA 06A0 BL @DISHDR DISPLAY THE HEADER 0ADC 130C H0169 0ADE 41A0 SZC @RH,R6 STOP THE HEADER ROLLING 0AE0 005E H0170 0AE2 E3A0 SOC @OVRIDE,R14 KILL OFF 8/30 INIT PAGE 0AE4 0062 H0171 0AE6 10E5 JMP KEXIT1 H0172 ************************************************************ H0173 * * H0174 * LATEST PAGE KEY (LAST NEW PAGE) * H0175 * * H0176 ************************************************************ H0177 0AE8 C820 LATKEY MOV @LATPAG,@PAGHEX GET THE PAGE NUMBER 0AEA D04C 0AEC F050 H0178 0AEE C820 MOV @LATSUB,@SUBHEX GET SUB PAGE NUMBER 0AF0 D04E 0AF2 F052 H0179 0AF4 0620 DEC @SUBHEX SO WE CAN CALL 'NEXT SUB PAGE' 0AF6 F052 H0180 0AF8 1004 JMP KNEXT H0181 ************************************************************ H0182 * * H0183 * NEXT & PREVIOUS PAGE KEY ROUTINES * H0184 * * H0185 ************************************************************ H0186 0AFA C060 PNEXT MOV @PAGHEX,R1 GET PRESENT PAGE NO. 0AFC F050 H0187 0AFE 0A11 SLA R1,1 H0188 0B00 100B JMP KNXT10 H0189 * H0190 0B02 C060 KNEXT MOV @PAGHEX,R1 GET THE PRESENT PAGE NO. 0B04 F050 H0191 0B06 0A11 SLA R1,1 WORD OFFSET H0192 0B08 C2E1 MOV @INDEX(R1),R11 PAGE EXISTS? 0B0A C000 H0193 0B0C 1305 JEQ KNXT10 NO, NEXT PAGE H0194 0B0E C0E0 MOV @SUBHEX,R3 GET SUB PAGE NO. 0B10 F052 H0195 * JEQ KNXT10 IF ZERO, NO SUB PAGES H0196 0B12 06A0 BL @GETNSP GET THE NEXT SUB PAGE 0B14 0B66 H0197 0B16 0A5E DATA SUBSCN WHERE TO GO IF AVAILABLE H0198 0B18 05C1 KNXT10 INCT R1 NEXT PAGE H0199 0B1A 0703 SETO R3 ENSURE SUB PAGE NO. CLEARED H0200 0B1C C2E1 MOV @INDEX(R1),R11 GET THE ADR. (IF ANY) 0B1E C000 H0201 0B20 130D JEQ KNXT20 H0202 0B22 C08B MOV R11,R2 SAVE SUB PAGE DATA BIT H0203 0B24 024B ANDI R11,LNKMSK REMOVE SUB PAGE BIT 0B26 FFFE H0204 0B28 C02B MOV @4(R11),R0 GET THE PAGE/MAP ADDRESS 0B2A 0004 H0205 0B2C 20A0 COC @SUBFLG,R2 SUB PAGE INVOLVED? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0047 0B2E 004E H0206 0B30 1312 JEQ KNSPAG YES H0207 0B32 C0EB MOV @2(R11),R3 SET UP SUB PAGE 0B34 0002 H0208 0B36 06A0 BL @SETRQP SET UP REQUEST 0B38 0C36 H0209 0B3A 0A5E DATA SUBSCN GO DISPLAY IF VALID H0210 * H0211 0B3C 0281 KNXT20 CI R1,>7A0*2 AT END OF INDEX? 0B3E 0F40 H0212 0B40 1AEB JL KNXT10 N H0213 0B42 23A0 COC @ENDFLG,R14 BEEN PAST HERE BEFORE? 0B44 0064 H0214 0B46 1602 JNE KNXT40 NO, SET FLAG AND RESTART H0215 0B48 0460 KNXT30 B @KDGT16 YES, ABORT LOOP 0B4A 0A2E H0216 0B4C E3A0 KNXT40 SOC @ENDFLG,R14 SET FLAG 0B4E 0064 H0217 0B50 0201 LI R1,-2 RE-START AT BEGINING 0B52 FFFE H0218 0B54 10E1 JMP KNXT10 H0219 * H0220 * GET FIRST SUB PAGE FROM NEXT NUMBERED PAGE H0221 * H0222 0B56 06A0 KNSPAG BL @SETRQP SET UP THE MAIN REQUEST 0B58 0C36 H0223 0B5A 0B5E DATA KNSP10 GO HERE IF VALID PAGE H0224 0B5C 10DD JMP KNXT10 IF INVALID, NEXT MAIN PAGE H0225 * H0226 0B5E 06A0 KNSP10 BL @GETNSP GET THE FIRST AVAILABLE SUB PAGE 0B60 0B66 H0227 0B62 0A5E DATA SUBSCN IF FOUND, GO DISPLAY H0228 0B64 10D9 JMP KNXT10 IF NOT, NEXT MAIN PAGE H0229 * H0230 * FIND THE NEXT SUB PAGE, PRESENT SUB PAGE NO. IS IN R3 H0231 * EXIT VIA DATA STATEMENT IF GOOD SUB PAGE FOUND. H0232 * H0233 0B66 0583 GETNSP INC R3 NEXT SUB PAGE H0234 0B68 0705 SETO R5 SET BEST PAGE TO MAX H0235 0B6A C0A1 MOV @INDEX(R1),R2 GET POINTER TO LINKS 0B6C C000 H0236 0B6E 0242 ANDI R2,LNKMSK REMOVE SUB PAGE BIT 0B70 FFFE H0237 0B72 C032 GNSP10 MOV *R2+,R0 GET NEXT ADR. H0238 0B74 C132 MOV *R2+,R4 GET SUB PAGE NO. H0239 0B76 80C4 C R4,R3 IS IT THE SUB PAGE REQUIRED? H0240 0B78 130D JEQ GNSP40 YES H0241 0B7A 1A04 JL GNSP20 IF LOWER, AVOID IT H0242 0B7C 8144 C R4,R5 HIGHER THAN NEXT HIGHEST FOUND? H0243 0B7E 1B02 JH GNSP20 YES H0244 0B80 C144 MOV R4,R5 SAVE AS BEST SO FAR H0245 0B82 C332 MOV *R2+,R12 SAVE RAM ADDRESS H0246 0B84 C080 GNSP20 MOV R0,R2 RESET TO NEXT LINK H0247 0B86 16F5 JNE GNSP10 IF MORE LINKS, LOOP H0248 0B88 C145 MOV R5,R5 CHECK IF GOOD BEST PAGE FOUND H0249 0B8A 1106 JLT GNSP50 IF NOT, RETURN TO CALLER H0250 0B8C C00C MOV R12,R0 SET UP RAM ADDRESS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0048 H0251 0B8E C0C5 MOV R5,R3 SET UP SUB PAGE NUMBER H0252 0B90 C2DB GNSP30 MOV *R11,R11 GET THE 'PAGE FOUND' ADDRESS H0253 0B92 045B RT AND GO THERE H0254 * H0255 * SUB PAGE REQUESTED FOUND H0256 * H0257 0B94 C012 GNSP40 MOV *R2,R0 GET THE RAM ADDRESS H0258 0B96 10FC JMP GNSP30 AND EXIT TO DISPLAY THE PAGE H0259 * H0260 * NO GOOD SUB PAGE FOUND H0261 * H0262 0B98 04C3 GNSP50 CLR R3 CLEAR THE SUB PAGE NO. H0263 0B9A 05CB INCT R11 BYPASS DATA STATEMENT H0264 0B9C 045B RT AND RETURN TO CALLER H0265 ************************************************************ H0266 * * H0267 * PREVIOUS PAGE KEY ROUTINES * H0268 * * H0269 ************************************************************ H0270 0B9E C060 KPREV MOV @PAGHEX,R1 GET THE PRESENT PAGE NO. 0BA0 F050 H0271 0BA2 0A11 SLA R1,1 WORD OFFSET H0272 0BA4 C0E0 MOV @SUBHEX,R3 GET SUB PAGE NO. 0BA6 F052 H0273 0BA8 1303 JEQ KPRV10 IF ZERO, NO SUB PAGES H0274 0BAA 06A0 BL @GETPSP GET THE PREVIOUS SUB PAGE 0BAC 0BFC H0275 0BAE 0A5E DATA SUBSCN WHERE TO GO IF AVAILABLE H0276 0BB0 0641 KPRV10 DECT R1 PREVIOUS PAGE H0277 0BB2 0281 CI R1,>799*2 CHECK IF WE WERE ON PAGE 800 0BB4 0F32 H0278 0BB6 1207 JLE KPRV20 NO, SKIP H0279 0BB8 23A0 COC @ENDFLG,R14 BEEN HERE BEFORE? 0BBA 0064 H0280 0BBC 13C5 JEQ KNXT30 YES, ABORT H0281 0BBE E3A0 SOC @ENDFLG,R14 0BC0 0064 H0282 0BC2 0201 LI R1,>799*2 Y, START AT END 0BC4 0F32 H0283 0BC6 C2E1 KPRV20 MOV @INDEX(R1),R11 GET THE ADR. (IF ANY) 0BC8 C000 H0284 0BCA 13F2 JEQ KPRV10 H0285 0BCC 0203 LI R3,>3F80 SET UP HIGHEST POSSIBLE +1 0BCE 3F80 H0286 0BD0 C08B MOV R11,R2 SAVE SUB PAGE FLAG H0287 0BD2 024B ANDI R11,LNKMSK REMOVE SUB PAGE FLAG 0BD4 FFFE H0288 0BD6 C02B MOV @4(R11),R0 GET PAGE/MAP ADR. 0BD8 0004 H0289 0BDA 20A0 COC @SUBFLG,R2 SUB PAGE INVOLVED? 0BDC 004E H0290 0BDE 1306 JEQ KPSPAG YES H0291 0BE0 C0EB MOV @2(R11),R3 SET UP SUB PAGE 0BE2 0002 H0292 0BE4 06A0 BL @SETRQP SET UP REQUEST, RETURN IF INVALID 0BE6 0C36 H0293 0BE8 0A5E DATA SUBSCN GO DISPLAY IF VALID NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0049 H0294 0BEA 10E2 JMP KPRV10 H0295 * H0296 0BEC 06A0 KPSPAG BL @SETRQP SET UP THE MAIN REQUEST 0BEE 0C36 H0297 0BF0 0BF4 DATA KPSP10 GO HERE IF VALID PAGE H0298 0BF2 10DE JMP KPRV10 IF INVALID, PREVIOUS MAIN PAGE H0299 * H0300 0BF4 06A0 KPSP10 BL @GETPSP GET THE HIGHEST AVAILABLE SUB PAGE 0BF6 0BFC H0301 0BF8 0A5E DATA SUBSCN IF FOUND, GO DISPLAY H0302 0BFA 10DA JMP KPRV10 IF NOT, PREVIOUS MAIN PAGE H0303 * H0304 * FIND THE PREVIOUS SUB PAGE, PRESENT SUB PAGE NO. IS IN R3 H0305 * THIS ROUTINE COULD BE COMBINED WITH THE ONE ABOVE BY THE H0306 * USE OF A FLAG TO INDICATE WHICH WAY THE ROUTINE HAS TO G H0307 * H0308 0BFC 0603 GETPSP DEC R3 NEXT SUB PAGE H0309 0BFE 1118 JLT GPSP50 IF NEGATIVE, NO MORE AVAILABLE H0310 0C00 0705 SETO R5 SET BEST PAGE TO MINIMUM H0311 0C02 C0A1 MOV @INDEX(R1),R2 GET POINTER TO LINKS 0C04 C000 H0312 0C06 0242 ANDI R2,LNKMSK REMOVE SUB PAGE FLAG 0C08 FFFE H0313 0C0A C032 GPSP10 MOV *R2+,R0 GET NEXT ADR. H0314 0C0C C132 MOV *R2+,R4 GET SUB PAGE NO. H0315 0C0E 80C4 C R4,R3 IS IT THE SUB PAGE REQUIRED? H0316 0C10 130D JEQ GPSP40 YES H0317 0C12 1B04 JH GPSP20 IF HIGHER, AVOID IT H0318 0C14 8144 C R4,R5 LOWER THAN NEXT LOWEST FOUND? H0319 0C16 1102 JLT GPSP20 YES H0320 0C18 C144 MOV R4,R5 SAVE AS BEST SO FAR H0321 0C1A C332 MOV *R2+,R12 SAVE RAM ADDRESS H0322 0C1C C080 GPSP20 MOV R0,R2 RESET TO NEXT LINK H0323 0C1E 16F5 JNE GPSP10 IF MORE LINKS, LOOP H0324 0C20 C145 MOV R5,R5 CHECK IF GOOD BEST PAGE FOUND H0325 0C22 1106 JLT GPSP50 IF NOT, RETURN TO CALLER H0326 0C24 C00C MOV R12,R0 SET UP RAM ADDRESS H0327 0C26 C0C5 MOV R5,R3 SET UP SUB PAGE NUMBER H0328 0C28 C2DB GPSP30 MOV *R11,R11 GET THE 'PAGE FOUND' ADDRESS H0329 0C2A 045B RT AND GO THERE H0330 * H0331 * SUB PAGE REQUESTED FOUND H0332 * H0333 0C2C C012 GPSP40 MOV *R2,R0 GET THE RAM ADDRESS H0334 0C2E 10FC JMP GPSP30 AND EXIT TO DISPLAY THE PAGE H0335 * H0336 * NO GOOD SUB PAGE FOUND H0337 * H0338 0C30 04C3 GPSP50 CLR R3 SET NO SUB PAGE H0339 0C32 05CB INCT R11 BYPASS DATA STATEMENT H0340 0C34 045B RT AND RETURN TO CALLER H0341 ************************************************************ H0342 * * H0343 * COMMON SUBROUTINE FOR NEXT & PREVIOUS KEYS * H0344 * * H0345 ************************************************************ H0346 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0050 H0347 * IF VALID PAGE, EXIT VIA DATA STATEMENT H0348 * IF INVALID, RETURN VIA R11+2 H0349 * H0350 0C36 C081 SETRQP MOV R1,R2 COPY H0351 0C38 0912 SRL R2,1 ABSOLUTE PAGE NO. H0352 0C3A C802 MOV R2,@PAGHEX RESET PAGE NUMBER 0C3C F050 H0353 0C3E 0242 ANDI R2,>00FF REMOVE MAGAZINE 0C40 00FF H0354 0C42 0A42 SLA R2,4 ALIGN PAGE TENS H0355 0C44 9802 CB R2,@BYTE09 DECIMAL? 0C46 007B H0356 0C48 1B06 JH SRQPXT NO, NEXT PAGE H0357 0C4A 9820 CB @R2LSB,@BYTE90 DECIMAL? 0C4C F005 0C4E 0086 H0358 0C50 1B02 JH SRQPXT NO, NEXT PAGE H0359 0C52 C2DB MOV *R11,R11 GET THE PLACE TO GO H0360 0C54 045B RT AND GO THERE H0361 * H0362 0C56 05CB SRQPXT INCT R11 BYPASS DATA STATEMENT H0363 0C58 045B RT AND RETURN TO CALLER H0364 * H0365 ************************************************************ H0366 * * H0367 * DEAL WITH THE COLOURED FLOF KEYS (INCLUDING INDEX) * H0368 * * H0369 ************************************************************ H0370 0C5A 0911 KFLOF SRL R1,1 RE-ALIGN H0371 0C5C 0221 AI R1,->12 REMOVE CODE OFFSET 0C5E FFEE H0372 0C60 C081 MOV R1,R2 H0373 0C62 C0C1 MOV R1,R3 SAVE FOR INDEX KEY CHECK H0374 0C64 0201 LI R1,40*25+1 POINT TO FIRST BYTE IN PACKET 2 0C66 03E9 H0375 0C68 A060 A @DISADR,R1 ADD THE ADDRESS IN MAIN STORE 0C6A F04E H0376 0C6C 0602 KFLF10 DEC R2 DEC THE KEY NO. H0377 0C6E 1303 JEQ KFLF20 IF ZERO, WE HAVE THE START ADR. H0378 0C70 0221 AI R1,6 NEXT LINK START ADR. 0C72 0006 H0379 0C74 10FB JMP KFLF10 LOOP H0380 * H0381 0C76 D820 KFLF20 MOVB @DISMAP,@MAPPER SET UP MAPPER PAGE 0C78 F054 0C7A FC00 H0382 0C7C 0700 SETO R0 RELATIVE MAGAZINE H0383 0C7E 0420 BLWP @GETPGN GET PAGE NO. TO R0 0C80 20CA H0384 0C82 0CD0 DATA CHKIDX IF ERROR, CHECK FOR INDEX KEY H0385 0C84 C100 MOV R0,R4 SAVE PAGE NUMBER H0386 0C86 0A14 SLA R4,1 H0387 0C88 C0A4 MOV @INDEX(R4),R2 GET POINTER TO LINKS 0C8A C000 H0388 0C8C 0242 ANDI R2,LNKMSK REMOVE SUB PAGE BIT 0C8E FFFE H0389 0C90 1319 JEQ KFSP50 IF NO PAGE AVAILABLE, JUMP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0051 H0390 * H0391 0C92 0420 BLWP @GETSPN GET SUB PAGE NUMBER TO R0 MSB 0C94 211A H0392 0C96 0980 SRL R0,8 TO LSB H0393 0C98 C0C0 MOV R0,R3 COPY SUB PAGE NUMBER H0394 0C9A C044 MOV R4,R1 SAVE PAGE NUMBER INDEX H0395 0C9C 0914 SRL R4,1 RE-ALIGN H0396 0C9E C804 MOV R4,@PAGHEX SET UP PAGE REQUEST 0CA0 F050 H0397 0CA2 04E0 CLR @MAPPER 0CA4 FC00 H0398 0CA6 0283 CI R3,>7F IRRELEVANT SUB PAGE? 0CA8 007F H0399 0CAA 1307 JEQ KFSP30 YES, GET FIRST SUB PAGE AVAILABLE H0400 * H0401 * GET AND DISPLAY THE REQUESTED SUB PAGE IF POSSIBLE H0402 * H0403 0CAC C032 KFSP10 MOV *R2+,R0 GET NEXT ADR. H0404 0CAE 80F2 C *R2+,R3 IS THIS THE SUB PAGE REQUIRED? H0405 0CB0 1306 JEQ KFSP40 YES H0406 0CB2 C080 MOV R0,R2 RESET TO NEXT LINK H0407 0CB4 16FB JNE KFSP10 IF MORE LINKS, LOOP H0408 0CB6 E1A0 SOC @NOPAGE,R6 PAGE NO. IN MAGENTA 0CB8 006C H0409 0CBA 0460 KFSP30 B @KDGT20 AND GO DISPLAY NEW PAGE REQUEST 0CBC 0A40 H0410 * H0411 0CBE C012 KFSP40 MOV *R2,R0 GET THE RAM ADDRESS H0412 0CC0 0460 B @SUBSCN AND EXIT TO DISPLAY THE PAGE 0CC2 0A5E H0413 * H0414 0CC4 06A0 KFSP50 BL @TXTSCN 0CC6 12E8 H0415 0CC8 00 BYTE 0,8 ROW 0, COL 8 H0416 0CCA 0945 DATA LNKNOT 'LINK NOT AVAILABLE' H0417 0CCC 0460 B @DSPNLK AND EXIT 0CCE 0A82 H0418 * H0419 * GET PAGE NO. FAILURE, CHECK FOR INDEX KEY H0420 * H0421 0CD0 0283 CHKIDX CI R3,6 INDEX KEY PRESSED? 0CD2 0006 H0422 0CD4 160C JNE CHKIXT NO, EXIT H0423 0CD6 C060 MOV @PAG830,R1 GET DEFAULT PAGE 0CD8 D050 H0424 0CDA A041 A R1,R1 WORD ALIGN H0425 0CDC C0A1 MOV @INDEX(R1),R2 GET LINK 0CDE C000 H0426 0CE0 1306 JEQ CHKIXT IF NONE, ABORT H0427 0CE2 C820 MOV @PAG830,@PAGHEX TRANSFER THE PAGE NUMBER 0CE4 D050 0CE6 F050 H0428 0CE8 04E0 CLR @MAPPER 0CEA FC00 H0429 0CEC 10E6 JMP KFSP30 DISPLAY FIRST SUB PAGE AVAILABLE H0430 * H0431 0CEE 0460 CHKIXT B @KEXIT1 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 TMS9995 INSTANT TELETEXT PAGE 0052 0CF0 0AB2 H0432 0CF2 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0053 0038 COPY KEY2.990 I0001 ************************************************************ I0002 * * I0003 * DEAL WITH THE PAGE DUMP KEY FUNCTION * I0004 * * I0005 * AUTHOR: COLIN HINSON * I0006 ************************************************************ I0007 0CF2 02E0 DUMPKY LWPI INT1WS INTERRUPT WORKSPACE 0CF4 F0DA I0008 0CF6 0300 LIMI 0 KILL INTERRUPTS 0CF8 0000 I0009 0CFA 22E0 COC @BEMPTY,R11I IS THE BUFFER EMPTY? 0CFC 0050 I0010 0CFE 167A JNE DMPABT NO, ABORT I0011 0D00 42E0 SZC @BEMPTY,R11I SET BUFFER NOT EMPTY 0D02 0050 I0012 0D04 22E0 COC @TXHALT,R11I IS TRANSMISSION HALTED? 0D06 004E I0013 0D08 1301 JEQ DUMP10 YES I0014 0D0A 1D13 SBO XBIENB ALLOW TRANSMIT INTERRUPTS I0015 0D0C 02E0 DUMP10 LWPI WSP BACK TO NORMAL WORKSPACE 0D0E F000 I0016 0D10 C060 MOV @DISADR,R1 GET START OF DISPLAY 0D12 F04E I0017 0D14 1379 JEQ DMPXLK IF NOT AVAILABLE, ABORT I0018 * I0019 0D16 D820 MOVB @DISMAP,@MAPPER SET UP CORRECT PAGE 0D18 F054 0D1A FC00 I0020 0D1C 0202 LI R2,PRNTBF POINT TO START OF BUFFER 0D1E D0A0 I0021 0D20 C802 MOV R2,@INT1WS+R9I+R9I SET UP START POINTER FOR TX 0D22 F0EC I0022 0D24 0203 LI R3,MSG1 POINT TO MESSAGE 0D26 0E0A I0023 0D28 D033 DUMP02 MOVB *R3+,R0 GET A BYTE I0024 0D2A 1302 JEQ DUMP04 IF ZERO, END OF MESSAGE I0025 0D2C DC80 MOVB R0,*R2+ BYTE TO BUFFER I0026 0D2E 10FC JMP DUMP02 I0027 * I0028 0D30 04C4 DUMP04 CLR R4 CLEAR SUB PAGE FLAG I0029 0D32 0203 LI R3,3 3 BYTES OF PAGE NUMBER 0D34 0003 I0030 0D36 C020 MOV @PAGHEX,R0 GET THE PAGE NUMBER 0D38 F050 I0031 0D3A 0240 DUMP06 ANDI R0,>0FFF REMOVE SURPLUS DATA 0D3C 0FFF I0032 0D3E 0220 AI R0,>3000 ADD ASCII 0D40 3000 I0033 0D42 DC80 DUMP08 MOVB R0,*R2+ BYTE TO PRINT BUFFER I0034 0D44 0603 DEC R3 UPDATE NIBBLE COUNT I0035 0D46 1302 JEQ DUMP12 I0036 0D48 0A40 SLA R0,4 ALIGN NEXT NIBBLE I0037 0D4A 10F7 JMP DUMP06 AND LOOP BACK I0038 * I0039 0D4C C104 DUMP12 MOV R4,R4 DONE SUB PAGE? I0040 0D4E 1609 JNE DUMP17 YES, SKIP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0054 I0041 0D50 0704 SETO R4 SET SUB PAGE FLAG I0042 0D52 DCA0 MOVB @TEXTS,*R2+ SEND 'S' 0D54 0092 I0043 0D56 C020 MOV @SUBHEX,R0 GET SUB PAGE NO. 0D58 F052 I0044 0D5A 0A40 SLA R0,4 ALIGN I0045 0D5C 0203 LI R3,2 TWO NIBBLES TO SEND 0D5E 0002 I0046 0D60 10EC JMP DUMP06 I0047 * I0048 0D62 DCA0 DUMP17 MOVB @BYTE0D,*R2+ END OF MESSAGE 0D64 007E I0049 0D66 04C5 CLR R5 HALF ROW COUNTER I0050 * I0051 * SEND THE ROW NUMBER I0052 * I0053 0D68 0203 DUMP20 LI R3,MSG3 POINT TO MESSAGE 0D6A 0E42 I0054 0D6C D033 DUMP22 MOVB *R3+,R0 GET A BYTE I0055 0D6E 1302 JEQ DUMP24 SKIP IF END I0056 0D70 DC80 MOVB R0,*R2+ SEND TO BUFFER I0057 0D72 10FC JMP DUMP22 I0058 * I0059 0D74 C205 DUMP24 MOV R5,R8 GET HALF ROW NUMBER I0060 0D76 0918 SRL R8,1 REMOVE LSB I0061 0D78 04C7 CLR R7 I0062 0D7A 3DE0 DIV @TEN,R7 0D7C 0044 I0063 0D7E 06C7 SWPB R7 I0064 0D80 0227 AI R7,>3000 0D82 3000 I0065 0D84 DC87 MOVB R7,*R2+ I0066 0D86 06C8 SWPB R8 I0067 0D88 0228 AI R8,>3000 0D8A 3000 I0068 0D8C DC88 MOVB R8,*R2+ I0069 0D8E DCA0 MOVB @BYTE0D,*R2+ SEND ANOTHER CARRIAGE RETURN 0D90 007E I0070 * I0071 0D92 0204 DUMP29 LI R4,20 LOAD HALF A ROW OF BYTES 0D94 0014 I0072 * I0073 0D96 0203 DUMP30 LI R3,2 2 NIBBLES PER BYTE 0D98 0002 I0074 0D9A D031 MOVB *R1+,R0 GET A BYTE I0075 0D9C 0940 SRL R0,4 SAVE LS NIBBLE IN LS BYTE I0076 0D9E 0220 DUMP40 AI R0,>3000 ADD ASCII 0DA0 3000 I0077 0DA2 0280 CI R0,>3A00 CHECK FOR .GT. 9 0DA4 3A00 I0078 0DA6 1A02 JL DUMP50 I0079 0DA8 0220 AI R0,>700 ADD ALPHA OFFSET 0DAA 0700 I0080 0DAC DC80 DUMP50 MOVB R0,*R2+ BYTE TO PRINT BUFFER I0081 0DAE 0603 DEC R3 UPDATE NIBBLE COUNT I0082 0DB0 1304 JEQ DUMP60 IF ZERO, RESET FOR NEXT BYTE I0083 0DB2 0A40 SLA R0,4 ALIGN LS NIBBLE IN MS BYTE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0055 I0084 0DB4 0240 ANDI R0,>0F00 REMOVE OTHER DATA 0DB6 0F00 I0085 0DB8 10F2 JMP DUMP40 I0086 * I0087 0DBA 0604 DUMP60 DEC R4 UPDATE HALF ROW BYTE COUNTER I0088 0DBC 1303 JEQ DUMP70 I0089 0DBE DCA0 MOVB @BYTE20,*R2+ SPACE TO BUFFER 0DC0 0068 I0090 0DC2 10E9 JMP DUMP30 GET NEXT BYTE I0091 * I0092 0DC4 DCA0 DUMP70 MOVB @BYTE0D,*R2+ SEND CARRIAGE RETURN 0DC6 007E I0093 0DC8 0585 INC R5 UPDATE ROW COUNTER I0094 0DCA 0285 CI R5,50 DONE ROW 24? 0DCC 0032 I0095 0DCE 1A06 JL DUMP75 NO, SKIP I0096 0DD0 1602 JNE DUMP73 NO, SKIP I0097 0DD2 0225 AI R5,4 YES, NEXT ROW IS 27 0DD4 0004 I0098 0DD6 0285 DUMP73 CI R5,56 FINISHED FOR 27? 0DD8 0038 I0099 0DDA 1404 JHE DUMP80 YES, EXIT I0100 0DDC 2560 DUMP75 CZC @WD0001,R5 EVEN ROW? 0DDE 004E I0101 0DE0 16D8 JNE DUMP29 NO, LOOP BACK I0102 0DE2 10C2 JMP DUMP20 YES, SEND ROW NUMBER I0103 * I0104 0DE4 0201 DUMP80 LI R1,MSG2 POINT TO END MESSAGE 0DE6 0E21 I0105 0DE8 DCB1 DUMP85 MOVB *R1+,*R2+ BYTE TO BUFFER I0106 0DEA 16FE JNE DUMP85 LOOP TO END OF MSG I0107 0DEC 0602 DEC R2 BACK OFF ONE I0108 * I0109 0DEE C802 DUMP90 MOV R2,@INT1WS+R8I+R8I SAVE BUFFER END ADDRESS FOR T 0DF0 F0EA I0110 0DF2 1008 JMP DMPXIT I0111 * I0112 0DF4 02E0 DMPABT LWPI WSP NORMAL WORKSPACE 0DF6 F000 I0113 0DF8 E3A0 SOC @NOHDR,R14 ALLOW NO HEADERS 0DFA 004E I0114 0DFC 06A0 BL @TXTSCN 0DFE 12E8 I0115 0E00 00 BYTE 0,8 ROW 0, COL 9 I0116 0E02 0E31 DATA BUFNOT 'BUFFER NOT READY' I0117 0E04 0300 DMPXIT LIMI MAXINT 0E06 0001 I0118 0E08 103A DMPXLK JMP KEXIT2 AND EXIT I0119 0E0A I0120 0E0A 1B MSG1 BYTE >1B,'0' I0121 0E0C 52 TEXT 'REC OPE=START FILE=P' I0122 0E20 00 BYTE 0 I0123 0E21 1B MSG2 BYTE >1B,'0' I0124 0E23 52 TEXT 'REC OPE=STOP' I0125 0E2F 0D BYTE >0D,0 I0126 0E31 42 BUFNOT TEXT 'BUFFER NOT READY' I0127 0E41 00 BYTE 0 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0056 I0128 0E42 2A MSG3 TEXT '* ROW ' I0129 0E49 00 BYTE 0 I0130 ************************************************************ I0131 * * I0132 * DEAL WITH THE REVEAL KEY FUNCTION * I0133 * * I0134 ************************************************************ I0135 0E4A D820 KREVL MOVB @CM2,@VDPREG POINT TO CM2 IN VDP 0E4C 0078 0E4E F800 I0136 0E50 D020 MOVB @CM2DTA,R0 GET THE DATA 0E52 D097 I0137 0E54 2820 XOR @CNCEAL,R0 FLIP THE BIT 0E56 0068 I0138 0E58 D800 MOVB R0,@CM2DTA SET UP CONCEAL BIT IN DATA 0E5A D097 I0139 0E5C D800 MOVB R0,@VDPREG SEND THE NEW DATA 0E5E F800 I0140 0E60 100E JMP KEXIT2 I0141 ************************************************************ I0142 * * I0143 * CLEAR THE DISPLAYED PAGE * I0144 * * I0145 ************************************************************ I0146 0E62 D820 CLRKEY MOVB @DISMAP,@MAPPER SET UP MAPPER LATCH 0E64 F054 0E66 FC00 I0147 0E68 C060 MOV @DISADR,R1 GET RAM START ADR 0E6A F04E I0148 0E6C 0200 LI R0,' ' SET UP SPACES 0E6E 2020 I0149 0E70 0202 LI R2,PAGSIZ/2 COMPUTE LENGTH 0E72 0220 I0150 0E74 CC40 CLRK10 MOV R0,*R1+ I0151 0E76 0602 DEC R2 I0152 0E78 16FD JNE CLRK10 I0153 0E7A 06A0 BL @RWPAGE RE-WRITE THE PAGE 0E7C 1AD0 I0154 0E7E 0460 KEXIT2 B @KEXIT1 AND RETURN TO CALLER 0E80 0AB2 I0155 ************************************************************ I0156 * * I0157 * RESET THE SYSTEM * I0158 * * I0159 ************************************************************ I0160 0E82 05A0 RSETKY INC @RSTCNT 0E84 D04A I0161 0E86 8820 C @RSTCNT,@WD0004 PRESSED FOUR TIMES? 0E88 D04A 0E8A 0052 I0162 0E8C 16F8 JNE KEXIT2 NO, EXIT I0163 0E8E 04E0 CLR @RSTCNT 0E90 D04A I0164 0E92 0420 BLWP @0 DO A RESET 0E94 0000 I0165 ************************************************************ I0166 * * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0057 I0167 * DELETE A PAGE FROM THE LINKED ADDRESS CHAIN. * I0168 * * I0169 ************************************************************ I0170 0E96 C060 DLTKEY MOV @PAGHEX,R1 GET DISPLAYED PAGE NO. 0E98 F050 I0171 0E9A 0A11 SLA R1,1 WORD ALIGN I0172 0E9C C0A1 MOV @INDEX(R1),R2 GET THE LINK ADDRESS 0E9E C000 I0173 0EA0 C142 MOV R2,R5 SAVE I0174 0EA2 0242 ANDI R2,LNKMSK REMOVE ALLOC. BIT 0EA4 FFFE I0175 0EA6 13EB JEQ KEXIT2 IF ZERO, EXIT (NO PAGE) I0176 0EA8 C102 MOV R2,R4 R4 CONTAINS POINTER TO 1ST LINK I0177 0EAA C0D2 MOV *R2,R3 ANY MORE LINKS? I0178 0EAC 1304 JEQ DELT03 NO, REMOVE REFS TO THIS ONE I0179 0EAE 8822 C @2(R2),@SUBHEX SAME SUB PAGE? 0EB0 0002 0EB2 F052 I0180 0EB4 161C JNE DELT20 NO, JUMP I0181 * I0182 * THE INDEX(R1) IS POINTING TO THE CORRECT SUB PAGE. I0183 * THE POINTER TO THE NEXT LINK NEEDS TO GO IN THE INDEX(R1) I0184 * R2 (& R4) ARE POINTING TO THE 'LINK' WHICH NEEDS TO BE I0185 * DELETED, AND THE PAGE STORE RAM FOR IT NEEDS TO BE I0186 * CLEARED. THE LINK POINTER (R15) WILL BE PUT INTO THIS I0187 * LINK, AND R2 (R4) TRANSFERRED TO R15 BY THE CLEAR PAGE I0188 * PART OF THIS ROUTINE. THIS LINK'S LINK POINTER NEEDS TO I0189 * BE CLEARED SO THAT THE CLEAR PAGE ROUTINE ONLY CLEARS I0190 * THIS ONE PAGE. I0191 * I0192 0EB6 C843 DELT03 MOV R3,@INDEX(R1) POINT INDEX TO NEXT LINK 0EB8 C000 I0193 0EBA 160A JNE DELT04 IF MORE PAGES, JUMP I0194 0EBC D2E0 MOVB @PAGHEX,R11 GET MAG NO. 0EBE F050 I0195 0EC0 0A1B SLA R11,1 WORD ALIGN I0196 0EC2 982B CB @MAGPAG(R11),@PAGHEX+1 SAME PAGE AS RX? 0EC4 D022 0EC6 F051 I0197 0EC8 1607 JNE DELT05 NO, SKIP I0198 0ECA 072B SETO @MAGPAG(R11) INVALIDATE MAGAZINE 0ECC D022 I0199 0ECE 1004 JMP DELT05 I0200 * I0201 0ED0 0245 DELT04 ANDI R5,1 LEAVE ALLOCATION BIT 0ED2 0001 I0202 0ED4 E845 SOC R5,@INDEX(R1) SET UP NEW ALLOCATION BIT 0ED6 C000 I0203 0ED8 04D2 DELT05 CLR *R2 CLEAR THE LINK I0204 0EDA 06A0 BL @DLT100 CLEAR THE PAGE ETC 0EDC 0F62 I0205 0EDE 0460 B @KNEXT DISPLAY THE NEXT AVAILABLE PAGE. 0EE0 0B02 I0206 * I0207 * WE NEED TO FIND THE LINK WHICH REFERS TO THE DISPLAYED I0208 * SUB PAGE, AND PUT THAT IN THE INDEX. THE DATA AT PRESENT I0209 * IN THE INDEX (& R4) NEEDS TO GO IN R15 AS THE START OF THE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0058 I0210 * FREE RAM LINK POINTER. I0211 * I0212 0EE2 8822 DELT10 C @2(R2),@SUBHEX SAME SUB PAGE? 0EE4 0002 0EE6 F052 I0213 0EE8 1305 JEQ DELT30 YES I0214 0EEA C0D2 MOV *R2,R3 GET NEXT LINK I0215 0EEC 1306 JEQ DELT50 IF ZERO, NO MORE LINKS I0216 0EEE C142 DELT20 MOV R2,R5 SAVE LAST POINTER I0217 0EF0 C083 MOV R3,R2 RESET LINK POINTER I0218 0EF2 10F7 JMP DELT10 AND LOOP BACK I0219 * I0220 * FOUND THE SUB PAGE LINK. WE NOW NEED TO POINT THE I0221 * PREVIOUS LINK (*R5) TO THE FOLLOWING LINK (IF THERE IS I0222 * ONE), AND POINT R4 AT THE CURRENT LINK (R2 HOLDS I0223 * THIS POINTER). THEN CLEAR THE PAGE AND FIX THE LINKS. I0224 * I0225 0EF4 C0D2 DELT30 MOV *R2,R3 GET NEXT LINK POINTER I0226 0EF6 1601 JNE DELT50 IF NOT ZERO, MORE LINKS I0227 0EF8 04C3 CLR R3 SET 'NO MORE LINKS' IN R3 DATA I0228 0EFA C102 DELT50 MOV R2,R4 COPY FOR CLEAR PAGE ROUTINE I0229 0EFC C543 MOV R3,*R5 POINT PREVIOUS LK TO NEXT LINK I0230 0EFE 10EC JMP DELT05 GO CLEAR THE PAGE ETC. I0231 ************************************************************ I0232 * * I0233 * DE-ALLOCATE/ALLOCATE SUB PAGES KEY * I0234 * * I0235 ************************************************************ I0236 0F00 C060 ALOCKY MOV @PAGHEX,R1 GET PAGE NUMBER 0F02 F050 I0237 0F04 0A11 SLA R1,1 WORD ALIGN I0238 0F06 C0A1 MOV @INDEX(R1),R2 PAGE EXISTS? 0F08 C000 I0239 0F0A 13B9 JEQ KEXIT2 NO, ABORT I0240 0F0C 20A0 COC @SUBFLG,R2 PAGES ALLOCATED? 0F0E 004E I0241 0F10 1306 JEQ DEAL5 YES, DE-ALLOCATE THEM I0242 0F12 E860 SOC @SUBFLG,@INDEX(R1) SET UP ALLOCATION BIT 0F14 004E 0F16 C000 I0243 0F18 06A0 BL @DISPN RE-WRITE THE PAGE NUMBER 0F1A 22E6 I0244 0F1C 10B0 JMP KEXIT2 YES, EXIT I0245 ************************************************************ I0246 * * I0247 * DE-ALLOCATE THE SUB PAGES OF DISPLAYED PAGE * I0248 * ANY DE-ALLOCATED PAGES NEED TO BE CLEARED. * I0249 * * I0250 ************************************************************ I0251 0F1E 4860 DEAL5 SZC @SUBFLG,@INDEX(R1) CLEAR SUB PAGE FLAG 0F20 004E 0F22 C000 I0252 0F24 C0D2 MOV *R2,R3 ANY MORE LINKS? I0253 0F26 131A JEQ DEAL99 NO, EXIT I0254 0F28 C102 MOV R2,R4 R4 CONTAINS POINTER TO 1ST LINK I0255 0F2A 8822 C @2(R2),@SUBHEX SAME SUB PAGE? 0F2C 0002 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0059 0F2E F052 I0256 0F30 1607 JNE DEAL20 NO, JUMP I0257 * I0258 * THE INDEX(R1) IS POINTING TO THE CORRECT SUB PAGE. WE NEED I0259 * TO PUT THE POINTER TO THE NEXT LINK IN R4 SO THAT THE I0260 * REMAINING SUB PAGES ARE CLEARED BY THE CLEAR PAGE PART I0261 * OF THIS ROUTINE, AND THE LINK POINTER (R15) IS LEFT CORRE I0262 * THE LINK ADDRESS NEEDS TO BE CLEARED IN THIS LINK. I0263 * I0264 0F32 C103 MOV R3,R4 POINT R4 TO NEXT LINK I0265 0F34 04D2 CLR *R2 CLEAR THE LINK I0266 0F36 1010 JMP DEAL60 I0267 * I0268 * WE NEED TO FIND THE LINK WHICH REFERS TO THE DISPLAYED I0269 * SUB PAGE, AND PUT THAT IN THE INDEX. THE DATA AT PRESENT I0270 * IN THE INDEX (& R4) NEEDS TO GO IN R15 AS THE START OF THE I0271 * FREE RAM LINK POINTER. I0272 * I0273 0F38 8822 DEAL10 C @2(R2),@SUBHEX SAME SUB PAGE? 0F3A 0002 0F3C F052 I0274 0F3E 1305 JEQ DEAL30 YES I0275 0F40 C0D2 DEAL20 MOV *R2,R3 GET NEXT LINK I0276 0F42 1307 JEQ DEAL50 IF ZERO, NO MORE LINKS I0277 0F44 C142 MOV R2,R5 SAVE LAST POINTER I0278 0F46 C083 MOV R3,R2 RESET LINK POINTER I0279 0F48 10F7 JMP DEAL10 AND LOOP BACK I0280 * I0281 * FOUND THE SUB PAGE LINK. WE NOW NEED TO POINT THE I0282 * PREVIOUS LINK (*R5) TO THE FOLLOWING LINK (IF THERE IS I0283 * ONE), AND POINT THE INDEX AT THE CURRENT LINK (R2 HOLDS I0284 * THIS POINTER). THE DATA IN INDEX(R1) IS STILL IN R4 I0285 * I0286 0F4A C0D2 DEAL30 MOV *R2,R3 GET NEXT LINK POINTER I0287 0F4C 1601 JNE DEAL40 IF NOT ZERO, MORE LINKS I0288 0F4E 04C3 CLR R3 SET 'NO MORE LINKS' IN R3 DATA I0289 0F50 04D2 DEAL40 CLR *R2 NO MORE LINKS FROM THIS SUB PAGE I0290 0F52 C842 DEAL50 MOV R2,@INDEX(R1) POINT INDEX TO THIS SUB PAGE L 0F54 C000 I0291 0F56 C543 MOV R3,*R5 POINT PREVIOUS LK TO NEXT LINK I0292 0F58 06A0 DEAL60 BL @DLT100 DELETE THE CHAIN OF LINKED PAGES 0F5A 0F62 I0293 0F5C 06A0 DEAL99 BL @DISPN DISPLAY THE NEW PAGE NO. 0F5E 22E6 I0294 0F60 108E JMP KEXIT2 I0295 * I0296 * WE NOW HAVE A CHAIN OF LINKS CONTAINING ALL THE DE-ALLOCAT I0297 * SUB PAGES. THE START OF THE CHAIN IS POINTED TO BY R4. I0298 * WE NEED TO RESET THE LINK POINTER (R15) TO THE DATA I0299 * NOW IN R4, BUT FIRST WE NEED TO PUT R15 DATA IN THE I0300 * LAST (ZERO) LINK IN ORDER TO MAINTAIN THE LINKS. I0301 * I0302 0F62 CE8B DLT100 MOV R11,*R10+ SAVE RETURN I0303 0F64 C084 MOV R4,R2 GET POINTER TO START OF LINK CHAIN I0304 * I0305 0F66 C022 DEAL70 MOV @4(R2),R0 GET THE MAP/PAGE ADDRESS 0F68 0004 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0060 I0306 0F6A C040 MOV R0,R1 COPY I0307 0F6C 0240 ANDI R0,PAGMSK LEAVE THE PAGE ADR. 0F6E FFC0 I0308 0F70 0241 ANDI R1,MAPMSK LEAVE THE MAP NO. 0F72 003F I0309 0F74 D820 MOVB @R1LSB,@MAPPER SET UP MAPPER 0F76 F003 0F78 FC00 I0310 0F7A 0201 LI R1,' ' SET UP SPACES TO CLEAR PAGE 0F7C 2020 I0311 0F7E C0C0 MOV R0,R3 GET ADR. I0312 0F80 0223 AI R3,PAGSIZ COMPUTE END OF PAGE 0F82 0440 I0313 0F84 CC01 DEAL80 MOV R1,*R0+ CLEAR TWO BYTES I0314 0F86 80C0 C R0,R3 CHECK FOR END I0315 0F88 1AFD JL DEAL80 LOOP TILL DONE I0316 0F8A 0620 DEC @PAGCNT COUNT THE PAGE 0F8C D000 I0317 0F8E E3A0 SOC @PAGCHG,R14 SET 'QTY CHANGE' FLAG 0F90 0050 I0318 0F92 04E0 CLR @MAPPER RESET TO PAGE 0 0F94 FC00 I0319 0F96 04E2 CLR @2(R2) ENSURE SUB PAGE DATA = 0 0F98 0002 I0320 0F9A C0D2 MOV *R2,R3 GET NEXT LINK I0321 0F9C 1302 JEQ DEAL90 IF ZERO, NO MORE LINKS I0322 0F9E C083 MOV R3,R2 RESET LINK POINTER I0323 0FA0 10E2 JMP DEAL70 AND LOOP BACK I0324 * I0325 0FA2 C48F DEAL90 MOV R15,*R2 SET UP END OF CHAIN LINK I0326 0FA4 C3C4 MOV R4,R15 SET UP NEW FREE POINTER I0327 0FA6 1042 JMP KEXIT3 RETURN TO CALLER I0328 * I0329 ************************************************************ I0330 * * I0331 * THE DATACAST KEY TOGGLES THE DCAST FLAG. * I0332 * WHEN THE FLAG IS SET, TELETEXT IS NOT DISPLAYED, ONLY * I0333 * DATACAST, AND VICE-VERSA. * I0334 * NOTE: ALL FUNCTION KEYS CAN COME HERE. * I0335 * * I0336 ************************************************************ I0337 ** ASMIF BBC2 ##################################### I0338 0FA8 0281 CHANKY CI R1,>1C IS IT THE DATACAST KEY 0FAA 001C I0339 0FAC 163F JNE KEXIT3 NO, ABORT I0340 0FAE 29A0 DCSTKY XOR @DCAST,R6 INVERT THE FLAG 0FB0 0058 I0341 0FB2 21A0 COC @DCAST,R6 IS IT SET? 0FB4 0058 I0342 0FB6 1615 JNE DCST10 NO, RE-WRITE THE PAGE I0343 0FB8 D820 MOVB @BYTEFF,@CHANEL KILL THE CHANNEL 0FBA 008D 0FBC D09A I0344 0FBE 06A0 BL @CLRCTR CLEAR THE MIDDLE OF THE SCREEN 0FC0 2232 I0345 0FC2 D820 MOVB @BYTE01,@P31ROW RESET TO TOP ROW 0FC4 005E NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0061 0FC6 D09D I0346 0FC8 06A0 BL @TXTSCN 0FCA 12E8 I0347 0FCC 0C BYTE 12,12 ROW 12, COL 12 I0348 0FCE 0FFC DATA DCTMSG 'CHANNEL NUMBER?' I0349 0FD0 0200 LI R0,CHANKY POINT TO DATA CAST KEY ROUTINE 0FD2 0FA8 I0350 0FD4 C800 MOV R0,@SPECBR SEND ALL FUNCTION KEYS THERE 0FD6 D056 I0351 0FD8 0200 LI R0,DCTNUM POINT TO CHANNEL ROUTINES 0FDA 0FF0 I0352 0FDC C800 MOV R0,@DGKBRA AND SEND DIGIT KEYS THERE. 0FDE D054 I0353 0FE0 1025 JMP KEXIT3 AND EXIT I0354 * I0355 0FE2 06A0 DCST10 BL @RWPAGE RE-WRITE THE PAGE TO THE SCREEN 0FE4 1AD0 I0356 0FE6 04E0 DCST20 CLR @SPECBR ALLOW PROPER KEY FUNCTIONS 0FE8 D056 I0357 0FEA 04E0 CLR @DGKBRA 0FEC D054 I0358 0FEE 101E JMP KEXIT3 I0359 * I0360 0FF0 D820 DCTNUM MOVB @R1LSB,@CHANEL INSTALL THE CHANNEL NUMBER 0FF2 F003 0FF4 D09A I0361 0FF6 06A0 BL @CLRDIS CLEAR THE DISPLAY 0FF8 2238 I0362 0FFA 10F5 JMP DCST20 ALLOW KEYS AGAIN I0363 * I0364 0FFC 0D DCTMSG BYTE >0D I0365 0FFD 41 TEXT 'ADDRESS NUMBER?' I0366 100C 00 BYTE 0 I0367 * I0368 * ASMELSE ######################################## I0369 *CHANKY EQU $ I0370 *DCSTKY JMP KEXIT3 I0371 * ASMEND ######################################## I0372 * I0373 ************************************************************ I0374 * * I0375 * LEVEL 2 ENABLE KEY * I0376 * * I0377 ************************************************************ I0378 100E D020 LEV2KY MOVB @CM2DTA,R0 GET CM2 DATA 1010 D097 I0379 1012 2820 XOR @WD0200,R0 1014 0060 I0380 1016 D800 MOVB R0,@CM2DTA 1018 D097 I0381 101A D820 MOVB @CM2,@VDPREG POINT TO CM2 REG. 101C 0078 101E F800 I0382 1020 D800 MOVB R0,@VDPREG SEND TO VDP 1022 F800 I0383 1024 29A0 XOR @LEVEL2,R6 1026 0064 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0062 I0384 1028 06A0 BL @RWPAGE REWRITE THE PAGE 102A 1AD0 I0385 102C 0460 KEXIT3 B @KEXIT1 102E 0AB2 I0386 ************************************************************ I0387 * * I0388 * DISPLAY THE PAGE QUANTITY * I0389 * * I0390 ************************************************************ I0391 1030 23A0 QNTYKY COC @QTYKEY,R14 FLAG SET? 1032 0052 I0392 1034 160F JNE QNTY20 NO, JUMP I0393 1036 E3A0 SOC @NOHDR,R14 INHIBIT HEADER DISPLAY 1038 004E I0394 103A 0200 LI R0,DSPLAY+16 POINT TO HEADER COLUMN 8 103C 0A10 I0395 103E 0201 LI R1,24*2 CLEAR 24 CHARACTERS 1040 0030 I0396 1042 06A0 BL @CLRMID CLEAR THE MIDDLE OF THE HEADER 1044 2240 I0397 1046 06A0 BL @TXTSCN 1048 12E8 I0398 104A 00 BYTE 0,10 I0399 104C 10B4 DATA QTYMSG I0400 104E 06A0 BL @PGQNTY PRINT THE QUANTITY 1050 225A I0401 1052 1006 JMP KEXIT4 I0402 * I0403 1054 43A0 QNTY20 SZC @NOHDR,R14 ALLOW HEADERS 1056 004E I0404 1058 06A0 HLPA10 BL @RWPAGE RE-WRITE THE PAGE 105A 1AD0 I0405 105C 06A0 BL @DISPN DISPLAY THE PAGE NUMBER 105E 22E6 I0406 1060 0460 KEXIT4 B @KEXIT1 1062 0AB2 I0407 ************************************************************ I0408 * * I0409 * ROTATE THE ROW 24 DISPLAY * I0410 * * I0411 * 1. DISPLAY WITH 'F' KEYS IN INVERSE VIDEO * I0412 * 2. DISPLAY WITH 'F' KEYS IN NORMAL VIDEO * I0413 * 3. DISPLAY ROW 27 HAMMING DATA * I0414 * 4. DISPLAY ROW 8/30 DATA * I0415 * * I0416 ************************************************************ I0417 1064 B820 R24KEY AB @BYTE01,@DISP24 ROTATE THE NUMBER 1066 005E 1068 D09B I0418 106A 9820 CB @DISP24,@BYTE04 PACKET 8/30? 106C D09B 106E 0062 I0419 1070 1308 JEQ R24K10 YES, FIX THE LINE I0420 1072 9820 CB @DISP24,@BYTE05 CHECK FOR MAX 1074 D09B 1076 0078 I0421 1078 12EF JLE HLPA10 NOT THERE, EXIT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (PAGE SELECTION) PAGE 0063 I0422 107A D820 MOVB @BYTE00,@DISP24 RESET TO ZERO 107C 004E 107E D09B I0423 1080 10EB JMP HLPA10 AND RE-WRITE PAGE I0424 * I0425 1082 06A0 R24K10 BL @CLRBTM CLEAR THE BOTTOM ROW 1084 2218 I0426 1086 06A0 BL @TXTSCN 'WAITING FOR PACKET 8/30' 1088 12E8 I0427 108A 18 BYTE 24 ROW 24 I0428 108B 08 BYTE 8 COLUMN 8 I0429 108C 1090 DATA WTGMSG I0430 108E 10E4 JMP HLPA10 I0431 * I0432 1090 03 WTGMSG BYTE >03 YELLOW I0433 1091 57 TEXT 'WAITING FOR PACKET 8/30' I0434 10A8 00 BYTE 0 I0435 10AA EVEN I0436 ************************************************************ I0437 * * I0438 * NOTE THAT 'TXTKEY', 'MIXKEY' AND 'PICKEY' ARE IN * I0439 * THE FILE 'MODE' * I0440 * * I0441 ************************************************************ I0442 * I0443 10AA 3000 HLPTBL DATA >3000,>3400,>3800,>3C00,0 10AC 3400 10AE 3800 10B0 3C00 10B2 0000 I0444 * I0445 10B4 03 QTYMSG BYTE >03 YELLOW TEXT I0446 10B5 50 TEXT 'PAGES IN STORE=' I0447 10C4 00 BYTE 0 I0448 * I0449 10C5 00 TITEXT BYTE 0,0 I0450 10C7 54 TEXT 'TEXAS' I0451 10CC 00 BYTE 0 I0452 10CD 49 TEXT 'INSTRUMENTS' I0453 10D8 00 BYTE 0 I0454 10D9 54 TEXT 'TELETEXT.' I0455 10E2 00 BYTE 0,0,0 I0456 10E5 TIEND EQU $ I0457 10E5 00 TIATTR BYTE 0,0,>60,>C0,>40,>60,>20,0,>E0,>A0 I0458 10EF 40 BYTE >40,>80,>A0,>20,>60,>C0,>E0,>A0,>80 I0459 10F8 00 BYTE 0,>A0,>E0,>20,>60,>40,>C0,>80,>A0,>E0 I0460 1102 00 BYTE 0,0,0 I0461 * I0462 1105 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD ROUTINES (OTHER THAN PAGE SELECT) PAGE 0064 0041 COPY MODE.990 J0002 * J0003 * BIT VALUES REQUIRED FOR VARIOUS MODES: J0004 * J0005 * NFDISP MIX TXT SLOWS BT4 DC4 DC8 DC1 INCRUS J0006 * MIX 0 1 1 1 1 1 1 0 1 J0007 * PIC 0 0 0 1 1 0 0 0 0 J0008 * TXT 0 0 1 0 0 0 0 1 0 J0009 * N/F 1 X X 1 1 1 0 0 0 J0010 * J0011 * AUTHOR: COLIN HINSON J0012 ************************************************************ J0013 * * J0014 * DEAL WITH TEXT KEY * J0015 * * J0016 ************************************************************ J0017 1106 23A0 TXTKEY COC @TEXT,R14 IN TEXT MODE? 1108 0056 J0018 110A 132A JEQ KEXIT7 YES, IGNORE KEY J0019 110C 23A0 COC @NFDISP,R14 ARE WE IN NEWSFLASH? 110E 0058 J0020 1110 1608 JNE TXTK10 NO, SKIP J0021 1112 23A0 COC @MIX,R14 ARE WE IN MIX? 1114 005C J0022 1116 1605 JNE TXTK10 NO, JUMP J0023 1118 43A0 SZC @MIX,R14 CLEAR MIX FLAG 111A 005C J0024 111C E3A0 SOC @TEXT,R14 SET THE TEXT FLAG 111E 0056 J0025 1120 101F JMP KEXIT7 EXIT J0026 * J0027 1122 43A0 TXTK10 SZC @MIX,R14 CLEAR MIX FLAG 1124 005C J0028 1126 E3A0 SOC @TEXT,R14 SET THE TEXT FLAG 1128 0056 J0029 112A 1018 JMP KEXIT6 SET MODE CHANGE AND EXIT J0030 ************************************************************ J0031 * * J0032 * DEAL WITH MIX KEY * J0033 * * J0034 ************************************************************ J0035 112C 23A0 MIXKEY COC @MIX,R14 IN MIX MODE? 112E 005C J0036 1130 1317 JEQ KEXIT7 YES, IGNORE KEY J0037 1132 23A0 COC @NFDISP,R14 ARE WE IN NEWSFLASH? 1134 0058 J0038 1136 1608 JNE MIXK10 NO, JUMP J0039 1138 23A0 COC @TEXT,R14 ARE WE IN TEXT? 113A 0056 J0040 113C 1605 JNE MIXK10 NO, JUMP J0041 113E E3A0 SOC @MIX,R14 CLEAR MIX FLAG 1140 005C J0042 1142 43A0 SZC @TEXT,R14 SET THE TEXT FLAG 1144 0056 J0043 1146 100C JMP KEXIT7 EXIT J0044 * J0045 1148 43A0 MIXK10 SZC @TEXT,R14 CLEAR TEXT FLAG NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0065 114A 0056 J0046 114C E3A0 SOC @MIX,R14 SET MIX FLAG 114E 005C J0047 1150 1005 JMP KEXIT6 J0048 ************************************************************ J0049 * * J0050 * DEAL WITH PICTURE MODE KEY * J0051 * * J0052 ************************************************************ J0053 1152 27A0 PICKEY CZC @MIXTXT,R14 IN PICTURE MODE? 1154 0096 J0054 1156 1304 JEQ KEXIT7 YES, IGNORE KEY J0055 1158 43A0 SZC @MIXTXT,R14 CLEAR TEXT & MIX FLAGS 115A 0096 J0056 115C E1A0 KEXIT6 SOC @MDCHNG,R6 SET MODE CHANGE REQUIRED 115E 0052 J0057 1160 0460 KEXIT7 B @KEXIT1 1162 0AB2 J0058 ************************************************************ J0059 * * J0060 * ROUTINES TO PROGRAM THE VDP IN EVENT OF A MODE CHANGE * J0061 * * J0062 ************************************************************ J0063 ************************************************************ J0064 * * J0065 * ROUTINES ARE ONLY CALLED WHEN THE BUFFER IS EMPTY, SO * J0066 * AS TO AVOID LOSING ANY DATA IN THE BUFFER ( THE * J0067 * BUFFER POINTERS HAVE TO BE RESET AS SYNC IS LOST) * J0068 * * J0069 * USE OF REGISTERS: * J0070 * R6 = FLAG BIT REGISTER * J0071 * R10= STACK POINTER * J0072 * R11= WORK REGISTER * J0073 * R12= CRU * J0074 * R14= FLAG BIT REGISTER * J0075 * * J0076 * CALLED BY: INROW * J0077 * * J0078 * CALLS: PROGCM * J0079 * IBASE * J0080 * WRITEP * J0081 * DISPN * J0082 * * J0083 ************************************************************ J0084 1164 CE8B CHGMOD MOV R11,*R10+ J0085 1166 41A0 SZC @MDCHNG,R6 CLEAR MODE CHANGE FLAG 1168 0052 J0086 116A 27A0 CZC @MIXTXT,R14 GOING TO PICTURE MODE? 116C 0096 J0087 116E 1605 JNE CHGM10 NO, TRY MIX J0088 1170 06A0 BL @GOPIC GO TO PICTURE MODE 1172 11F4 J0089 1174 06A0 BL @IBASE RESET BASE ADR. REGISTERS 1176 02AC J0090 1178 10F3 JMP KEXIT7 J0091 * J0092 117A 23A0 CHGM10 COC @NFDISP,R14 GOING TO NEWSFLASH? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0066 117C 0058 J0093 117E 130F JEQ CHGM40 YES J0094 1180 23A0 COC @MIX,R14 GOING TO MIX MODE? 1182 005C J0095 1184 1609 JNE CHGM20 NO, MUST BE TEXT MODE J0096 * J0097 * GO TO MIX MODE J0098 * J0099 1186 06A0 BL @GOMIX GO TO MIX MODE 1188 11CC J0100 * J0101 * RESET BASE ADDRESS REGISTERS, RE-WRITE THE PAGE J0102 * J0103 118A 06A0 CHGM15 BL @IBASE RESET BASE ADR. REGISTERS 118C 02AC J0104 118E 06A0 BL @WRITEP RE-WRITE THE PAGE 1190 1B0A J0105 1192 06A0 BL @DISPN DISPLAY THE PAGE NUMBER 1194 22E6 J0106 1196 10E4 JMP KEXIT7 CLR MAPPER AND RETURN TO CALLER J0107 * J0108 * GO TO TEXT MODE J0109 * J0110 1198 06A0 CHGM20 BL @GOTEXT GO TO TEXT MODE 119A 11A4 J0111 119C 10F6 JMP CHGM15 THEN RE-WRITE THE PAGE ETC. J0112 * J0113 * GO TO NEWSFLASH MODE J0114 * J0115 119E 06A0 CHGM40 BL @GONF GO TO NEWSFLASH MODE 11A0 1218 J0116 11A2 10F3 JMP CHGM15 THEN RE-WRITE THE PAGE ETC. J0117 ************************************************************ J0118 * * J0119 * SUBROUTINE TO SET UP TEXT MODE * J0120 * * J0121 ************************************************************ J0122 11A4 020C GOTEXT LI R12,KBDCRU POINT TO SLOW SWITCH 11A6 0380 J0123 11A8 1E07 SBZ 7 SWITCH TV TO EXTERNAL SYNC J0124 11AA 5820 SZCB @BT4,@CM1DTA CLEAR BT4 (SYNC MODE) 11AC 0066 11AE D096 J0125 11B0 F820 SOCB @DC1,@CM2DTA SET DC1 (SYNC MODE) 11B2 006C 11B4 D097 J0126 11B6 5820 SZCB @DC4DC8,@CM2DTA CLEAR DC4 AND DC8 (MIX MODE BI 11B8 0072 11BA D097 J0127 11BC 5820 SZCB @INCRUS,@CM4DTA CLEAR INCRUSTATION BIT 11BE 0060 11C0 D099 J0128 11C2 E3A0 SOC @TEXT,R14 SET THE TEXT BIT 11C4 0056 J0129 11C6 43A0 SZC @MIX,R14 CLEAR THE MIX MODE BIT 11C8 005C J0130 11CA 1035 JMP PROGCM FIX THE VDP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0067 J0131 ************************************************************ J0132 * * J0133 * SUBROUTINE TO SET UP MIX MODE * J0134 * * J0135 ************************************************************ J0136 11CC 020C GOMIX LI R12,KBDCRU POINT TO SLOW SWITCH 11CE 0380 J0137 11D0 1D07 SBO 7 SWITCH TV TO INTERNAL SYNC J0138 11D2 F820 SOCB @BT4,@CM1DTA SET BT4 (SYNC MODE) 11D4 0066 11D6 D096 J0139 11D8 F820 SOCB @DC4DC8,@CM2DTA SET DC4 AND DC8 (MIX MODE BITS 11DA 0072 11DC D097 J0140 11DE 5820 SZCB @DC1,@CM2DTA CLEAR DC1 (SYNC MODE) 11E0 006C 11E2 D097 J0141 11E4 F820 SOCB @INCRUS,@CM4DTA SET INCRUSTATION BIT 11E6 0060 11E8 D099 J0142 11EA E3A0 SOC @MIX,R14 SET MIX BIT 11EC 005C J0143 11EE 43A0 SZC @TEXT,R14 CLEAR THE TEXT BIT 11F0 0056 J0144 11F2 1021 JMP PROGCM FIX THE VDP J0145 ************************************************************ J0146 * * J0147 * SUBROUTINE TO SET UP PICTURE MODE * J0148 * * J0149 ************************************************************ J0150 11F4 020C GOPIC LI R12,KBDCRU POINT TO SLOW SWITCH 11F6 0380 J0151 11F8 1D07 SBO 7 SWITCH TV TO INTERNAL SYNC J0152 11FA F820 SOCB @BT4,@CM1DTA SET BT4 (SYNC MODE) 11FC 0066 11FE D096 J0153 1200 5820 SZCB @DC1,@CM2DTA CLEAR DC1 (SYNC MODE) 1202 006C 1204 D097 J0154 1206 5820 SZCB @DC4DC8,@CM2DTA CLEAR DC4 AND DC8 (MIX MODE BI 1208 0072 120A D097 J0155 120C 5820 SZCB @INCRUS,@CM4DTA CLEAR INCRUSTATION BIT 120E 0060 1210 D099 J0156 1212 43A0 SZC @MIXTXT,R14 CLEAR MIX/TEXT FLAGS 1214 0096 J0157 1216 100F JMP PROGCM FIX THE VDP J0158 ************************************************************ J0159 * * J0160 * SUBROUTINE TO SET UP NEWS FLASH MODE * J0161 * * J0162 ************************************************************ J0163 1218 020C GONF LI R12,KBDCRU POINT TO SLOW SWITCH 121A 0380 J0164 121C 1D07 SBO 7 SWITCH TV TO INTERNAL SYNC J0165 121E F820 SOCB @BT4,@CM1DTA SET BT4 (SYNC MODE) NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0068 1220 0066 1222 D096 J0166 1224 F820 SOCB @DC4,@CM2DTA SET DC4 (MIX MODE BITS) 1226 0066 1228 D097 J0167 122A 5820 SZCB @DC1DC8,@CM2DTA CLEAR DC1 (SYNC MODE) 122C 006E 122E D097 J0168 1230 5820 SZCB @INCRUS,@CM4DTA CLEAR INCRUSTATION BIT 1232 0060 1234 D099 J0169 ************************************************************ J0170 * * J0171 * PROGRAM CM1, CM2, AND CM4 REGISTERS IN THE VDP * J0172 * * J0173 ************************************************************ J0174 1236 D820 PROGCM MOVB @CM1,@VDPREG POINT TO CM1 IN VDP 1238 0062 123A F800 J0175 123C D820 MOVB @CM1DTA,@VDPREG SEND THE NEW DATA 123E D096 1240 F800 J0176 * J0177 1242 D820 MOVB @CM2,@VDPREG POINT TO CM2 IN VDP 1244 0078 1246 F800 J0178 1248 D820 MOVB @CM2DTA,@VDPREG SEND THE NEW DATA 124A D097 124C F800 J0179 * J0180 124E D820 MOVB @CM3,@VDPREG 1250 0079 1252 F800 J0181 1254 D820 MOVB @BYTE48,@VDPREG 1256 0082 1258 F800 J0182 * J0183 125A D820 MOVB @CM4,@VDPREG POINT TO CM4 IN VDP 125C 007A 125E F800 J0184 1260 D820 MOVB @CM4DTA,@VDPREG SEND THE NEW DATA 1262 D099 1264 F800 J0185 1266 045B RT J0186 ************************************************************ J0187 * * J0188 * NFMODE - SET UP FLAG SO AS TO SWITCH TO * J0189 * N/F OR S/T MODE AS REQUIRED * J0190 * * J0191 * PRE-CONDITIONS: R0 CONTAINS CONTROL BITS FROM * J0192 * HEADER * J0193 * * J0194 ************************************************************ J0195 1268 0240 NFMODE ANDI R0,>0C00 LEAVE ONLY C5 AND C6 126A 0C00 J0196 126C 1309 JEQ NFMO20 IF NONE SET, JUMP J0197 126E 23A0 COC @NFDISP,R14 ARE WE IN CORRECT MODE? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0069 1270 0058 J0198 1272 130C JEQ NOCHNG YES, EXIT J0199 1274 E3A0 SOC @NFDISP,R14 SET THE FLAG 1276 0058 J0200 1278 E1A0 NFMO10 SOC @MDCHNG,R6 SET FLAG TO CHANGE MODE 127A 0052 J0201 127C C2DB MOV *R11,R11 GET EXIT ADDRESS J0202 127E 045B RT J0203 * J0204 1280 23A0 NFMO20 COC @NFDISP,R14 IN N/F MODE? 1282 0058 J0205 1284 1603 JNE NOCHNG NO, EXIT J0206 1286 43A0 SZC @NFDISP,R14 CLEAR THE FLAG 1288 0058 J0207 128A 10F6 JMP NFMO10 J0208 * J0209 128C 046B NOCHNG B @2(R11) BYPASS DATA STATEMENT & RETURN 128E 0002 J0210 1290 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0070 0043 COPY DISROW.990 K0001 ************************************************************ K0002 * * K0003 * DISROW - Displays a row on the screen * K0004 * * K0005 * Preconditions: DISADR & DISMAP NEED TO BE SET UP * K0006 * * K0007 * Postconditions: * K0008 * * K0009 * Called by: * K0010 * * K0011 * Calls: SETADR * K0012 * * K0013 * REGISTER USAGE : R0 = WORK REGISTER * K0014 * R1 = SCREEN POINTER * K0015 * R2 = WORK REGISTER * K0016 * R3 = RETURN ADDRESS HOLDER * K0017 * R4 = WORK REGISTER * K0018 * R5 = DATA STOP ADDRESS * K0019 * R6 = SYSTEM FLAGS * K0020 * R7 = P26 MODE PAGE POINTER * K0021 * R8 = PARALLEL ATTRIBUTES * K0022 * R9 = CURRENT ROW NUMBER (NOT DESTROYED)* K0023 * R10= STACK POINTER * K0024 * R12= POINTER TO CURRENT CHAR. IN RAM * K0025 * R14= SYSTEM FLAGS * K0026 * * K0027 * Global variables: * K0028 * * K0029 * Comments: ROUTINE HAS SEVERAL ENTRIES - BEWARE * K0030 * : HDRDIS, DISRAM, DISTXT * K0031 * : MAPPER IS CLEARED ON EXIT * K0032 * * K0033 * AUTHOR: COLIN HINSON * K0034 ************************************************************ K0035 ************************************************************ K0036 * * K0037 * EXTERNAL CALL : DISTIM - Put time on screen. * K0038 * * K0039 * Assumes a header containing the time to be in * K0040 * "ROWST" * K0041 * * K0042 ************************************************************ K0043 1290 9820 DISTIM CB @SECNDS,@OLDTIM SAME AS LAST TIME? 1292 F07F 1294 D094 K0044 1296 1359 JEQ DSTXIT YES, ABORT K0045 * K0046 1298 D320 MOVB @CNTRLB,R12 GET MAG SERIAL BIT 129A F05F K0047 129C 024C ANDI R12,>0100 REMOVE LANGUAGE BITS 129E 0100 K0048 12A0 1604 JNE DIST20 IT'S SERIAL MAG, DISPLAY TIME K0049 12A2 9820 CB @RMAG,@PAGHEX PAGE FROM REQUESTED MAGAZINE? 12A4 F056 12A6 F050 K0050 12A8 1650 JNE DSTXIT NO, ABORT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0071 K0051 * K0052 * CHECK FOR PARITY ERRORS K0053 * K0054 12AA 9820 DIST20 CB @DISP24,@BYTE04 ROW 830 ON DISPLAY? 12AC D09B 12AE 0062 K0055 12B0 134C JEQ DSTXIT YES, ABORT K0056 12B2 020C DIST22 LI R12,ROWST+34 POINT TO START OF TIME 12B4 F078 K0057 12B6 0208 LI R8,8 EIGHT BYTES TO CHECK 12B8 0008 K0058 12BA 983C DIST25 CB *R12+,@BYTEFF PARITY OK? 12BC 008D K0059 12BE 1345 JEQ DSTXIT NO, EXIT K0060 12C0 0608 DEC R8 COUNT THE BYTE K0061 12C2 16FB JNE DIST25 K0062 12C4 D820 MOVB @SECNDS,@OLDTIM SET UP LATEST TIME 12C6 F07F 12C8 D094 K0063 12CA 020C LI R12,ROWST+34 POINT TO THE START OF THE TIME 12CC F078 K0064 12CE C3CF MOV R15,R15 ANY FREE RAM? K0065 12D0 1603 JNE DIST30 YES, RAM OK K0066 12D2 D220 MOVB @GREEN,R8 YES, SET TIME TO GREEN 12D4 006A K0067 12D6 1002 JMP DIST40 K0068 12D8 D220 DIST30 MOVB @LCOLOR,R8 SET UP LAST HEADER COLOUR 12DA D095 K0069 12DC 0205 DIST40 LI R5,ROWST+42 END OF ROW 12DE F080 K0070 12E0 0201 LI R1,32*2+DSPLAY POINT TO TIME ON SCREEN 12E2 0A40 K0071 12E4 04C9 CLR R9 SET UP ROW 0 K0072 12E6 1052 JMP TIMENT K0073 ************************************************************ K0074 * * K0075 * EXTERNAL CALL : TXTSCN - Put text on screen.(from EPROM)* K0076 * * K0077 * Requires Data following the call: * K0078 * 1. Byte = Row * K0079 * 2. Byte = Col * K0080 * 3. Data = MSG Address. * K0081 * * K0082 ************************************************************ K0083 12E8 04C9 TXTSCN CLR R9 K0084 12EA D27B MOVB *R11+,R9 GET THE ROW K0085 12EC D009 MOVB R9,R0 COPY ROW NO. K0086 12EE 0980 SRL R0,8 Word adjust the row number K0087 12F0 3820 MPY @N80,R0 Find row offset 12F2 004A K0088 12F4 0221 AI R1,DSPLAY Add start of display 12F6 0A00 K0089 12F8 B81B AB *R11,@R1LSB FIND NEW COLUMN 12FA F003 K0090 12FC B83B AB *R11+,@R1LSB FIND NEW COLUMN 12FE F003 K0091 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0072 K0092 1300 C33B MOV *R11+,R12 GET THE MSG START ADR. K0093 1302 C14C MOV R12,R5 COPY K0094 * FIND THE END OF THE MESSAGE K0095 1304 D035 ZEROLP MOVB *R5+,R0 LOOK FOR THE NUL AT THE END K0096 1306 16FE JNE ZEROLP LOOP TILL FOUND K0097 1308 0605 DEC R5 OVERSHOT BY 1, DECREMENT K0098 * K0099 130A 103E JMP DIS100 K0100 ************************************************************ K0101 * * K0102 * EXTERNAL and INTERNAL CALL : DISHDR * K0103 * Display a header from main RAM. * K0104 * * K0105 ************************************************************ K0106 130C 27A0 DISHDR CZC @NOHDR,R14 HEADER ALLOWED? 130E 004E K0107 1310 161A JNE DIREXT NO, ABORT K0108 1312 04C9 CLR R9 SET TO ROW 0 K0109 1314 C160 MOV @DISADR,R5 GET THE PAGE START ADR. 1316 F04E K0110 1318 1316 JEQ DIREXT IF NO DISPLAY ADR, GIVE IN! K0111 131A D820 MOVB @DISMAP,@MAPPER SET UP THE MAPPER LATCH 131C F054 131E FC00 K0112 1320 C305 MOV R5,R12 COPY R12=DATA START K0113 1322 0225 AI R5,32 STOP BEFORE THE TIME 1324 0020 K0114 * K0115 * IF THE INHIBIT HEADER BIT IS SET, CLEAR THE HEADER K0116 * AND SET THE FLAG FOR THE 'WRITE PAGE NUMBER' ROUTINE K0117 * K0118 1326 43A0 SZC @INHEDR,R14 CLEAR INHIBIT HEADER BIT 1328 005E K0119 132A C060 MOV @PKEY,R1 PAGE NUMBER BEING ENTERED? 132C D044 K0120 132E 160E JNE HDRE20 YES, ALLOW HEADER K0121 1330 D06C MOVB @6(R12),R1 GET INHIBIT HEADER BIT 1332 0006 K0122 1334 0241 ANDI R1,>0100 REMOVE OTHER BITS 1336 0100 K0123 1338 1309 JEQ HDRE20 IF INHIBIT NOT SET, SKIP K0124 133A E3A0 SOC @INHEDR,R14 SET INHIBIT HEADER BIT 133C 005E K0125 133E C08B MOV R11,R2 SAVE RETURN K0126 1340 06A0 BL @CLRHDR CLEAR THE HEADER (ON SCREEN) 1342 2222 K0127 1344 C2C2 MOV R2,R11 RESTORE RETURN K0128 1346 04E0 DIREXT CLR @MAPPER ENSURE MAP PAGE ZERO 1348 FC00 K0129 134A 045B DSTXIT RT AND RETURN TO CALLER K0130 * K0131 134C 022C HDRE20 AI R12,8 START 8 BYTES IN ON A HEADER 134E 0008 K0132 1350 0201 LI R1,8*2+DSPLAY START AT NON HAMMING PART OF H 1352 0A10 K0133 1354 1019 JMP DIS100 K0134 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0073 K0135 ************************************************************ K0136 * * K0137 * EXTERNAL ENTRY : Display rows from main RAM * K0138 * R9 is set up by calling routine * K0139 * * K0140 ************************************************************ K0141 1356 D109 DISRAM MOVB R9,R4 GET ROW NO. K0142 1358 13D9 JEQ DISHDR IF A HEADER, USE HEADER ROUTE K0143 135A 0984 SRL R4,8 K0144 135C D024 MOVB @DHTFGS-1(R4),R0 DOUBLE HEIGHT ON ROW ABOVE? 135E D067 K0145 1360 16F2 JNE DIREXT YES, ABORT DISPLAY. K0146 1362 3920 MPY @FORTY,R4 COMPUTE CHAR OFFSET IN RAM 1364 0048 K0147 1366 A160 A @DISADR,R5 ADD IN THE PAGE START ADR. 1368 F04E K0148 136A D820 MOVB @DISMAP,@MAPPER SET UP THE MAPPER LATCH 136C F054 136E FC00 K0149 ************************************************************ K0150 * * K0151 * EXTERNAL ENTRY : Display rows from "HELP" data. * K0152 * R5 and R9 are set up by calling routine * K0153 * * K0154 ************************************************************ K0155 1370 C305 HLPENT MOV R5,R12 COPY R12=DATA START K0156 1372 0225 AI R5,40 COMPUTE THE STOP ADR. 1374 0028 K0157 ************************************************************ K0158 * * K0159 * EXTERNAL ENTRY : Display rows of Datacast data. * K0160 * * K0161 ************************************************************ K0162 1376 D009 P31ENT MOVB R9,R0 GET ROW NO. K0163 1378 0980 SRL R0,8 Word adjust the row number K0164 137A 0280 CI R0,25 Off the bottom of the screen 137C 0019 K0165 137E 14E3 JHE DIREXT YES, ABORT K0166 1380 3820 MPY @N80,R0 Find row offset 1382 004A K0167 1384 0221 AI R1,DSPLAY Add start of display 1386 0A00 K0168 * K0169 1388 0208 DIS100 LI R8,>E000 SET UP WHITE ATR. 138A E000 K0170 ************************************************************ K0171 * * K0172 * AT THIS POINT, THE FOLLOWING REGISTERS SHOULD BE SET: * K0173 * * K0174 * R1 CONTAINS THE SCREEN START ADDRESS. * K0175 * R5 POINTS TO THE END OF THE DATA TO BE DISPLAYED * K0176 * R8 CONTAINS THE REQUIRED PARALLEL ATTRIBUTE * K0177 * R9 CONTAINS THE CURRENT ROW NUMBER * K0178 * R12 POINTS TO THE START OF THE DATA TO BE DISPLAYED * K0179 * * K0180 * IF DISPLAY IS FROM PAGED RAM, THE THE MAPPER VALUE * K0181 * SHOULD HAVE BEEN LATCHED IN THE MAPPER. * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0074 K0182 * * K0183 ************************************************************ K0184 138C 04C0 TIMENT CLR R0 K0185 138E D800 MOVB R0,@GOSET 1390 D09F K0186 1392 D800 MOVB R0,@HELDCH Clear held character 1394 D09E K0187 1396 D800 MOVB R0,@SERATR CLEAR SERIAL ATTRIBUTE 1398 F055 K0188 139A D800 MOVB R0,@FTYPE CLEAR ROW 24 'F' CHAR. TYPE 139C D09C K0189 139E 41A0 SZC @HOLD,R6 CLEAR HELD GRAPHICS FLAG 13A0 006A K0190 13A2 41A0 SZC @UNDLIN,R6 CLEAR UNDERLINE FLAG 13A4 0066 K0191 13A6 CE8B MOV R11,*R10+ Save the return address K0192 13A8 2C01 SETA R1 K0193 * K0194 * Process the row to be displayed K0195 * K0196 13AA 04C2 DISLP CLR R2 Ready for byte operation K0197 13AC D83C MOVB *R12+,@R2LSB Fetch next character 13AE F005 K0198 * K0199 * IF PARITY ERROR (>FF), WRITE A SPACE K0200 * K0201 13B0 111F JLT ISSP JUMP IF ERROR CHARACTER K0202 13B2 0282 CI R2,>20 Is it a control character 13B4 0020 K0203 13B6 1A21 JL CONTRL Yes - go process it K0204 13B8 131B JEQ ISSP Jump if a space character K0205 * K0206 * Process a alpha character K0207 * K0208 13BA E088 ALPH1 SOC R8,R2 Set attribute bits K0209 13BC 0242 ANDI R2,>E7FF Force blast through 13BE E7FF K0210 13C0 2220 COC @WD1000,R8 In graphics mode ? 13C2 0066 K0211 13C4 160A JNE NGRH No - jump K0212 13C6 20A0 COC @WD0020,R2 In graphics mode ? (BIT 6) 13C8 0058 K0213 13CA 1607 JNE NGRH No - jump K0214 13CC E088 SOC R8,R2 Set attribute K0215 13CE B820 AB @GOSET,@R2LSB Adjust for separated graphis 13D0 D09F 13D2 F005 K0216 13D4 D820 MOVB @R2LSB,@HELDCH Update held character 13D6 F005 13D8 D09E K0217 13DA D742 NGRH MOVB R2,*VRAM Attribute to screen K0218 13DC D760 MOVB @R2LSB,*VRAM Character to screen 13DE F005 K0219 13E0 2220 COC @WIDTH2,R8 DOUBLE WIDTH? 13E2 0060 K0220 13E4 160E JNE RPINC K0221 13E6 D742 MOVB R2,*VRAM Attribute to screen NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0075 K0222 13E8 D760 MOVB @R2LSB,*VRAM Character to screen 13EA F005 K0223 13EC 058C INC R12 UPDATE POINTER TO ROW K0224 13EE 1009 JMP RPINC K0225 * K0226 * Special handler for a space character K0227 * K0228 13F0 04C2 ISSP CLR R2 Load space character K0229 13F2 D820 MOVB @BYTE00,@HELDCH Update held character 13F4 004E 13F6 D09E K0230 13F8 10E0 JMP ALPH1 K0231 * K0232 * Process a control character K0233 * K0234 13FA 0A12 CONTRL SLA R2,1 Offset into branch table K0235 13FC C2E2 MOV @BRTBL(R2),R11 Fetch address from table 13FE 148E K0236 1400 069B BL *R11 Branch to control routine K0237 * K0238 1402 814C RPINC C R12,R5 End of row ? K0239 1404 1AD2 JL DISLP No - loop K0240 1406 D249 MOVB R9,R9 HEADER? K0241 1408 1605 JNE DISEXT K0242 140A 0248 ANDI R8,>E000 LEAVE ONLY THE COLOUR 140C E000 K0243 140E D808 MOVB R8,@LCOLOR SAVE FOR TIME WRITING 1410 D095 K0244 1412 1039 JMP DHNSET AND EXIT K0245 * K0246 * End of display row K0247 * K0248 1414 04C2 DISEXT CLR R2 K0249 1416 D809 MOVB R9,@R2LSB Fetch the row number 1418 F005 K0250 141A 0282 CI R2,23 End of page ? 141C 0017 K0251 141E 1433 JHE DHNSET Yes - ignore double height K0252 1420 D8A0 MOVB @BYTE00,@DHTFGS(R2) CLEAR DOUBLE HEIGHT FLAG 1422 004E 1424 D068 K0253 1426 21A0 COC @DHONRW,R6 D/H ON ROW JUST WRITTEN? 1428 004E K0254 142A 162D JNE DHNSET NO, EXIT K0255 * K0256 * Fix the second row of double height K0257 * K0258 142C D8A0 MOVB @BYTEFF,@DHTFGS(R2) SET DOUBLE HEIGHT FLAG 142E 008D 1430 D068 K0259 1432 D8A0 MOVB @BYTE00,@DHTFGS+1(R2) CLEAR DOUBLE HEIGHT FLAG 1434 004E 1436 D069 K0260 1438 0582 INC R2 Point to next row K0261 * K0262 * Fetch row from display area to row store K0263 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0076 K0264 143A 0204 LI R4,2 Set loop flag 143C 0002 K0265 143E 020C AGAIN LI R12,ROWST+2 Point to row store 1440 F058 K0266 1442 2C01 SETA R1 Set VDP pointer K0267 1444 D020 DHLOOP MOVB @VDPRD,R0 Fetch attribute 1446 F900 K0268 1448 D0A0 MOVB @VDPRD,R2 Fetch character 144A F900 K0269 144C 2020 COC @WD0100,R0 Double height ? 144E 005E K0270 1450 1307 JEQ ISOK Yes - jump K0271 1452 0242 ANDI R2,>7F00 REMOVE UNDERLINE BIT 1454 7F00 K0272 1456 90A0 CB @BYTE20,R2 Is it a delimiter ? 1458 0068 K0273 145A 1302 JEQ ISOK Yes - jump K0274 145C 04C0 CLR R0 Clear the attribute K0275 145E 04C2 CLR R2 Clear the character K0276 1460 DF00 ISOK MOVB R0,*R12+ Save attribute in row store K0277 1462 DF02 MOVB R2,*R12+ Save character in row store K0278 1464 028C CI R12,ROWEND End of row store ? 1466 F080 K0279 1468 1AED JL DHLOOP No - repeat K0280 * K0281 * Transfer double height row from row store to display area K0282 * K0283 146A C001 MOV R1,R0 Fetch start of display row K0284 146C 0220 AI R0,80 Point to next row 146E 0050 K0285 1470 2C00 SETA R0 Set VDP pointer K0286 1472 0202 LI R2,ROWST+2 Point to row store 1474 F058 K0287 1476 D772 DHLP2 MOVB *R2+,*VRAM Write a character K0288 1478 0282 CI R2,ROWEND End of row store ? 147A F080 K0289 147C 1AFC JL DHLP2 No - loop K0290 * K0291 * Test for end of double height row K0292 * K0293 147E 0221 AI R1,40 Point to second half of row 1480 0028 K0294 1482 0604 DEC R4 K0295 1484 16DC JNE AGAIN K0296 1486 064A DHNSET DECT R10 K0297 1488 C2DA MOV *R10,R11 Restore return address K0298 148A 0460 B @DIREXT CLEAR MAPPER & RETURN TO CALLER 148C 1346 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0077 0045 COPY DSPCNTRL.990 L0001 * L0002 * Branch table L0003 * L0004 148E 14CE BRTBL DATA ABLACK Alpha black L0005 1490 14D8 DATA ALPHA Alpha red L0006 1492 14D8 DATA ALPHA Alpha green L0007 1494 14D8 DATA ALPHA Alpha yellow L0008 1496 14D8 DATA ALPHA Alpha blue L0009 1498 14D8 DATA ALPHA Alpha magenta L0010 149A 14D8 DATA ALPHA Alpha cyan L0011 149C 14D8 DATA ALPHA Alpha white L0012 149E 1608 DATA FLASH Flashing on L0013 14A0 1614 DATA STEADY Flashing off L0014 14A2 158A DATA ENDBOX END OF BOX L0015 14A4 1596 DATA BOX START BOX L0016 14A6 15A6 DATA SGLHGT L0017 14A8 1666 DATA DBLHGT Double height L0018 14AA 1696 DATA DBLWID DOUBLE WIDTH L0019 14AC 1642 DATA DBLSIZ DOUBLE SIZE L0020 14AE 14F2 DATA GBLACK MOSAIC BLACK L0021 14B0 14F8 DATA MOSAIC Mosaic red L0022 14B2 14F8 DATA MOSAIC Mosaic green L0023 14B4 14F8 DATA MOSAIC Mosaic yellow L0024 14B6 14F8 DATA MOSAIC Mosaic blue L0025 14B8 14F8 DATA MOSAIC Mosaic magenta L0026 14BA 14F8 DATA MOSAIC Mosaic cyan L0027 14BC 14F8 DATA MOSAIC Mosaic white L0028 14BE 157E DATA CONCEL L0029 14C0 16B2 DATA CTGMOS Contiguous mosaic L0030 14C2 16C4 DATA SEPMOS Seperated mosaic L0031 14C4 1624 DATA SPACE L0032 14C6 1508 DATA BLBACK Black background L0033 14C8 1510 DATA NWBACK New background L0034 14CA 16E2 DATA HLDMOS Hold mosaic L0035 14CC 16E8 DATA RELMOS Release mosaic L0036 * L0037 * Alpha control characters L0038 * L0039 14CE 21A0 ABLACK COC @LEVEL2,R6 LEVEL 2 ENABLED? 14D0 0064 L0040 14D2 1302 JEQ ALPHA YES, OK L0041 14D4 0460 ABLA10 B @SPACE ELSE DO SPACE ROUTINE 14D6 1624 L0042 14D8 C0CB ALPHA MOV R11,R3 Save return address L0043 14DA 06A0 BL @AMOS Write held character 14DC 15AC L0044 14DE D820 MOVB @BYTE00,@HELDCH Clear held character 14E0 004E 14E2 D09E L0045 14E4 0248 ANDI R8,>07FF Remove colour and set alpha 14E6 07FF L0046 14E8 0AC2 ALPMOS SLA R2,12 Colour to MS Nibble L0047 14EA 0242 ANDI R2,>E000 Leave only the colour 14EC E000 L0048 14EE E202 SOC R2,R8 Set new colour L0049 14F0 0453 B *R3 RETURN NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0078 L0050 * L0051 * Mosaic L0052 * L0053 14F2 21A0 GBLACK COC @LEVEL2,R6 LEVEL 2 PAGE? 14F4 0064 L0054 14F6 16EE JNE ABLA10 NO, EXIT L0055 14F8 C0CB MOSAIC MOV R11,R3 Save return address L0056 14FA 06A0 BL @AMOS Write held character 14FC 15AC L0057 14FE 0248 ANDI R8,>07FF 1500 07FF L0058 1502 0268 ORI R8,>1800 Set to mosaic mode 1504 1800 L0059 1506 10F0 JMP ALPMOS L0060 * L0061 * Black background L0062 * L0063 1508 5820 BLBACK SZCB @BYTEE7,@SERATR Set background to black 150A 008B 150C F055 L0064 150E 100F JMP WRDELM Write a delimiter & RTN L0065 * L0066 * New background colour L0067 * L0068 1510 5820 NWBACK SZCB @BYTEE7,@SERATR Remove old background colour 1512 008B 1514 F055 L0069 1516 C008 MOV R8,R0 Fetch foreground colour L0070 1518 0240 ANDI R0,>E000 Leave only the colour 151A E000 L0071 151C F800 SOCB R0,@SERATR Set new forground colour 151E F055 L0072 1520 0950 SRL R0,5 Colour to LS nibble L0073 1522 F800 SOCB R0,@SERATR Set new background colour 1524 F055 L0074 1526 1003 JMP WRDELM WRITE A DELIMITER & RETURN L0075 * L0076 * Reset the conceal mode control bit L0077 * L0078 1528 5820 DLM SZCB @BYTE10,@SERATR 152A 0066 152C F055 L0079 * L0080 * Write a delimiter L0081 * L0082 152E 04C0 WRDELM CLR R0 Ready for byte operation L0083 1530 D020 MOVB @SERATR,R0 Fetch the attribute 1532 F055 L0084 1534 21A0 COC @HOLD,R6 Held graphics required ? 1536 006A L0085 1538 1315 JEQ DHLD Yes - jump L0086 153A 23A0 DELM COC @NFDISP,R14 ARE WE IN NEWSFLASH MODE? 153C 0058 L0087 153E 1308 JEQ DELM10 YES, SKIP L0088 1540 23A0 COC @MIX,R14 ARE WE IN MIX MODE? 1542 005C L0089 1544 1303 JEQ DELM05 YES, JUMP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0079 L0090 1546 23A0 COC @NFDISP,R14 ARE WE IN N/F MODE? 1548 0058 L0091 154A 1602 JNE DELM10 NO, SKIP L0092 154C 0260 DELM05 ORI R0,>0800 YES, SET INCRUSTATION BIT 154E 0800 L0093 1550 D740 DELM10 MOVB R0,*VRAM Attribute to screen L0094 1552 21A0 COC @UNDLIN,R6 UNDERLINE SET? 1554 0066 L0095 1556 1303 JEQ ULINE2 YES, SEND BIT WITH DELIMITER L0096 1558 D760 MOVB @BYTE20,*VRAM Delimiter to screen 155A 0068 L0097 155C 045B RT L0098 155E D760 ULINE2 MOVB @BYTEA0,*VRAM SET UNDERLINE 1560 0087 L0099 1562 045B RT L0100 * L0101 * IN HOLD MODE L0102 * L0103 1564 2620 DHLD CZC @WD1800,R8 IN GRAPHICS? 1566 0074 L0104 1568 13E8 JEQ DELM NO, JUMP L0105 156A 9820 CB @BYTE7F,@HELDCH Held character a DEL ? 156C 0085 156E D09E L0106 1570 16E4 JNE DELM No - write a delimiter L0107 1572 C008 MOV R8,R0 Fetch attribute L0108 1574 0240 ANDI R0,>E000 Leave only the colour 1576 E000 L0109 1578 F020 SOCB @SERATR,R0 Add in other control bits 157A F055 L0110 157C 10DE JMP DELM L0111 * L0112 * Conceal L0113 * L0114 157E D249 CONCEL MOVB R9,R9 WRITING A HEADER? L0115 1580 1351 JEQ SPACE YES, WRITE A SPACE (OR HELD CHAR) L0116 1582 F820 SOCB @BYTE10,@SERATR Set mode to conceal 1584 0066 1586 F055 L0117 1588 10D2 JMP WRDELM WRITE A DELIMITER & RT L0118 * L0119 * END BOX L0120 * L0121 158A 814C ENDBOX C R12,R5 LAST CHAR ON ROW? L0122 158C 144B JHE SPACE YES, IGNORE L0123 158E 5820 SZCB @INC,@SERATR RESET THE INCRUSTATION BIT 1590 0064 1592 F055 L0124 1594 10CC JMP WRDELM AND WRITE THE DELIMITER L0125 * L0126 * START BOX L0127 * L0128 1596 982C BOX CB @-2(R12),@BYTE0B IS PREVIOUS CHAR. A BOX? 1598 FFFE 159A 007C L0129 159C 1643 JNE SPACE NO, IGNORE L0130 159E F820 SOCB @INC,@SERATR SET THE INCRUSTATION BIT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0080 15A0 0064 15A2 F055 L0131 15A4 10C4 JMP WRDELM AND WRITE THE DELIMITER L0132 * L0133 * Normal height L0134 * L0135 15A6 0248 SGLHGT ANDI R8,>FCFF Clear the double height bit 15A8 FCFF L0136 15AA 103C JMP SPACE AND RETURN FROM THERE L0137 * L0138 * ALPHA/MOSAIC SUBROUTINE - DEAL WITH ROW 24 FIRST L0139 * L0140 15AC 9809 AMOS CB R9,@BYTE18 ROW 24? 15AE 0074 L0141 15B0 1634 JNE AMOS50 NO, SKIP L0142 15B2 9820 CB @DISP24,@BYTE02 DISPLAY AS TRANSMITTED? 15B4 D09B 15B6 0060 L0143 15B8 1B30 JH AMOS50 YES, SKIP L0144 15BA C1C2 MOV R2,R7 GET THE COLOUR L0145 15BC 0917 SRL R7,1 TO LS BITS L0146 15BE 0247 ANDI R7,7 REMOVE GRAPHIC BIT (IF ANY) 15C0 0007 L0147 15C2 D027 MOVB @FTABLE-1(R7),R0 GET LAST ALP/MOS CONTROL 15C4 15FF L0148 15C6 9800 CB R0,@FTYPE SAME AS LAST TIME? 15C8 D09C L0149 15CA 1327 JEQ AMOS50 YES, TREAT AS NORMAL CHAR. L0150 15CC D800 MOVB R0,@FTYPE SET UP THIS COLOUR F KEY 15CE D09C L0151 15D0 0248 ANDI R8,>07FF Remove colour and set alpha 15D2 07FF L0152 15D4 0AD7 SLA R7,13 Colour to MS Nibble L0153 15D6 0247 ANDI R7,>E000 Leave only the colour 15D8 E000 L0154 15DA E207 SOC R7,R8 Set new colour L0155 15DC D1E0 MOVB @DISP24,R7 INVERSE VIDEO DISPLAY? 15DE D09B L0156 15E0 1304 JEQ AMOS10 YES, SKIP L0157 15E2 0247 ANDI R7,>0100 POSITION 2 15E4 0100 L0158 15E6 1603 JNE AMOS20 NO, SKIP L0159 15E8 04C0 CLR R0 SEND A SPACE L0160 15EA F220 AMOS10 SOCB @BYTE04,R8 SET INVERSE VIDEO 15EC 0062 L0161 15EE D748 AMOS20 MOVB R8,*VRAM SEND THE ATTRIBUTE L0162 15F0 21A0 COC @HELP,R6 IN HELP MODE? 15F2 0068 L0163 15F4 1302 JEQ AMOS40 YES, JUMP L0164 15F6 D740 MOVB R0,*VRAM SEND THE CHAR. L0165 15F8 045B RT RETURN L0166 * L0167 15FA D760 AMOS40 MOVB @BYTE00,*VRAM SEND A SPACE 15FC 004E L0168 15FE 045B RT L0169 * L0170 1600 1C FTABLE BYTE >1C RED NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0081 L0171 1601 1D BYTE >1D GREEN L0172 1602 1E BYTE >1E YELLOW L0173 1603 00 BYTE 0 BLUE L0174 1604 00 BYTE 0 MAGENTA L0175 1605 1F BYTE >1F CYAN L0176 1606 00 BYTE 0 WHITE L0177 * L0178 * Set flashing control bit L0179 * L0180 1608 C0CB FLASH MOV R11,R3 Save return address L0181 160A 06A0 BL @SPACE Write held character 160C 1624 L0182 160E 0268 ORI R8,>80 Set flash control bit 1610 0080 L0183 1612 0453 B *R3 RETURN L0184 * L0185 * Stop flashing mode L0186 * L0187 1614 0248 STEADY ANDI R8,>FF00 Clear flash control bit 1616 FF00 L0188 1618 1005 JMP SPACE AND RETURN FROM THERE L0189 * L0190 * Alpha or mosaic must reset the conceal mode L0191 * L0192 161A D020 AMOS50 MOVB @SERATR,R0 GET SERIAL ATTRIBUTE 161C F055 L0193 161E 2020 COC @WD1000,R0 In conceal mode ? 1620 0066 L0194 1622 1382 JEQ DLM Yes - jump L0195 * L0196 * Write held character L0197 * L0198 1624 D748 SPACE MOVB R8,*VRAM Write attribute L0199 1626 2220 COC @WD1000,R8 1628 0066 L0200 162A 1302 JEQ HELD L0201 162C 04C0 SPC CLR R0 Load space character L0202 162E 1007 JMP SENDSP L0203 1630 21A0 HELD COC @HOLD,R6 Held character required ? 1632 006A L0204 1634 16FB JNE SPC No - jump L0205 1636 C008 MOV R8,R0 Fetch attribute L0206 1638 0A80 SLA R0,8 Flash bit to MSByte L0207 163A F020 SOCB @HELDCH,R0 Add Held character 163C D09E L0208 163E D740 SENDSP MOVB R0,*VRAM Write character to screen L0209 1640 045B RT L0210 * L0211 * DOUBLE SIZE L0212 * L0213 1642 21A0 DBLSIZ COC @LEVEL2,R6 IN LEVEL 2 MODE? 1644 0064 L0214 1646 16EE JNE SPACE NO, EXIT L0215 1648 C0CB MOV R11,R3 L0216 164A 06A0 BL @SPACE 164C 1624 L0217 164E 04C0 CLR R0 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0082 L0218 1650 D009 MOVB R9,R0 Fetch row number L0219 1652 1320 JEQ DBLHE IF HEADER, ABORT L0220 1654 0280 CI R0,24*256 Is it the last row ? 1656 1800 L0221 1658 141D JHE DBLHE Yes - ignore double size L0222 165A 028C CI R12,ROWEND-1 Last character of row ? 165C F07F L0223 165E 131A JEQ DBLHE Yes - ignore double size L0224 1660 0268 ORI R8,>0200 SET DOUBLE WIDTH 1662 0200 L0225 1664 100D JMP DBLH10 DO THE DOUBLE HEIGHT L0226 * L0227 * Double height L0228 * L0229 1666 C0CB DBLHGT MOV R11,R3 Save return address L0230 1668 06A0 BL @SPACE Write held character 166A 1624 L0231 166C 0248 ANDI R8,>FFFF->0200 CLEAR DOUBLE WIDTH 166E FDFF L0232 1670 04C0 CLR R0 L0233 1672 D009 MOVB R9,R0 Fetch row number L0234 1674 130F JEQ DBLHE IF HEADER, ABORT L0235 1676 0280 CI R0,24*256 Is it the last row ? 1678 1800 L0236 167A 140C JHE DBLHE Yes - ignore double height L0237 167C 814C C R12,R5 Last character of row ? L0238 167E 140A JHE DBLHE Yes - ignore double height L0239 1680 9720 DBLH10 CB @BYTE0C,*R12 Is next char a normal height? 1682 007D L0240 1684 1307 JEQ DBLHE Yes - ignore double height L0241 1686 0268 ORI R8,>0100 Set double height control bit 1688 0100 L0242 168A D820 MOVB @BYTE00,@HELDCH Clear held character 168C 004E 168E D09E L0243 1690 E1A0 SOC @DHONRW,R6 Set double height flag 1692 004E L0244 1694 0453 DBLHE B *R3 RETURN L0245 * L0246 * DOUBLE WIDTH L0247 * L0248 1696 21A0 DBLWID COC @LEVEL2,R6 IN LEVEL 2 MODE? 1698 0064 L0249 169A 16C4 JNE SPACE NO, EXIT L0250 169C C0CB MOV R11,R3 L0251 169E 06A0 BL @SPACE 16A0 1624 L0252 16A2 0248 ANDI R8,>FFFF->0100 CLEAR DOUBLE HEIGHT 16A4 FEFF L0253 16A6 0268 ORI R8,>0200 SET DOUBLE WIDTH 16A8 0200 L0254 16AA D820 MOVB @BYTE00,@HELDCH Clear held character 16AC 004E 16AE D09E L0255 16B0 0453 B *R3 L0256 * L0257 * Contigous mosaic NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0083 L0258 * L0259 16B2 C0CB CTGMOS MOV R11,R3 Save return address L0260 16B4 06A0 BL @SPACE Write held character 16B6 1624 L0261 16B8 D820 MOVB @BYTE00,@GOSET Set contiguous mode 16BA 004E 16BC D09F L0262 16BE 41A0 SZC @UNDLIN,R6 CLEAR UNDERLINE 16C0 0066 L0263 16C2 0453 B *R3 L0264 * L0265 * Separated mosaic L0266 * L0267 16C4 C0CB SEPMOS MOV R11,R3 Save return address L0268 16C6 21A0 COC @LEVEL2,R6 IN LEVEL 2 MODE? 16C8 0064 L0269 16CA 1306 JEQ ULINE YES L0270 16CC 06A0 BL @SPACE Write held character 16CE 1624 L0271 16D0 D820 SEPMXT MOVB @BYTEE0,@GOSET Set SEPARATED mode 16D2 008A 16D4 D09F L0272 16D6 0453 B *R3 L0273 * L0274 16D8 E1A0 ULINE SOC @UNDLIN,R6 SET UNDERLINE 16DA 0066 L0275 16DC 06A0 BL @WRDELM WRITE A DELIMITER 16DE 152E L0276 16E0 10F7 JMP SEPMXT AND EXIT L0277 * L0278 * Hold mosaic L0279 * L0280 16E2 E1A0 HLDMOS SOC @HOLD,R6 Set hold mosaic flag 16E4 006A L0281 16E6 109E JMP SPACE L0282 * L0283 * Release mosaic L0284 * L0285 16E8 C0CB RELMOS MOV R11,R3 Save return address L0286 16EA 06A0 BL @SPACE Write held character 16EC 1624 L0287 16EE 41A0 SZC @HOLD,R6 Clear hold mosaic flag 16F0 006A L0288 16F2 0453 B *R3 L0289 16F4 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0084 0047 * 0048 * ASMIF BBC2 ##################################### 0049 COPY DATACAST.990 M0001 * M0002 * NOTE: THIS ROUTINE IS NOT A FULL DATACAST DECODE M0003 * M0004 * AUTHOR: COLIN HINSON M0005 * M0006 * M0007 * DISPLAY PACKET 31 M0008 * M0009 16F4 CE8B DTACST MOV R11,*R10+ SAVE RETURN ADR. M0010 16F6 41A0 SZC @PKT31,R6 CLEAR THE FLAG 16F8 0056 M0011 16FA 9820 CB @ROWST,@BYTE0B CHECK CORRECT CHANNEL 16FC F056 16FE 007C M0012 1700 1632 JNE DTACXT IF NOT, AVOID DISPLAY M0013 1702 9820 CB @ROWST+4,@CHANEL CHECK CORRECT ADDRESS 1704 F05A 1706 D09A M0014 1708 162E JNE DTACXT IF NOT, AVOID DISPLAY M0015 170A 06A0 BL @PRINT DATA TO PRINT BUFFER 170C 19F8 M0016 170E 21A0 COC @DCAST,R6 DISPLAY ALLOWED? 1710 0058 M0017 1712 1629 JNE DTACXT NO, EXIT M0018 1714 D260 MOVB @P31ROW,R9 GET THE ROW TO WRITE TO 1716 D09D M0019 1718 0289 CI R9,24*256 CHECK IN RANGE 171A 1800 M0020 171C 1A04 JL DTAC10 YES M0021 171E 0209 LI R9,1*256 NO, RESET TO ONE 1720 0100 M0022 1722 C809 MOV R9,@P31ROW RESET THE STORED ROW 1724 D09D M0023 * M0024 1726 C160 DTAC10 MOV @PKTEND,R5 POINT TO END OF DATA 1728 D05C M0025 172A C320 MOV @PKTSTT,R12 POINT TO START OF DATA 172C D05A M0026 172E 8305 C R5,R12 ANY CHARACTERS TO SHOW? M0027 1730 131A JEQ DTACXT NO, ABORT M0028 * M0029 * REMOVE ANY CONTROL CHARACTERS M0030 * M0031 1732 0201 LI R1,' '*256 1734 2000 M0032 1736 814C DIS320 C R12,R5 END OF ROW? M0033 1738 1405 JHE DIS330 YES M0034 173A 907C CB *12+,R1 CHECK FOR CONTROL M0035 173C 14FC JHE DIS320 IF OK, NEXT CHARACTER M0036 173E DB01 MOVB R1,@-1(R12) SET TO A SPACE 1740 FFFF M0037 1742 10F9 JMP DIS320 M0038 * M0039 * PUT ROW ON THE SCREEN NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0085 M0040 * M0041 1744 C320 DIS330 MOV @PKTSTT,R12 RESET START POINTER 1746 D05A M0042 1748 06A0 BL @P31ENT GO DISPLAY 174A 1376 M0043 174C B820 AB @BYTE01,@P31ROW 174E 005E 1750 D09D M0044 * M0045 * CLEAR THE REST OF THE ROW M0046 * M0047 1752 0205 LI R5,ROWST+42 POINT TO END OF STORE 1754 F080 M0048 1756 6160 S @PKTEND,R5 COMPUTE BYTES TO WRITE 1758 D05C M0049 175A 1305 JEQ DTACXT IF ZERO, EXIT M0050 175C 04C0 CLR R0 M0051 175E D740 DIS340 MOVB R0,*VRAM SEND ATR. M0052 1760 D740 MOVB R0,*VRAM SEND CHAR. M0053 1762 0605 DEC R5 M0054 1764 16FC JNE DIS340 M0055 1766 064A DTACXT DECT R10 M0056 1768 C2DA MOV *R10,R11 M0057 176A 045B RT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0086 0051 * ASMEND ##################################### 0052 * 0053 COPY GENCAR.990 N0001 ************************************************************ N0002 * GENCAR * N0003 ************************************************************ N0004 * N0005 * N0006 * Down load normal character set N0007 * N0008 176C C10B GENCAR MOV R11,R4 N0009 176E 0200 LI R0,BAGC0+2 Point to start of char gen 1770 0000 N0010 1772 2C00 SETA R0 Set VDP pointer N0011 1774 04C0 CLR R0 N0012 1776 0205 LI R5,GEN0 Start of character table 1778 23D2 N0013 * N0014 177A D775 GENC10 MOVB *R5+,*VRAM GET BYTE FROM TABLE N0015 177C 0285 GENC15 CI R5,GENEND CHECK FOR END 177E 28D2 N0016 1780 1AFC JL GENC10 N0017 1782 1000 JMP GENE2 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0087 N0019 ************************************************************ N0020 * GENE2 * N0021 * Generate GENE2 - Block Graphics * N0022 * * N0023 * This routine has been completely re-written so as to gain* N0024 * speed and code. * N0025 * Colin Hinson 20.07.83 * N0026 * * N0027 * This routine has been completely re-written so as to gain* N0028 * speed and code for the second time (from a routine by * N0029 * Trevor Jones) Colin Hinson 24.02.87 * N0030 ************************************************************ N0031 0002 CHRCNT EQU R2 N0032 0003 LCNT EQU R3 N0033 * R4 RETURN ADDRESS N0034 * R5 GRAPHICS SHAPE DATA N0035 0006 LHBIT EQU R6 N0036 0007 RHBIT EQU R7 N0037 * R8 USED AS ADDRESS STORE N0038 * N0039 1784 0200 GENE2 LI R0,BAGC3+2 Start adr of GEN 3 1786 0500 N0040 1788 C200 MOV R0,R8 SAVE N0041 178A 2C00 SETA R0 SET VDP POINTER N0042 178C 0203 LI LCNT,10 CHAR. LINE COUNT 178E 000A N0043 1790 0206 LI LHBIT,>1000 SET UP LH BIT FOR BIT TEST 1792 1000 N0044 1794 0207 LI RHBIT,>4000 SET UP RH BIT FOR BIT TEST 1796 4000 N0045 1798 04C2 NXTBLK CLR CHRCNT CHARACTER COUNT N0046 179A 20E0 COC @WD0003,LCNT DOING LINES 3 OR 7? 179C 0070 N0047 179E 1606 JNE NXTLIN NO, SKIP N0048 * N0049 17A0 0926 SRL LHBIT,2 N0050 17A2 0917 SRL RHBIT,1 N0051 17A4 0917 SHFTIT SRL RHBIT,1 N0052 17A6 21E0 COC @WD1000,RHBIT DOING LAST BIT? 17A8 0066 N0053 17AA 13FC JEQ SHFTIT YES, JUMP N0054 * N0055 17AC 04C5 NXTLIN CLR R5 CLEAR LINE VALUE N0056 17AE 2086 COC LHBIT,CHRCNT CHECK FOR BIT N0057 17B0 1602 JNE NLBIT SKIP IF NOT SET N0058 17B2 0205 LI R5,>F000 LOAD LEFT BIT GRAPHICS 17B4 F000 N0059 17B6 2087 NLBIT COC RHBIT,CHRCNT CHECK FOR BIT N0060 17B8 1602 JNE NRBIT SKIP IF NOT SET N0061 17BA 0265 ORI R5,>0F00 LOAD RIGHT BIT GRAPHICS 17BC 0F00 N0062 17BE 20A0 NRBIT COC @WD2000,CHRCNT DOING CONTIGUOUS GRAPHICS? 17C0 0068 N0063 17C2 1309 JEQ WRITIT YES, SKIP N0064 17C4 0245 ANDI R5,>7700 GENERATE SEPARATED GRAPHICS 17C6 7700 N0065 17C8 0283 CI LCNT,10 DOING LINE 10? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHANGE DISPLAY MODE PAGE 0088 17CA 000A N0066 17CC 1303 JEQ CLRIT YES, SKIP N0067 17CE 20E0 COC @WD0003,LCNT DOING LINES 3 OR 7? 17D0 0070 N0068 17D2 1601 JNE WRITIT NO, SKIP N0069 17D4 04C5 CLRIT CLR R5 CLEAR GRAPICS VALUE N0070 17D6 D745 WRITIT MOVB R5,*VRAM WRITE LINE TO VDP N0071 17D8 0222 AI CHRCNT,>0100 POINT TO NEXT CHAR. 17DA 0100 N0072 17DC 0282 CI CHRCNT,>8000 END OF CHAR. GENERATOR? 17DE 8000 N0073 17E0 1AE5 JL NXTLIN NO, LOOP N0074 17E2 0603 DEC LCNT UPDATE LINE COUNTER N0075 17E4 16D9 JNE NXTBLK LOOP TILL DONE N0076 * N0077 17E6 0454 B *R4 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 CHARACTER GENERATOR ROUTINES PAGE 0089 0056 COPY HAMTAB.990 O0002 OPTION BUNLST O0003 * AUTHOR: COLIN HINSON O0004 0080 BAD EQU >80 O0005 17E8 C1 HAMTAB BYTE >C1,BAD,>01,>C1,BAD,>C0,>C1,BAD 0-7 O0006 17F0 80 BYTE BAD,>C2,>C1,BAD,>CA,BAD,BAD,>C7 8->F O0007 17F8 80 BYTE BAD,>C0,>C1,BAD,>C0,>00,BAD,>C0 >10->17 O0008 1800 C6 BYTE >C6,BAD,BAD,>CB,BAD,>C0,>C3,BAD >18->1F O0009 1808 80 BYTE BAD,>CC,>C1,BAD,>C4,BAD,BAD,>C7 >20->27 O0010 1810 C6 BYTE >C6,BAD,BAD,>C7,BAD,>C7,>C7,>07 >28->2F O0011 1818 C6 BYTE >C6,BAD,BAD,>C5,BAD,>C0,>CD,BAD >30->37 O0012 1820 06 BYTE >06,>C6,>C6,BAD,>C6,BAD,BAD,>C7 >38->3F O0013 * O0014 1828 80 BYTE BAD,>C2,>C1,BAD,>C4,BAD,BAD,>C9 >40->47 O0015 1830 C2 BYTE >C2,>02,BAD,>C2,BAD,>C2,>C3,BAD >48->4F O0016 1838 C8 BYTE >C8,BAD,BAD,>C5,BAD,>C0,>C3,BAD >50->57 O0017 1840 80 BYTE BAD,>C2,>C3,BAD,>C3,BAD,>03,>C3 >58->5F O0018 1848 C4 BYTE >C4,BAD,BAD,>C5,>04,>C4,>C4,BAD >60->67 O0019 1850 80 BYTE BAD,>C2,>CF,BAD,>C4,BAD,BAD,>C7 >68->6F O0020 1858 80 BYTE BAD,>C5,>C5,>05,>C4,BAD,BAD,>C5 >70->77 O0021 1860 C6 BYTE >C6,BAD,BAD,>C5,BAD,>CE,>C3,BAD >78->7F O0022 * O0023 1868 80 BYTE BAD,>CC,>C1,BAD,>CA,BAD,BAD,>C9 >80->87 O0024 1870 CA BYTE >CA,BAD,BAD,>CB,>0A,>CA,>CA,BAD >88->8F O0025 1878 C8 BYTE >C8,BAD,BAD,>CB,BAD,>C0,>CD,BAD >90->97 O0026 1880 80 BYTE BAD,>CB,>CB,>0B,>CA,BAD,BAD,>CB >98->9F O0027 1888 CC BYTE >CC,>0C,BAD,>CC,BAD,>CC,>CD,BAD >A0->A7 O0028 1890 80 BYTE BAD,>CC,>CF,BAD,>CA,BAD,BAD,>C7 >A8->AF O0029 1898 80 BYTE BAD,>CC,>CD,BAD,>CD,BAD,>0D,>CD >B0->B7 O0030 18A0 C6 BYTE >C6,BAD,BAD,>CB,BAD,>CE,>CD,BAD >B8->BF O0031 * O0032 18A8 C8 BYTE >C8,BAD,BAD,>C9,BAD,>C9,>C9,>09 >C0->C7 O0033 18B0 80 BYTE BAD,>C2,>CF,BAD,>CA,BAD,BAD,>C9 >C8->CF O0034 18B8 08 BYTE >08,>C8,>C8,BAD,>C8,BAD,BAD,>C9 >D0->D7 O0035 18C0 C8 BYTE >C8,BAD,BAD,>CB,BAD,>CE,>C3,BAD >D8->DF O0036 18C8 80 BYTE BAD,>CC,>CF,BAD,>C4,BAD,BAD,>C9 >E0->E7 O0037 18D0 CF BYTE >CF,BAD,>0F,>CF,BAD,>CE,>CF,BAD >E8->EF O0038 18D8 C8 BYTE >C8,BAD,BAD,>C5,BAD,>CE,>CD,BAD >F0->F7 O0039 18E0 80 BYTE BAD,>CE,>CF,BAD,>CE,>0E,BAD,>FF >F8->FF NO NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 HAMMING CONVERSION TABLES PAGE 0090 0059 COPY ENCODE.990 P0001 ************************************************************ P0002 * * P0003 * ENCODE - Keyboard scanner * P0004 * * P0005 * Preconditions: * P0006 * * P0007 * Postconditions: KEY IS IN R1 LSB IF PRESSED * P0008 * * P0009 * Called by: KEY * P0010 * * P0011 * Calls: None * P0012 * * P0013 * Local variables: * P0014 * * P0015 * Global variables: * P0016 * * P0017 * Comments: It should be noted that if a key has * P0018 * not been pressed then this routine * P0019 * will return directly to the routine * P0020 * which called KEY * P0021 * * P0022 * AUTHOR: COLIN HINSON * P0023 ************************************************************ P0024 * P0025 * Keyboard codes look up table P0026 * P0027 18E8 10 CLAVTB BYTE >10,>24,>25,>17,>0A,>1E,>19,>13 P0028 18F0 00 BYTE >00,>01,>04,>07,>0B,>1F,>1B,>14 P0029 18F8 FF BYTE >FF,>02,>05,>08,>0C,>23,>1D,>15 LAST KEY USED P0030 1900 22 BYTE >22,>03,>06,>09,>0D,>21,>1C,>16 P0031 1908 26 BYTE >26,>12,>11,>0F,>0E,>20,>1A,>18 P0032 * P0033 * The keyboard layout P0034 * P0035 * TEXT MIX PICT REVL A HELP CLR PG RED P0036 * 0 1 4 7 B DUMP RESET GREEN P0037 * --- 2 5 8 C QTY LEV 2 YELLOW P0038 * NXT PG 3 6 9 D DELP D.CAST CYAN P0039 * RW24 BACK FWD F E LTST ALOC INDEX P0040 * P0041 1910 04C0 ENCODE CLR R0 P0042 1912 020C LI R12,KBDCRU POINT TO 259 1914 0380 P0043 1916 3180 LDCR R0,6 SET ALL 6 O/PS TO ZERO P0044 1918 3600 STCR R0,8 READ INPUTS P0045 191A 0280 CI R0,>FF00 KEY DOWN? 191C FF00 P0046 191E 160E JNE KEYDWN YES, JUMP P0047 1920 9820 CB @BYTE00,@KEYFLG DEBOUNCING A KEY? 1922 004E 1924 D092 P0048 1926 1307 JEQ KBDRTN NO, ABORT P0049 1928 B820 AB @BYTEFF,@KEYFLG DECREMENT DELAY COUNT 192A 008D 192C D092 P0050 192E 1603 JNE KBDRTN JUMP IF NOT FULLY DE-BOUNCED NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 HAMMING CONVERSION TABLES PAGE 0091 P0051 1930 D820 MOVB @BYTE00,@KEYPRO ALLOW KEY TO BE PRESSED 1932 004E 1934 D093 P0052 1936 064A KBDRTN DECT R10 P0053 1938 C2DA MOV *R10,R11 P0054 193A 045B B *R11 P0055 * P0056 193C 9820 KEYDWN CB @KEYPRO,@BYTE00 KEY ALREADY PROCESSED? 193E D093 1940 004E P0057 1942 16F9 JNE KBDRTN YES, ABORT P0058 1944 B820 AB @BYTE01,@KEYFLG INCREMENT DELAY COUNT 1946 005E 1948 D092 P0059 194A 9820 CB @KEYFLG,@BYTE10 DEBOUNCE TIME REACHED? 194C D092 194E 0066 P0060 1950 1AF2 JL KBDRTN NO, ABORT P0061 1952 D820 MOVB @BYTEFF,@KEYPRO SET KEY PROCESSED FLAG 1954 008D 1956 D093 P0062 * P0063 * READ IN THE KEY VALUE P0064 * P0065 1958 0201 LI R1,>FEFF SET UP MASK 195A FEFF P0066 195C 04C0 CLR R0 P0067 195E 3181 NXROW LDCR R1,6 OUTPUT ONE COLUMN P0068 1960 3600 STCR R0,8 READ INPUTS P0069 1962 0280 CI R0,>FF00 TEST FOR ACTIVE KEY 1964 FF00 P0070 1966 1605 JNE KOLONN FOUND, JUMP P0071 1968 0A11 SLA R1,1 ROTATE THE COLUMN MASK P0072 196A 0281 CI R1,>BF00 IF MORE COLS, LOOP 196C BF00 P0073 196E 14F7 JHE NXROW P0074 1970 10E2 JMP KBDRTN NO KEY, ABORT P0075 * P0076 * R1 NOW CONTAINS THE OUTPUT COLUMN, R0 THE INPUT ROW P0077 * KEY PRESSED IS 8 TIMES BIT POSITION IN R1, PLUS P0078 * BIT POSITION IN R0 P0079 * P0080 1972 0981 KOLONN SRL R1,8 MOVE TO LSB P0081 1974 0980 SRL R0,8 MOVE TO LSB P0082 1976 0202 LI R2,-8 INIT TO -8 1978 FFF8 P0083 197A 0222 NFND1 AI R2,8 197C 0008 P0084 197E 0911 SRL R1,1 TEST LS BIT P0085 1980 18FC JOC NFND1 LOOP TILL ZERO FALLS OUT P0086 1982 0602 DEC R2 COMPENSATE FOR FOLLOWING INC. P0087 1984 0582 NFND2 INC R2 P0088 1986 0910 SRL R0,1 TEST LSBIT P0089 1988 18FD JOC NFND2 P0090 198A D062 MOVB @CLAVTB(R2),R1 GET ASCII OF KEY FROM TABLE 198C 18E8 P0091 198E 11D3 JLT KBDRTN IF NOT, ABORT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 HAMMING CONVERSION TABLES PAGE 0092 P0092 1990 0981 SRL R1,8 MOVE TO LSB P0093 1992 045B RT P0094 1994 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 KEYBOARD SCANNER AND ENCODER PAGE 0093 0062 COPY INTERUPT.990 Q0002 ************************************************************ Q0003 * * Q0004 * THE INTERRUPT ROUTINES USE OVERLAPPING WORKSPACES: * Q0005 * * Q0006 * ------------------------------------------------- * Q0007 * |0 |1 | 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|13|14|15| INT1WS* Q0008 *--------------------------------------------------- * Q0009 * 9|10|11|12|13|14|15| WORKS2 * Q0010 *--------------------- * Q0011 ************************************************************ Q0012 ************************************************************ Q0013 * * Q0014 * INT232 - TMS9902 (RS232) INTERRUPT ROUTINE * Q0015 * (INTERRUPT 1) * Q0016 * * Q0017 * R6 CONTAINS CONTROL FLAGS * Q0018 * R7 CONTAINS CHARACTER FOR BUFFER * Q0019 * R8 CONTAINS PRINT BUFFER END ADR.+1 * Q0020 * R9I CONTAINS PRINT BUFFER START ADR. * Q0021 * R10I WORK REGISTER * Q0022 * R11I CONTAINS RETURN ADR (FOR BL) * Q0023 * R12I SET UP DURING INITIALISATION * Q0024 * * Q0025 * AUTHOR: COLIN HINSON * Q0026 ************************************************************ Q0027 * Q0028 * EQUATES FOR TMS9902 CRU BITS Q0029 * Q0030 * OUTPUT BITS Q0031 * Q0032 0010 RTSON EQU 16 Q0033 0012 RIENB EQU 18 RX INTERRUPT ENABLE Q0034 0013 XBIENB EQU 19 TX INTERRUPT ENABLE Q0035 * Q0036 * INPUT BITS Q0037 * Q0038 0010 RBINT EQU 16 RX BUFFER INTERRUPT FLAG Q0039 0011 XBINT EQU 17 TX BUFFER INTERRUPT FLAG Q0040 * Q0041 * WE COME HERE WHEN WE RECEIVE AN LEVEL 1 INTERRUPT. Q0042 * AS THE 9902 IS AT LEVEL 1, WE THEN HAVE TO SORT Q0043 * OUT WHICH PART (I.E. TX OR RX) CAUSED THE INTERRUPT Q0044 * Q0045 1994 1F10 INT1 TB RBINT RX INTERRUPT? Q0046 1996 131F JEQ RXINT YES, JUMP Q0047 1998 1F11 TB XBINT TX INT.? Q0048 199A 161A JNE FIXINT NO, ABORT Q0049 * Q0050 * DEAL WITH THE TX INTERRUPT. Q0051 * R8I SHOULD BE POINTING TO THE LAST CHAR IN THE Q0052 * BUFFER +1, R9I SHOULD BE POINTING TO THE NEXT CHAR Q0053 * TO BE TRANSMITTED. Q0054 * Q0055 199C 21A0 COC @BEMPTY,R6I IS THE BUFFER EMPTY? 199E 0050 Q0056 19A0 1312 JEQ KILL1 YES, KILL THE INTERRUPTS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 INTERRUPT ROUTINES PAGE 0094 Q0057 19A2 21A0 COC @TXHALT,R6I TX HALT REQUESTED? 19A4 004E Q0058 19A6 130F JEQ KILL1 YES, KILL OFF INTERRUPTS (TX) Q0059 19A8 D2B9 MOVB *R9I+,R10I GET NEXT BYTE IN BUFFER Q0060 19AA 41A0 SZC @PBFULL,R6I SET BUFFER NOT FULL 19AC 0052 Q0061 * Q0062 * THE FOLLOWING THREE INSTRUCTIONS SEND A CHARACTER TO Q0063 * THE PRINTER. Q0064 * Q0065 19AE 1D10 SBO RTSON TURN RTS ON Q0066 19B0 320A LDCR R10I,8 SEND TO PRINTER Q0067 19B2 1E10 SBZ RTSON TURN RTS OFF Q0068 * Q0069 * HAVING TRANSMITTED A CHARACTER, CHECK THE BUFFER Q0070 * Q0071 19B4 0289 CI R9I,PBFEND REACHED END OF BUFFER? 19B6 E000 Q0072 19B8 1A02 JL INT110 NO Q0073 19BA 0209 LI R9I,PRNTBF YES, RESET TO START 19BC D0A0 Q0074 19BE 8209 INT110 C R9I,R8I REACHED WRITE POINTER? Q0075 19C0 1606 JNE I1RTWP NO, EXIT Q0076 19C2 E1A0 SOC @BEMPTY,R6I SET BUFFER EMPTY 19C4 0050 Q0077 19C6 1E13 KILL1 SBZ XBIENB KILL TRANSMIT INTERRUPTS Q0078 19C8 4820 SZC @NOHDR,@WSP+R14+R14 ALLOW HEADERS 19CA 004E 19CC F01C Q0079 19CE 0380 I1RTWP RTWP AND RETURN FROM INTERRUPT Q0080 * Q0081 19D0 1E14 FIXINT SBZ 20 KILL ANY SPURIOUS INTERRUPTS Q0082 19D2 1E15 SBZ 21 Q0083 19D4 0380 RTWP Q0084 * Q0085 * Q0086 * RECEIVER INTERRUPTS Q0087 * A CHARACTER RX'D BY THE 9902 CAN COME FROM THE PRINTER, Q0088 * REQUESTING A TRANSMIT OFF, TRANSMIT ON OPERATION. Q0089 * Q0090 19D6 04CA RXINT CLR R10I FOR BYTE MOVE Q0091 19D8 360A STCR R10I,8 GET CHAR. FROM RX BUFFER Q0092 19DA 1D12 SBO 18 CLEAR THE INTERRUPT Q0093 19DC 028A CI R10I,>1100 X-ON RX'D? 19DE 1100 Q0094 19E0 1604 JNE RXINT2 NO, JUMP Q0095 19E2 41A0 SZC @TXHALT,R6I CLEAR FLAG, ALLOW TRANSMISSION 19E4 004E Q0096 19E6 1D13 SBO XBIENB ALLOW TRANSMIT INTERRUPTS Q0097 19E8 0380 RTWP RETURN FROM INTERRUPT Q0098 * Q0099 19EA 028A RXINT2 CI R10I,>1300 X-OFF RX'D? 19EC 1300 Q0100 19EE 1603 JNE RXIXIT NO, ABORT Q0101 19F0 E1A0 SOC @TXHALT,R6I SET FLAG TO KILL TRANSMISSION 19F2 004E Q0102 19F4 1E13 SBZ XBIENB STOP TRANSMIT INTERRUPTS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 INTERRUPT ROUTINES PAGE 0095 Q0103 19F6 0380 RXIXIT RTWP Q0104 ************************************************************ Q0105 * * Q0106 * DUMP THE DATA FROM THE ROW STORE INTO THE PRINT * Q0107 * BUFFER. AS WE ARE USING THE INT1 WORKSPACE, AND * Q0108 * THE INTERRUPT IS DISABLED, R13,R14,& R15 ARE * Q0109 * AVAILABLE FOR USE. * Q0110 * * Q0111 ************************************************************ Q0112 19F8 0300 PRINT LIMI 0 KILL INTERRUPTS 19FA 0000 Q0113 19FC 02E0 LWPI INT1WS INTERRUPT WORKSPACE 19FE F0DA Q0114 1A00 C360 MOV @PKTSTT,R13I GET THE START OF THE DATA 1A02 D05A Q0115 1A04 C3A0 MOV @PKTEND,R14I GET THE END OF THE DATA 1A06 D05C Q0116 1A08 838D C R13I,R14I ARE THEY THE SAME? Q0117 1A0A 1305 JEQ PRNXIT YES, ABORT Q0118 1A0C D1FD PRIN20 MOVB *R13I+,R7I GET A BYTE Q0119 1A0E 06A0 BL @BUFBYT BYTE TO BUFFER 1A10 1A9A Q0120 1A12 838D C R13I,R14I REACHED END OF DATA? Q0121 1A14 1AFB JL PRIN20 NO, LOOP Q0122 * Q0123 1A16 02E0 PRNXIT LWPI WSP BACK TO NORMAL WORKSPACE 1A18 F000 Q0124 1A1A 0300 LIMI MAXINT ALLOW INTERRUPTS 1A1C 0001 Q0125 1A1E 045B ABTPNT RT AND RETURN TO CALLER Q0126 ************************************************************ Q0127 * ###################### FOR CHRIS #################### * Q0128 * PUT A HASH CHARACTER INTO THE PRINT BUFFER * Q0129 * - COUNT TEN OF THEM, THEN OUTPUT A DOLLAR * Q0130 ************************************************************ Q0131 1A20 05A0 PTHASH INC @HSHCNT ADD A HASH 1A22 D066 Q0132 1A24 8820 C @HSHCNT,@TEN HAVE WE HAD TEN? 1A26 D066 1A28 0044 Q0133 1A2A 1AF9 JL ABTPNT NO, RETURN TO CALLER Q0134 * Q0135 1A2C 04E0 CLR @HSHCNT CLEAR THE COUNTER 1A2E D066 Q0136 1A30 0300 LIMI 0 KILL INTERRUPTS 1A32 0000 Q0137 1A34 02E0 LWPI INT1WS INTERRUPT WORKSPACE 1A36 F0DA Q0138 1A38 0207 LI R7I,'$ ' LOAD A DOLLAR SIGN 1A3A 2420 Q0139 1A3C 06A0 BL @BUFBYT BYTE TO BUFFER 1A3E 1A9A Q0140 1A40 10EA JMP PRNXIT AND EXIT Q0141 ************************************************************ Q0142 * Q0143 * PUT A COLON INTO THE PRINT BUFFER Q0144 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 INTERRUPT ROUTINES PAGE 0096 Q0145 ************************************************************ Q0146 1A42 0300 PCOLON LIMI 0 KILL INTERRUPTS 1A44 0000 Q0147 1A46 02E0 LWPI INT1WS INTERRUPT WORKSPACE 1A48 F0DA Q0148 1A4A 0207 LI R7I,': ' LOAD A DOLLAR SIGN 1A4C 3A20 Q0149 1A4E 06A0 BL @BUFBYT BYTE TO BUFFER 1A50 1A9A Q0150 1A52 10E1 JMP PRNXIT AND EXIT Q0151 ************************************************************ Q0152 * Q0153 * PUT THE ROW NUMBER IN THE PRINT BUFFER, BUT FIRST O/P Q0154 * ANY REMAINING HASHES. Q0155 * Q0156 ************************************************************ Q0157 1A54 0300 PTROWN LIMI 0 KILL INTERRUPTS 1A56 0000 Q0158 1A58 02E0 LWPI INT1WS INTERRUPT WORKSPACE 1A5A F0DA Q0159 * Q0160 * NEED TO OUTPUT ANY SAVED 'HASHES' BEFORE THE ROW NUMBER Q0161 * Q0162 1A5C C3E0 MOV @HSHCNT,R15I GET THE NUMBER OF HASHES 1A5E D066 Q0163 1A60 1307 JEQ PTROW4 IF ZERO, SKIP Q0164 1A62 0207 LI R7I,'# ' LOAD A HASH CODE 1A64 2320 Q0165 1A66 06A0 OPHS20 BL @BUFBYT BYTE TO BUFFER 1A68 1A9A Q0166 1A6A 0620 DEC @HSHCNT UPDATE THE COUNTER 1A6C D066 Q0167 1A6E 16FB JNE OPHS20 TILL IT REACHES ZERO Q0168 ************************************************************ Q0169 * Q0170 * PUT A ROW NUMBER IN THE PRINT BUFFER HAVING CONVERTED IT Q0171 * TO 2 DIGIT ASCII - DO THIS THE CRUDE BUT FAST WAY!! Q0172 * THE ROW NUMBER IS IN R9 IN MAIN WORKSPACE Q0173 * Q0174 ************************************************************ Q0175 1A70 04CF PTROW4 CLR R15I CLEAR THE COUNT Q0176 1A72 D3E0 MOVB @WSP+R9+R9,R15I GET ROW NUMBER 1A74 F012 Q0177 1A76 022F PTROW5 AI R15I,(-10*256)+1 SUBTRACT 10 FROM MSB, ADD 1 TO 1A78 F601 Q0178 1A7A 15FD JGT PTROW5 IF NOT NEGATIVE, LOOP Q0179 1A7C 022F AI R15I,(10*256-1)+>3030 WENT TOO FAR, BACK UP, +AS 1A7E 3A2F Q0180 1A80 06CF SWPB R15I TENS AT LEFT, UNITS AT RIGHT! Q0181 1A82 C80F MOV R15I,@ROWDTA SAVE ROW NUMBER 1A84 D062 Q0182 1A86 020D LI R13I,CRDATA POINT TO NEW LINE DATA 1A88 D060 Q0183 1A8A 020E LI R14I,CRDATA+5 GET THE END OF THE DATA 1A8C D065 Q0184 1A8E D1FD PTRN20 MOVB *R13I+,R7I GET A BYTE Q0185 1A90 06A0 BL @BUFBYT BYTE TO BUFFER NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 INTERRUPT ROUTINES PAGE 0097 1A92 1A9A Q0186 1A94 838D C R13I,R14I REACHED END OF DATA? Q0187 1A96 1AFB JL PTRN20 NO, LOOP Q0188 1A98 10BE JMP PRNXIT GO PUT ROW TERMINATION IN BUFFER Q0189 *********************************************************** Q0190 * Q0191 * PUT THE BYTE IN R7 IN THE PRINT BUFFER Q0192 * IF THE BUFFER DOES NOT BECOME FULL, THEN RETURN TO CALLER Q0193 * IF BUFFER IS FULL, OR BECOMES FULL, THEN RETURN TO Q0194 * ROUTINE WHICH CALLED THE PRINT ROUTINE. Q0195 * Q0196 *********************************************************** Q0197 1A9A 21A0 BUFBYT COC @PBFULL,R6I IS THE BUFFER FULL? 1A9C 0052 Q0198 1A9E 1313 JEQ BUFABT YES, ABORT Q0199 1AA0 21A0 COC @BEMPTY,R6I IS THE BUFFER EMPTY? 1AA2 0050 Q0200 1AA4 1606 JNE BUFB10 NO Q0201 1AA6 41A0 SZC @BEMPTY,R6I SET BUFFER NOT EMPTY 1AA8 0050 Q0202 1AAA 21A0 COC @TXHALT,R6I IS TRANSMISSION HALTED? 1AAC 004E Q0203 1AAE 1301 JEQ BUFB10 YES Q0204 1AB0 1D13 SBO XBIENB ALLOW TRANSMIT INTERRUPTS Q0205 1AB2 DE07 BUFB10 MOVB R7I,*R8I+ BYTE TO BUFFER Q0206 1AB4 0288 CI R8I,PBFEND AT END OF BUFFER AREA? 1AB6 E000 Q0207 1AB8 1A02 JL BUFB30 NO Q0208 1ABA 0208 LI R8I,PRNTBF RESET TO BUFFER START 1ABC D0A0 Q0209 1ABE 8248 BUFB30 C R8I,R9I REACHED READ POINTER? Q0210 1AC0 1606 JNE BUFBXT NO, RETURN TO CALLER Q0211 1AC2 E1A0 SOC @PBFULL,R6I SET BUFFER FULL FLAG 1AC4 0052 Q0212 * Q0213 1AC6 02E0 BUFABT LWPI WSP BACK TO NORMAL WORKSPACE 1AC8 F000 Q0214 1ACA 0300 LIMI MAXINT ALLOW INTERRUPTS 1ACC 0001 Q0215 1ACE 045B BUFBXT RT AND RETURN TO CALLER NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 INTERRUPT ROUTINES PAGE 0098 0064 COPY RWPAGE.990 R0002 ************************************************************ R0003 * * R0004 * RWPAGE - Rewrites the current page to the * R0005 * screen * R0006 * * R0007 * Preconditions: * R0008 * * R0009 * Postconditions: * R0010 * * R0011 * Called by: * R0012 * * R0013 * Calls: * R0014 * * R0015 * AUTHOR: COLIN HINSON * R0016 ************************************************************ R0017 * R0018 1AD0 C060 RWPAGE MOV @DISADR,R1 GET DISPLAY RAM START 1AD2 F04E R0019 1AD4 1601 JNE CHKNFS R0020 1AD6 045B RT IF NONE AVAILABLE, EXIT R0021 * R0022 * CHECK FOR SUBTITLE MODE, AND DEAL WITH A MODE CHANGE R0023 * R0024 1AD8 CE8B CHKNFS MOV R11,*R10+ R0025 * R0026 1ADA D820 MOVB @DISMAP,@MAPPER SET UP THE MAPPER 1ADC F054 1ADE FC00 R0027 1AE0 D021 MOVB @5(R1),R0 GET THE N/F & S/T BITS 1AE2 0005 R0028 1AE4 04E0 CLR @MAPPER 1AE6 FC00 R0029 * R0030 * SET TO CONCEAL R0031 * R0032 1AE8 D820 MOVB @CM2,@VDPREG POINT TO CM2 IN VDP 1AEA 0078 1AEC F800 R0033 1AEE F820 SOCB @CNCEAL,@CM2DTA SET UP CONCEAL 1AF0 0068 1AF2 D097 R0034 1AF4 D820 MOVB @CM2DTA,@VDPREG SEND CM2 DATA 1AF6 D097 1AF8 F800 R0035 * R0036 1AFA 06A0 BL @NFMODE GO ENSURE CORRECT MODE 1AFC 1268 R0037 1AFE 1B04 DATA CHKN10 WHERE TO GO IF MODE CHANGE R0038 1B00 06A0 BL @WRITEP RE-WRITE THE PAGE 1B02 1B0A R0039 1B04 064A CHKN10 DECT R10 R0040 1B06 C2DA MOV *R10,R11 R0041 1B08 045B RT R0042 * R0043 * RE-WRITE THE PAGE TO THE SCREEN R0044 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0099 R0045 1B0A CE8B WRITEP MOV R11,*R10+ SAVE RETURN R0046 1B0C C1E0 MOV @DISADR,R7 GET DISPLAY RAM START 1B0E F04E R0047 1B10 0227 AI R7,COUNTS POINT TO ROW COUNTERS 1B12 0410 R0048 * R0049 * CLEAR THE DOUBLE HEIGHT FLAGS R0050 * R0051 1B14 41A0 SZC @DHONRW,R6 CLEAR D/H FLAG 1B16 004E R0052 1B18 0201 LI R1,DHTFGS CLEAR THE D/H FLAGS 1B1A D068 R0053 1B1C 0209 LI R9,24 1B1E 0018 R0054 1B20 04F1 RWPG70 CLR *R1+ R0055 1B22 0649 DECT R9 R0056 1B24 16FD JNE RWPG70 R9 CLEAR AT END! R0057 1B26 1029 JMP RWR100 R0058 * R0059 * WRITE 24 ROWS OF PAGE (ROW ZERO ALREADY DEALT WITH) R0060 * R0061 1B28 21A0 RWROW COC @DCAST,R6 IS DATACAST ON THE SCREEN? 1B2A 0058 R0062 1B2C 1331 JEQ RWR110 YES, DO ONLY HEADER & ROW 24 R0063 1B2E 21A0 COC @DHONRW,R6 Double height on previous row? 1B30 004E R0064 1B32 1603 JNE RWR30 NO, - jump R0065 1B34 41A0 SZC @DHONRW,R6 CLEAR THE FLAG 1B36 004E R0066 1B38 1023 JMP NTHISR AND AVOID THE ROW R0067 * R0068 1B3A 23A0 RWR30 COC @NFDISP,R14 ARE WE IN NEWSFLASH/SUBTITLE 1B3C 0058 R0069 1B3E 131D JEQ RWR100 YES, IGNORE THE COUNTS R0070 1B40 D820 MOVB @DISMAP,@MAPPER SET UP MAPPER PAGE 1B42 F054 1B44 FC00 R0071 1B46 C307 MOV R7,R12 COPY START OF COUNTERS R0072 1B48 C009 MOV R9,R0 GET ROW COUNT R0073 1B4A 0980 SRL R0,8 TO LSB R0074 1B4C A300 A R0,R12 POINT TO COUNT FOR THIS ROW R0075 1B4E 9827 CB @HICNT(R7),@BYTEFF HAVE WE REACHED MAX COUNT? 1B50 001A 1B52 008D R0076 1B54 1304 JEQ RWR35 YES, CHECK FOR GOOD COUNT R0077 1B56 981C CB *R12,@BYTE00 NO, CHECK FOR NO ROW RX'D 1B58 004E R0078 1B5A 160F JNE RWR100 DISPLAY RECIEVED ROW R0079 1B5C 1003 JMP RWR38 DELETE DISPLAY ROW R0080 * R0081 1B5E 981C RWR35 CB *R12,@BYTE02 CHECK FOR ROW COUNT =2 1B60 0060 R0082 1B62 140B JHE RWR100 IF OK, GO WRITE THE ROW R0083 * DELETE A ROW ON THE SCREEN R0084 1B64 3820 RWR38 MPY @N80,R0 COMPUTE ROW START OFFSET 1B66 004A R0085 1B68 0221 AI R1,DSPLAY ADD THE DISPLAY START NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0100 1B6A 0A00 R0086 1B6C 2C01 SETA R1 SET UP THE WRITE ADDRESS R0087 1B6E 0200 LI R0,80 80 BYTES TO WRITE 1B70 0050 R0088 1B72 D740 RWR40 MOVB R0,*VRAM SEND A ZERO BYTE R0089 1B74 0600 DEC R0 R0090 1B76 16FD JNE RWR40 LOOP TILL DONE R0091 1B78 1003 JMP NTHISR NEXT ROW R0092 * R0093 1B7A 04C1 RWR100 CLR R1 R0094 1B7C 06A0 BL @DISRAM Display the row 1B7E 1356 R0095 * R0096 1B80 D820 NTHISR MOVB @DISMAP,@MAPPER SET UP THE MAPPER 1B82 F054 1B84 FC00 R0097 1B86 B260 AB @BYTE01,R9 Increment row number 1B88 005E R0098 1B8A 9809 CB R9,@BYTE18 End of page ? 1B8C 0074 R0099 1B8E 1ACC JL RWROW No - do next row R0100 * R0101 * CHECK TO SEE IF PACKET 24/27 PROBLEMS EXIST R0102 * R0103 1B90 C060 RWR110 MOV @DISADR,R1 GET RAM START ADR. 1B92 F04E R0104 1B94 9820 CB @DISP24,@BYTE04 ROW830 DISPLAY? 1B96 D09B 1B98 0062 R0105 1B9A 1A04 JL RWR120 NO, OK R0106 1B9C 1366 JEQ NATOP YES, LEAVE ROW 24 ALONE R0107 1B9E 06A0 BL @DISR27 DISPLAY THE HAMMING 1BA0 1CC6 R0108 1BA2 1063 JMP NATOP R0109 1BA4 0209 RWR120 LI R9,24*256 ENSURE WE'RE ON ROW 24 1BA6 1800 R0110 1BA8 D027 MOVB @PKT24(R7),R0 HAVE WE A PACKET 24? 1BAA 0018 R0111 1BAC 1308 JEQ RWR140 NO, DO PACKET 27 R0112 1BAE 9827 CB @HICNT(R7),@BYTEFF HAVE WE REACHED MAX COUNT? 1BB0 001A 1BB2 008D R0113 1BB4 1658 JNE DISR24 NO, ANY NONE ZERO COUNT IS OK R0114 1BB6 9827 CB @PKT24(R7),@BYTE02 PACKET 24 VALID? 1BB8 0018 1BBA 0060 R0115 1BBC 1454 JHE DISR24 YES, DISPLAY ROUTINE WILL FIX R0116 * R0117 * NO PACKET 24 FOR DISPLAY, CHECK FOR 27 TO GENERATE IT R0118 * R0119 1BBE D027 RWR140 MOVB @PKT27(R7),R0 HAVE WE A PACKET 27? 1BC0 0019 R0120 1BC2 1307 JEQ DELBRW NO, DELETE BOTTOM ROW R0121 1BC4 9800 CB R0,@BYTE02 PACKET 27 VALID? 1BC6 0060 R0122 1BC8 1407 JHE G24R05 YES, SKIP R0123 1BCA 9827 CB @HICNT(R7),@BYTEFF MAX COUNT REACHED? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0101 1BCC 001A 1BCE 008D R0124 1BD0 1603 JNE G24R05 NO, NONE ZERO IS OK. R0125 * R0126 * DELETE BOTTOM ROW ON THE SCREEN R0127 * R0128 1BD2 06A0 DELBRW BL @CLRBTM CLEAR ROW 24 (25) 1BD4 2218 R0129 1BD6 1049 JMP NATOP NEXT ROW R0130 * R0131 * GENERATE PACKET 24 FROM PACKET 27 R0132 * R0133 1BD8 0221 G24R05 AI R1,24*40 GET START OF ROW 24 1BDA 03C0 R0134 1BDC C001 MOV R1,R0 COPY START ADR R0135 1BDE 0202 LI R2,40 40 CHARS TO CLEAR 1BE0 0028 R0136 1BE2 0203 LI R3,' ' 1BE4 2020 R0137 1BE6 CC03 G24R10 MOV R3,*R0+ SEND SPACES R0138 1BE8 0642 DECT R2 UPDATE COUNT R0139 1BEA 16FD JNE G24R10 R0140 * R0141 * GENERATE 4 BLOCKS FROM PACKET 27 R0142 * R0143 1BEC 04C3 CLR R3 BLOCKS TO GENERATE COUNTER R0144 1BEE C101 MOV R1,R4 COPY ROW 24 START ADR R0145 1BF0 0221 AI R1,40+1 POINT TO START OF PAGE LINK DATA 1BF2 0029 R0146 1BF4 R0147 1BF4 DD23 G24R20 MOVB @FTBL2(R3),*R4+ SET UP 'F' NUMBER 1BF6 1C4C R0148 1BF8 05C4 INCT R4 POINT TO START OF MAG NO. R0149 * R0150 1BFA 0700 SETO R0 SET MAGAZINE RELATIVE FLAG R0151 1BFC 0420 BLWP @GETPGN GET PAGE NUMBER TO R0 1BFE 20CA R0152 1C00 1C50 DATA NXTL10 ERROR RETURN ADDRESS R0153 * R0154 1C02 0202 LI R2,3 3 DIGITS TO MOVE 1C04 0003 R0155 1C06 D000 MOVB R0,R0 CHECK FOR MAGAZINE ZERO R0156 1C08 1602 JNE G24R30 NOT ZERO, SKIP R0157 1C0A 0220 AI R0,>0800 SET TO MAGAZINE 8 1C0C 0800 R0158 1C0E 5020 G24R30 SZCB @BYTEF0,R0 CLEAR MS NIBBLE 1C10 008C R0159 1C12 0220 AI R0,'0'*256 ADD ASCII 1C14 3000 R0160 1C16 DD00 MOVB R0,*R4+ SAVE DIGIT IN ROW 24 R0161 1C18 0A40 SLA R0,4 NEXT DIGIT R0162 1C1A 0602 DEC R2 COUNT IT R0163 1C1C 16F8 JNE G24R30 LOOP TILL PAGE NO. DONE R0164 * R0165 * SORT OUT THE SUB PAGE R0166 * R0167 1C1E 0420 BLWP @GETSPN GET SUB PAGE NUMBER TO R0 MSB NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0102 1C20 211A R0168 1C22 0280 CI R0,>7F00 SUB PAGE IRRELEVANT? 1C24 7F00 R0169 1C26 1316 JEQ NXTL20 YES R0170 1C28 DD20 MOVB @FSTOP,*R4+ INSERT DECIMAL POINT 1C2A 008F R0171 1C2C 0940 SRL R0,4 R0172 1C2E 0220 AI R0,'0'*256 ADD ASCII 1C30 3000 R0173 1C32 DD00 MOVB R0,*R4+ SUB PAGE TENS TO RAM R0174 1C34 0A40 SLA R0,4 SUB PAGE UNITS TO MSB, LS NIBBLE R0175 1C36 0240 ANDI R0,>0F00 REMOVE JUNK 1C38 0F00 R0176 1C3A 0280 CI R0,>0A00 ALPHA? 1C3C 0A00 R0177 1C3E 1A02 JL GR2440 NO, SKIP R0178 1C40 0220 AI R0,>0700 MAKE ALPHA ASCII 1C42 0700 R0179 1C44 0220 GR2440 AI R0,'0'*256 ADD ASCII 1C46 3000 R0180 1C48 DD00 MOVB R0,*R4+ SUB PAGE UNITS TO RAM R0181 1C4A 1006 JMP NXTL30 R0182 * R0183 1C4C 01 FTBL2 BYTE >01,>02,>03,>06 RED, GREEN, YELLOW, CYAN R0184 * R0185 1C50 0224 NXTL10 AI R4,3 NEXT LINKS IN PKT 24 1C52 0003 R0186 1C54 0224 NXTL20 AI R4,3 1C56 0003 R0187 1C58 0584 NXTL30 INC R4 R0188 1C5A 0221 AI R1,6 NEXT LINKS IN PKT 27 1C5C 0006 R0189 1C5E 0583 INC R3 NEXT BLOCK R0190 1C60 0283 CI R3,4 DONE? 1C62 0004 R0191 1C64 1AC7 JL G24R20 NO, LOOP BACK R0192 * R0193 1C66 06A0 DISR24 BL @DISRAM DISPLAY ROW 1C68 1356 R0194 ************************************************************ R0195 * * R0196 * NATOP - Dowloads the required character set * R0197 * into the VDP * R0198 * * R0199 * Preconditions: CHSDIS = Currently displayed * R0200 * character set. * R0201 * Postconditions: * R0202 * * R0203 * Called by: * R0204 * * R0205 * Calls: * R0206 * * R0207 * Local variables: * R0208 * * R0209 * Global variables: * R0210 * * R0211 * Comments: * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0103 R0212 * * R0213 ************************************************************ R0214 1C6A C060 NATOP MOV @DISADR,R1 GET PAGE BASE ADR. 1C6C F04E R0215 * R0216 1C6E D820 MOVB @DISMAP,@MAPPER SET UP MAPPER FOR DISPLAY PAGE 1C70 F054 1C72 FC00 R0217 1C74 D061 MOVB @7(R1),R1 GET CONTROL GROUP B 1C76 0007 R0218 1C78 04E0 CLR @MAPPER 1C7A FC00 R0219 * R0220 1C7C 0241 ANDI R1,>0E00 REMOVE SERIAL MAG BIT 1C7E 0E00 R0221 1C80 0991 SRL R1,9 TO LSB R0222 1C82 D021 MOVB @CHCODE(R1),R0 GET LANGUAGE NUMBER 1C84 1D0E R0223 1C86 9800 CB R0,@CHSDIS SAME CHAR. SET DISPLAYED? 1C88 F081 R0224 1C8A 131A JEQ NATOXT YES, EXIT R0225 1C8C D800 MOVB R0,@CHSDIS NO, SET NEW CHAR. SET NO. 1C8E F081 R0226 1C90 0980 SRL R0,8 CHAR SET NUMBER TO LSB R0227 1C92 3820 MPY @DEC26,R0 COMPUTE TABLE OFFSET (IN R1) 1C94 0046 R0228 1C96 0221 AI R1,CHSLUP ADD THE TABLES START 1C98 1D16 R0229 1C9A 0202 LI R2,13 13 CHARACTERS TO RE-DEFINE 1C9C 000D R0230 1C9E 0203 LI R3,CHSPOS POINT TO VDP ADR. TABLE 1CA0 1DB2 R0231 1CA2 2C33 NXTCHR SETA *R3+ SET UP VDP ADR. R0232 1CA4 0204 LI R4,10 10 BYTES TO SEND 1CA6 000A R0233 1CA8 C171 MOV *R1+,R5 GET THE CHARACTER DEF. START R0234 1CAA 1003 JMP SKINC R0235 * R0236 1CAC 0220 NXTBYT AI R0,128 NEXT CHAR. BYTE IN VDP 1CAE 0080 R0237 1CB0 2C00 SETA R0 SET UP VDP POINTER R0238 1CB2 D335 SKINC MOVB *R5+,R12 SEND CHAR. DEF BYTE TO VDP R0239 * JLT NATRLE IF RUN LENGTH ENCODE, JUMP R0240 1CB4 D74C MOVB R12,*VRAM R0241 1CB6 0604 DEC R4 UPDATE COUNT R0242 1CB8 16F9 JNE NXTBYT LOOP TILL 10 BYTES DONE R0243 1CBA 0602 NATRL1 DEC R2 UPDATE CHAR. COUNT R0244 1CBC 16F2 JNE NXTCHR LOOP TILL 13 CHARS DONE R0245 1CBE 1000 JMP NATOXT R0246 * R0247 1CC0 064A NATOXT DECT R10 R0248 1CC2 C2DA MOV *R10,R11 Restore return address R0249 1CC4 045B RT R0250 * R0251 * DISPLAY THE HAMMING FROM ROW 27 R0252 * R0253 1CC6 0221 DISR27 AI R1,25*40 POINT TO ROW 27 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0104 1CC8 03E8 R0254 1CCA 0200 LI R0,24*80+DSPLAY POINT TO DISPLAY ROW 24 1CCC 1180 R0255 1CCE C10B MOV R11,R4 SAVE RETURN R0256 1CD0 2C00 SETA R0 R0257 1CD2 C2C4 MOV R4,R11 RESTORE RETURN R0258 1CD4 04C3 CLR R3 BLOCK COUNTER R0259 1CD6 0204 LI R4,1 1 DIGIT TO WRITE 1CD8 0001 R0260 1CDA 1002 JMP D27R20 R0261 * R0262 1CDC 0204 D27R10 LI R4,6 SIX BYTES PER BLOCK 1CDE 0006 R0263 1CE0 D0A3 D27R20 MOVB @D27TBL(R3),R2 SET UP ATTRIBUTE 1CE2 1D06 R0264 1CE4 D031 D27R30 MOVB *R1+,R0 R0265 1CE6 0420 BLWP @WRTHXN WRITE NIBBLE TO SCREEN 1CE8 229A R0266 1CEA 0604 DEC R4 R0267 1CEC 16FB JNE D27R30 R0268 * R0269 1CEE 0583 INC R3 NEXT BLOCK R0270 1CF0 0283 CI R3,7 1CF2 0007 R0271 1CF4 1AF3 JL D27R10 R0272 1CF6 1B02 JH D27R50 R0273 1CF8 0584 INC R4 1 BYTE IN LINK CONTROL R0274 1CFA 10F2 JMP D27R20 R0275 * R0276 1CFC D744 D27R50 MOVB R4,*VRAM 2 SPACES R0277 1CFE D744 MOVB R4,*VRAM R0278 1D00 D744 MOVB R4,*VRAM R0279 1D02 D744 MOVB R4,*VRAM R0280 1D04 045B RT RETURN TO CALLER R0281 * R0282 * TABLE FOR COLOURS IN ROW 27 HAMMING DISPLAY R0283 * R0284 1D06 E0 D27TBL BYTE >E0,>20,>40,>60,>C0,>A0,>E0,>40 R0285 * R0286 * CHARACTER SET CODES LOOK UP TABLE - INDEXED BY C12,13,14. R0287 * GIVES THE TABLE NO. IN 'CHSLUP' R0288 * R0289 1D0E 00 CHCODE BYTE 0 R0290 1D0F 04 BYTE 4 R0291 1D10 02 BYTE 2 R0292 1D11 00 BYTE 0 R0293 1D12 01 BYTE 1 R0294 1D13 05 BYTE 5 R0295 1D14 03 BYTE 3 R0296 1D15 00 BYTE 0 R0297 * R0298 * R0299 * Character look up table R0300 * R0301 * English R0302 * R0303 1D16 1DCC CHSLUP DATA SPCH00,SPCH01,SPCH02,SPCH03,SPCH04 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0105 1D18 1DD6 1D1A 1DE0 1D1C 1DEA 1D1E 1DF4 R0304 1D20 1DFE DATA SPCH05,SPCH06,SPCH07,SPCH08,SPCH09 1D22 1E08 1D24 1E12 1D26 1E1C 1D28 1E26 R0305 1D2A 1E30 DATA SPCH10,SPCH11,SPCH12 1D2C 1E3A 1D2E 1E44 R0306 * R0307 * German R0308 * R0309 1D30 1E12 DATA SPCH07,SPCH01,SPCH25,SPCH26,SPCH27 1D32 1DD6 1D34 1EC6 1D36 1ED0 1D38 1EDA R0310 1D3A 1EE4 DATA SPCH28,SPCH06,SPCH40,SPCH29,SPCH30 1D3C 1E08 1D3E 1F5C 1D40 1EEE 1D42 1EF8 R0311 1D44 1F02 DATA SPCH31,SPCH32,SPCH33 1D46 1F0C 1D48 1F16 R0312 * R0313 * Swedish / Finish R0314 * R0315 1D4A 1E12 DATA SPCH07,SPCH36,SPCH37,SPCH26,SPCH27 1D4C 1F34 1D4E 1F3E 1D50 1ED0 1D52 1EDA R0316 1D54 1F48 DATA SPCH38,SPCH28,SPCH40,SPCH13,SPCH30 1D56 1EE4 1D58 1F5C 1D5A 1E4E 1D5C 1EF8 R0317 1D5E 1F02 DATA SPCH31,SPCH39,SPCH32 1D60 1F52 1D62 1F0C R0318 * R0319 * Italian R0320 * R0321 1D64 1DCC DATA SPCH00,SPCH01,SPCH13,SPCH29,SPCH24 1D66 1DD6 1D68 1E4E 1D6A 1EEE 1D6C 1EBC R0322 1D6E 1DFE DATA SPCH05,SPCH06,SPCH07,SPCH18,SPCH15 1D70 1E08 1D72 1E12 1D74 1E80 1D76 1E62 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0106 R0323 1D78 1F20 DATA SPCH34,SPCH20,SPCH35 1D7A 1E94 1D7C 1F2A R0324 * R0325 * French R0326 * R0327 1D7E 1E4E DATA SPCH13,SPCH14,SPCH15,SPCH16,SPCH17 1D80 1E58 1D82 1E62 1D84 1E6C 1D86 1E76 R0328 1D88 1E80 DATA SPCH18,SPCH19,SPCH07,SPCH20,SPCH21 1D8A 1E8A 1D8C 1E12 1D8E 1E94 1D90 1E9E R0329 1D92 1EA8 DATA SPCH22,SPCH23,SPCH24 1D94 1EB2 1D96 1EBC R0330 * R0331 * Spanish R0332 * R0333 1D98 1EBC DATA SPCH24,SPCH01,SPCH41,SPCH42,SPCH13 1D9A 1DD6 1D9C 1F66 1D9E 1F70 1DA0 1E4E R0334 1DA2 1F7A DATA SPCH43,SPCH44,SPCH45,SPCH46,SPCH32 1DA4 1F84 1DA6 1F8E 1DA8 1F98 1DAA 1F0C R0335 1DAC 1FA2 DATA SPCH47,SPCH20,SPCH15 1DAE 1E94 1DB0 1E62 R0336 * R0337 * Postion table for characters within character generator R0338 * R0339 1DB2 0023 CHSPOS DATA BAGC0+>25,BAGC0+>26,BAGC0+>42,BAGC0+>5D 1DB4 0024 1DB6 0040 1DB8 005B R0340 1DBA 005C DATA BAGC0+>5E,BAGC0+>5F,BAGC0+>60,BAGC0+>61 1DBC 005D 1DBE 005E 1DC0 005F R0341 1DC2 0060 DATA BAGC0+>62,BAGC0+>7D,BAGC0+>7E,BAGC0+>7F 1DC4 007B 1DC6 007C 1DC8 007D R0342 1DCA 007E DATA BAGC0+>80 R0343 * R0344 * The extra characters R0345 * R0346 * English R0347 * R0348 1DCC 00 SPCH00 BYTE >00,>00,>FE,>60,>20,>78,>20,>22,>1C,>00 000 # NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0107 R0349 1DD6 00 SPCH01 BYTE >00,>00,>08,>FE,>12,>7C,>90,>7E,>10,>00 010 $ R0350 1DE0 00 SPCH02 BYTE >00,>00,>7E,>80,>9E,>92,>9E,>82,>7C,>00 020 @ R0351 1DEA 00 SPCH03 BYTE >00,>00,>00,>20,>40,>FE,>40,>20,>00,>00 030 <- R0352 1DF4 00 SPCH04 BYTE >00,>00,>1E,>04,>42,>4C,>40,>C0,>40,>00 040 1/ R0353 1DFE 00 SPCH05 BYTE >00,>00,>00,>08,>04,>FE,>04,>08,>00,>00 050 -> R0354 1E08 00 SPCH06 BYTE >00,>00,>10,>10,>10,>10,>54,>38,>10,>00 060 ^ R0355 1E12 00 SPCH07 BYTE >00,>00,>44,>44,>FE,>44,>FE,>44,>44,>00 070 HS R0356 1E1C 00 SPCH08 BYTE >00,>00,>00,>00,>00,>7E,>00,>00,>00,>00 080 - R0357 1E26 00 SPCH09 BYTE >00,>00,>02,>1E,>4A,>46,>42,>C0,>40,>00 090 1/ R0358 1E30 00 SPCH10 BYTE >00,>00,>28,>28,>28,>28,>28,>28,>28,>00 100 || R0359 1E3A 00 SPCH11 BYTE >00,>00,>02,>1E,>CA,>26,>C2,>20,>C0,>00 110 3/ R0360 1E44 00 SPCH12 BYTE >00,>00,>00,>10,>00,>7C,>00,>10,>00,>00 120 DI R0361 * R0362 * French R0363 * R0364 1E4E 00 SPCH13 BYTE >00,>00,>7C,>80,>FE,>82,>7C,>00,>20,>10 130 e R0365 1E58 00 SPCH14 BYTE >00,>00,>38,>10,>10,>10,>30,>00,>28,>00 140 i R0366 1E62 00 SPCH15 BYTE >00,>00,>7E,>84,>7C,>04,>78,>00,>10,>20 150 a R0367 1E6C 00 SPCH16 BYTE >00,>00,>7C,>80,>FE,>82,>7C,>00,>28,>00 160 e R0368 1E76 00 SPCH17 BYTE >00,>00,>7C,>80,>FE,>82,>7C,>00,>28,>10 170 e R0369 1E80 00 SPCH18 BYTE >00,>00,>7A,>86,>82,>82,>82,>00,>10,>20 180 u R0370 1E8A 00 SPCH19 BYTE >00,>00,>38,>10,>10,>10,>30,>00,>28,>10 190 i R0371 1E94 00 SPCH20 BYTE >00,>00,>7C,>80,>FE,>82,>7C,>00,>10,>20 200 e R0372 1E9E 00 SPCH21 BYTE >00,>00,>7E,>84,>7C,>04,>78,>00,>28,>10 210 a R0373 1EA8 00 SPCH22 BYTE >00,>00,>7C,>82,>82,>82,>7C,>00,>28,>10 220 o R0374 1EB2 00 SPCH23 BYTE >00,>00,>7A,>86,>82,>82,>82,>00,>28,>10 230 u R0375 1EBC 18 SPCH24 BYTE >18,>08,>7E,>80,>80,>80,>7E,>00,>00,>00 240 c R0376 1EC6 R0377 * German R0378 * R0379 1EC6 7C SPCH25 BYTE >7C,>82,>02,>7C,>82,>7C,>80,>82,>7C,>00 250 'p R0380 1ED0 00 SPCH26 BYTE >00,>00,>82,>82,>82,>FE,>82,>7C,>00,>28 260 A R0381 1EDA 00 SPCH27 BYTE >00,>00,>7C,>82,>82,>82,>82,>7C,>00,>28 270 O R0382 1EE4 00 SPCH28 BYTE >00,>00,>7C,>82,>82,>82,>82,>82,>00,>28 280 U R0383 1EEE 00 SPCH29 BYTE >00,>00,>00,>00,>00,>00,>30,>48,>30,>00 290 'd R0384 1EF8 00 SPCH30 BYTE >00,>00,>7E,>84,>7C,>04,>78,>00,>28,>00 300 a R0385 1F02 00 SPCH31 BYTE >00,>00,>7C,>82,>82,>82,>7C,>00,>28,>00 310 o R0386 1F0C 00 SPCH32 BYTE >00,>00,>7A,>86,>82,>82,>82,>00,>48,>00 320 u R0387 1F16 80 SPCH33 BYTE >80,>80,>B8,>84,>84,>B8,>90,>88,>70,>00 330 SS R0388 * R0389 * Italian R0390 * R0391 1F20 00 SPCH34 BYTE >00,>00,>7C,>82,>82,>82,>7C,>00,>10,>20 340 o R0392 1F2A 00 SPCH35 BYTE >00,>00,>38,>10,>10,>10,>30,>00,>10,>20 350 i R0393 * R0394 * Swedish / Finish R0395 * R0396 1F34 00 SPCH36 BYTE >00,>00,>82,>44,>38,>28,>38,>44,>82,>00 360 'X R0397 1F3E 00 SPCH37 BYTE >00,>00,>FE,>80,>F8,>80,>FE,>00,>10,>08 370 E R0398 1F48 00 SPCH38 BYTE >00,>00,>82,>82,>FE,>82,>7C,>10,>28,>10 380 A R0399 1F52 00 SPCH39 BYTE >00,>00,>7E,>84,>7C,>04,>78,>10,>28,>10 390 a R0400 1F5C 00 SPCH40 BYTE >00,>7E,>00,>00,>00,>00,>00,>00,>00,>00 400 _ R0401 * R0402 * Spanish R0403 * R0404 1F66 00 SPCH41 BYTE >00,>00,>10,>10,>10,>10,>10,>10,>00,>10 410 IN R0405 1F70 00 SPCH42 BYTE >00,>00,>7E,>84,>7C,>04,>78,>00,>20,>10 420 a NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0108 R0406 1F7A 00 SPCH43 BYTE >00,>00,>38,>10,>10,>10,>30,>00,>20,>10 430 i R0407 1F84 00 SPCH44 BYTE >00,>00,>7C,>82,>82,>82,>7C,>00,>20,>10 440 o R0408 1F8E 00 SPCH45 BYTE >00,>00,>7A,>86,>82,>82,>82,>00,>20,>10 450 u R0409 1F98 00 SPCH46 BYTE >00,>00,>7C,>82,>80,>60,>10,>00,>10,>00 460 IN R0410 1FA2 00 SPCH47 BYTE >00,>00,>82,>82,>82,>C2,>BC,>00,>28,>14 470 n R0411 1FAC NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0109 0066 COPY ROW830.990 S0001 ************************************************************ S0002 * * S0003 * ROW830 - SORT OUT THE PAGE NUMBER TO RX. * S0004 * * S0005 * Called by: MAIN * S0006 * * S0007 * AUTHOR: COLIN HINSON * S0008 ************************************************************ S0009 * S0010 * GENERATE A PAGE NUMBER FROM PACKET 830 S0011 * S0012 1FAC C30B ROW830 MOV R11,R12 SAVE RETURN ADDR. S0013 1FAE 0201 LI R1,ROWST+2 POINT TO DESIGNATION CODE 1FB0 F058 S0014 1FB2 05A0 INC @CNT830 COUNT THE PACKET 1FB4 D052 S0015 1FB6 D031 MOVB *R1+,R0 GET THE CODE S0016 1FB8 1620 JNE DIS830 IF NOT ZERO, CHECK FOR DISPLAY S0017 1FBA 23A0 COC @INH830,R14 DEALT WITH ROW ALREADY? 1FBC 0060 S0018 1FBE 131D JEQ DIS830 YES, CHECK FOR DISPLAY S0019 1FC0 E3A0 SOC @INH830,R14 1FC2 0060 S0020 1FC4 04C0 CLR R0 NOT MAGAZINE RELATIVE S0021 1FC6 0420 BLWP @GETPGN GET THE PAGE NUMBER TO R0 1FC8 20CA S0022 1FCA 1FF4 DATA R83WAB IF ERROR, EXIT S0023 1FCC C800 MOV R0,@PAG830 SAVE FOR INDEX KEY 1FCE D050 S0024 1FD0 0420 BLWP @GETSPN GET THE SUB PAGE NUMBER 1FD2 211A S0025 1FD4 0980 SRL R0,8 TO LSB S0026 1FD6 0280 CI R0,>7F IF GOOD NUMBER, SKIP 1FD8 007F S0027 1FDA 1601 JNE ROW831 S0028 1FDC 0700 SETO R0 MAKE NUMBER INVALID S0029 1FDE 23A0 ROW831 COC @OVRIDE,R14 8/30 OVER-RIDDEN BY USER? 1FE0 0062 S0030 1FE2 1307 JEQ R830XT YES, ABORT S0031 1FE4 C800 MOV R0,@SUBHEX SET UP SUB PAGE NUMBER 1FE6 F052 S0032 1FE8 C820 MOV @PAG830,@PAGHEX SET UP PAGE NUMBER 1FEA D050 1FEC F050 S0033 1FEE 06A0 BL @DISPN DISPLAY THE PAGE NUMBER 1FF0 22E6 S0034 1FF2 045C R830XT B *R12 RETURN S0035 * S0036 * ABORT THE ROW DUE TO ERRORS S0037 * S0038 1FF4 43A0 R83WAB SZC @INH830,R14 CLEAR THE 830 FLAG 1FF6 0060 S0039 1FF8 045C R83XIT B *R12 RETURN S0040 * S0041 * CHECK FOR DISPLAY 830 MODE S0042 * NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0110 S0043 1FFA 9820 DIS830 CB @BYTE04,@DISP24 DISPLAY 830 MODE? 1FFC 0062 1FFE D09B S0044 2000 16FB JNE R83XIT NO, ABORT S0045 2002 D0A0 MOVB @WHITE,R2 SET UP WHITE ATTRIBUTE 2004 008A S0046 2006 0200 LI R0,24*80+DSPLAY POINT TO ROW 24 2008 1180 S0047 200A 2C00 SETA R0 S0048 * S0049 * INITIAL PAGE DATA S0050 * S0051 200C 0203 LI R3,6 6 HAMMING BYTES 200E 0006 S0052 2010 D031 DISV10 MOVB *R1+,R0 GET A BYTE S0053 2012 0420 BLWP @WRTHXN WRITE TO SCREEN 2014 229A S0054 2016 0603 DEC R3 COUNT S0055 2018 16FB JNE DISV10 S0056 * S0057 * NETWORK IDENT S0058 * S0059 201A 05C3 INCT R3 2 NETWORK IDENT BYTES S0060 201C D0B1 DISV30 MOVB *R1+,R2 GET A BYTE S0061 201E 0242 ANDI R2,>7F00 REMOVE PARITY 2020 7F00 S0062 2022 D760 MOVB @GREEN,*VRAM 2024 006A S0063 2026 D742 MOVB R2,*VRAM S0064 2028 0603 DEC R3 S0065 202A 16F8 JNE DISV30 S0066 * S0067 * TIME OFFSET BYTE S0068 * S0069 202C D031 MOVB *R1+,R0 GET TIME OFFSET BYTE S0070 202E D0A0 MOVB @RED,R2 SET UP ATTRIBUTE 2030 0068 S0071 2032 0420 BLWP @WRTHXB WRITE TWO DIGITS 2034 229E S0072 * S0073 * JULIAN DATE GROUP S0074 * S0075 2036 D0A0 MOVB @CYAN,R2 SET UP ATTRIBUTE 2038 0089 S0076 203A 0203 LI R3,3 3 BYTES OF DATE 203C 0003 S0077 203E D031 DISV50 MOVB *R1+,R0 GET A BYTE S0078 2040 0220 AI R0,->1100 DECREMENT BOTH NIBBLES 2042 EF00 S0079 2044 0420 BLWP @WRTHXB WRITE TWO DIGITS 2046 229E S0080 2048 0603 DEC R3 COUNT THE BYTE S0081 204A 16F9 JNE DISV50 S0082 204C 0221 AI R1,3 BYPASS TIME 204E 0003 S0083 * S0084 * TV PROG. LABEL GROUP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0111 S0085 * S0086 2050 0200 LI R0,4 2052 0004 S0087 2054 D0B1 DISV60 MOVB *R1+,R2 S0088 2056 0242 ANDI R2,>7F00 2058 7F00 S0089 205A D760 MOVB @YELLOW,*VRAM 205C 0083 S0090 205E D742 MOVB R2,*VRAM S0091 2060 0600 DEC R0 S0092 2062 16F8 JNE DISV60 S0093 * S0094 * STATUS DISPLAY BLOCK S0095 * S0096 2064 D0B1 DISV70 MOVB *R1+,R2 S0097 2066 0242 ANDI R2,>7F00 2068 7F00 S0098 206A 0282 CI R2,>2000 SPACE? 206C 2000 S0099 206E 1601 JNE DISV80 NO, SKIP S0100 2070 04C2 CLR R2 S0101 2072 D760 DISV80 MOVB @WHITE,*VRAM 2074 008A S0102 2076 D742 MOVB R2,*VRAM S0103 2078 0281 CI R1,ROWEND 207A F080 S0104 207C 1AF3 JL DISV70 S0105 * S0106 * PUT TIME IN HEADER S0107 * S0108 207E 0200 LI R0,32*2+DSPLAY POINT TO TIME IN HEADER 2080 0A40 S0109 2082 2C00 SETA R0 S0110 2084 0200 LI R0,4 2086 0004 S0111 2088 D740 DISV85 MOVB R0,*VRAM DELETE TWO CHARS S0112 208A 0600 DEC R0 S0113 208C 16FD JNE DISV85 S0114 * S0115 208E 0201 LI R1,ROWST+15 POINT TO TIME 2090 F065 S0116 2092 D0A0 MOVB @CYAN,R2 SET UP ATTRIBUTE 2094 0089 S0117 2096 0203 LI R3,3 3 BYTES OF DATE 2098 0003 S0118 209A D031 DISV90 MOVB *R1+,R0 GET A BYTE S0119 209C 0220 AI R0,->1100 DECREMENT BOTH NIBBLES 209E EF00 S0120 20A0 0420 BLWP @WRTHXB WRITE TWO DIGITS 20A2 229E S0121 20A4 0603 DEC R3 COUNT THE BYTE S0122 20A6 16F9 JNE DISV90 S0123 * S0124 * DEBUG --- COUNT PACKET 8/30 S0125 * S0126 20A8 0200 LI R0,DSPLAY OVERWRITE THE PAGE NO. 20AA 0A00 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0112 S0127 20AC 2C00 SETA R0 S0128 20AE C020 MOV @CNT830,R0 20B0 D052 S0129 20B2 0202 LI R2,>6000 ATTRIBUTE 20B4 6000 S0130 20B6 0420 BLWP @WRTHXW WRITE THE HEX VALUE 20B8 22A2 S0131 20BA 04C0 CLR R0 S0132 20BC D740 MOVB R0,*VRAM S0133 20BE D740 MOVB R0,*VRAM S0134 20C0 D740 MOVB R0,*VRAM S0135 20C2 D740 MOVB R0,*VRAM S0136 20C4 D740 MOVB R0,*VRAM S0137 20C6 D740 MOVB R0,*VRAM S0138 20C8 045C B *R12 RETURN TO CALLER S0139 ************************************************************ S0140 * * S0141 * GETPGN - GET THE PAGE NUMBER TO CALLERS R0 * S0142 * FROM EITHER 8/30 OR PACKET 27 DATA. * S0143 * POINTER TO START OF DATA IS IN CALLERS R1. * S0144 * MAGAZINE RELATIVE FLAG IS IN CALLERS R0 (0=NOT) * S0145 * ERROR RETURN ADDRESS IN DATA STATEMENT * S0146 * * S0147 * CALL = BLWP @GETPGN * S0148 * DATA (ERROR RETURN) * S0149 * * S0150 ************************************************************ S0151 * S0152 20CA F0C6 GETPGN DATA WORKS2,GETPGV 20CC 20CE S0153 * S0154 20CE C32D GETPGV MOV @2(WR13),WR12 GET POINTER TO START OF DATA 20D0 0002 S0155 20D2 C1DD MOV *WR13,WR7 GET MAG RELATIVE FLAG S0156 20D4 981C CB *WR12,@BYTE09 PAGE UNITS VALID? 20D6 007B S0157 20D8 1B1E JH GPNERR NO, ABORT S0158 20DA D2BC MOVB *WR12+,WR10 STORE IN R10 S0159 20DC 094A SRL WR10,4 TO LSB, MS NIBBLE S0160 20DE 981C CB *WR12,@BYTE09 PAGE TENS VALID? 20E0 007B S0161 20E2 1B19 JH GPNERR NO, ABORT S0162 20E4 D2BC MOVB *WR12+,WR10 STORE AS REQUEST S0163 20E6 094A SRL WR10,4 TO LSB, MS NIBBLE S0164 20E8 D26C MOVB @3(WR12),WR9 GET C5 & C6 20EA 0003 S0165 20EC 0919 SRL WR9,1 REMOVE SUB PAGE BITS S0166 20EE 0249 ANDI WR9,>FE00 REMOVE SURPLUS BITS 20F0 FE00 S0167 20F2 0289 CI WR9,>600 CHECK VALID HAMMING 20F4 0600 S0168 20F6 1B0F JH GPNERR IF NOT, ABORT S0169 20F8 D22C MOVB @1(WR12),WR8 GET C4 20FA 0001 S0170 20FC 0248 ANDI WR8,>0800 LEAVE ONLY C4 20FE 0800 S0171 2100 1302 JEQ GTPN10 NOT SET, JUMP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0113 S0172 2102 B260 AB @BYTE01,WR9 ADD TO R5 2104 005E S0173 2106 C1C7 GTPN10 MOV WR7,WR7 MAGAZINE RELATIVE? S0174 2108 1302 JEQ GTPN20 NO, SKIP S0175 210A 2A60 XOR @PAGHEX,WR9 COMPUTE RELATIVE MAGAZINE 210C F050 S0176 210E D289 GTPN20 MOVB WR9,WR10 ADD MAGAZINE TO PAGE TENS/UNITS S0177 2110 C74A MOV WR10,*WR13 SEND DATA TO CALLER R0 S0178 2112 05CE INCT WR14 S0179 2114 0380 RTWP S0180 * S0181 * ERROR EXIT S0182 * S0183 2116 C39E GPNERR MOV *R14,R14 GET ERROR EXIT ADDRESS S0184 2118 0380 RTWP AND EXIT TO IT S0185 ************************************************************ S0186 * * S0187 * GETSPN - GET THE SUB PAGE NUMBER TO CALLERS R0 * S0188 * (MSB) FROM EITHER 8/30 OR PACKET 27 DATA. * S0189 * POINTER TO START OF DATA IS IN CALLERS R1. * S0190 * * S0191 * CALL = BLWP @GETSPN * S0192 * * S0193 ************************************************************ S0194 211A F0C6 GETSPN DATA WORKS2,GETSPV 211C 211E S0195 * S0196 211E C32D GETSPV MOV @2(R13),WR12 GET POINTER TO DATA 2120 0002 S0197 2122 05CC INCT WR12 POINT TO PAGE SUB CODE UNITS S0198 2124 D2BC MOVB *WR12+,WR10 GET UNITS S0199 2126 D25C MOVB *WR12,WR9 GET TENS S0200 2128 0249 ANDI WR9,>0700 REMOVE C4 212A 0700 S0201 212C 0A49 SLA WR9,4 TO MS NIBBLE S0202 212E F24A SOCB WR10,WR9 SET UP BYTE S0203 2130 C749 MOV WR9,*R13 PASS TO CALLERS R0 MSB S0204 2132 0380 RTWP S0205 2134 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0114 0068 COPY PUTROW.990 T0001 ************************************************************ T0002 * * T0003 * PUTROW - Put packet into page store * T0004 * * T0005 * USE OF REGISTERS: * T0006 * R0 = WORK REGISTER * T0007 * R1 = WORK REGISTER * T0008 * R2 = WORK REGISTER * T0009 * R3 = WORK REGISTER * T0010 * R6 = FLAG BIT REGISTER * T0011 * R7 = INCOMING MAGAZINE NUMBER (TIMES 2) * T0012 * R8 = INCOMING SUB PAGE NUMBER * T0013 * R9 = INCOMING ROW NUMBER * T0014 * R10= STACK POINTER * T0015 * R11= RETURN ADDRESS * T0016 * R14= FLAG BIT REGISTER * T0017 * R15= FIRST FREE LINK POINTER * T0018 * * T0019 * AVAILABLE: R4,R5,R12 * T0020 * * T0021 * Postconditions: ROW IN 'ROWST' IS XFERED TO MAIN RAM * T0022 * MAPPER IS CLEARED * T0023 * * T0024 * Called by: MAIN * T0025 * * T0026 * Calls: NONE * T0027 * * T0028 * AUTHOR: COLIN HINSON * T0029 ************************************************************ T0030 * T0031 2134 D827 PUTROW MOVB @MAGMAP+1(R7),@MAPPER SET UP THE MAPPER 2136 D013 2138 FC00 T0032 213A 04C0 CLR R0 T0033 213C 04C2 CLR R2 T0034 213E D809 MOVB R9,@R2LSB Fetch row number 2140 F005 T0035 2142 0282 CI R2,25 Ghost row ? 2144 0019 T0036 2146 1A04 JL PUTR10 No - jump T0037 2148 0282 CI R2,27 PACKET 27? 214A 001B T0038 214C 163B JNE PTRXIT NO, EXIT T0039 214E 0642 DECT R2 Adjust for ghost row storage T0040 2150 C0C2 PUTR10 MOV R2,R3 SAVE FOR LATER T0041 2152 C067 MOV @MAGADR(R7),R1 GET PAGE START ADDRESS 2154 D002 T0042 2156 0221 AI R1,COUNTS POINT TO START OF COUNTERS 2158 0410 T0043 215A A081 A R1,R2 ADD THE START OF PAGE OFFSET T0044 215C D012 MOVB *R2,R0 GET THE COUNT T0045 215E 0280 CI R0,8*256 REACHED 8? 2160 0800 T0046 2162 1403 JHE SETC05 YES, FIX THE COUNTERS T0047 2164 B4A0 AB @BYTE01,*R2 INCREMENT THE COUNT 2166 005E NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0115 T0048 2168 101D JMP PUTR20 T0049 * T0050 * A COUNT HAS REACHED 8 - REDUCE ALL COUNTS ABOVE 4, TO 4. T0051 * ANY COUNTS OF 1 OR MORE, REDUCE BY ONE. T0052 * SET FLAG (HICNT) TO INDICATE MAX COUNT REACHED. T0053 * T0054 216A D860 SETC05 MOVB @BYTEFF,@HICNT(R1) SET THE MAX COUNT FLAG 216C 008D 216E 001A T0055 2170 0204 LI R4,26 26 ROWS PER PAGE 2172 001A T0056 2174 D011 SETC10 MOVB *R1,R0 GET A COUNT T0057 2176 1311 JEQ SETC40 IF ZERO, NEXT COUNT T0058 2178 0280 CI R0,4*256 CHECK FOR COUNT RESET VALUE 217A 0400 T0059 217C 1A07 JL SETC20 T0060 217E 1303 JEQ SETC15 T0061 2180 0200 LI R0,4*256 RESET COUNT TO 4 2182 0400 T0062 2184 100A JMP SETC40 AND UPDATE THE COUNTER T0063 * T0064 2186 0200 SETC15 LI R0,3*256 2188 0300 T0065 218A 1007 JMP SETC40 T0066 218C T0067 218C 0280 SETC20 CI R0,1*256 IS COUNT ONE? 218E 0100 T0068 2190 1602 JNE SETC30 NO T0069 2192 04C0 CLR R0 YES, CLEAR IT T0070 2194 1002 JMP SETC40 T0071 * T0072 2196 0200 SETC30 LI R0,1*256 SET THE COUNT TO ONE 2198 0100 T0073 219A DC40 SETC40 MOVB R0,*R1+ UPDATE THE COUNTER T0074 219C 0604 DEC R4 COUNT THE ROW T0075 219E 16EA JNE SETC10 LOOP TILL 26 ROWS DONE. T0076 21A0 D4A0 MOVB @BYTE05,*R2 THEN SET UP CURRENT ROW COUNT 21A2 0078 T0077 * T0078 21A4 C003 PUTR20 MOV R3,R0 GET THE ROW NO. (IN LSB) T0079 21A6 3820 MPY @FORTY,R0 Offset to start of row 21A8 0048 T0080 21AA D9E0 MOVB @BYTE00,@MAGMAP(R7) SET PAGE NOT CLEARED. 21AC 004E 21AE D012 T0081 21B0 A067 PUTR30 A @MAGADR(R7),R1 Offset to start of page 21B2 D002 T0082 21B4 0202 LI R2,ROWST+2 Point to packet 21B6 F058 T0083 21B8 0203 LI R3,ROWEND POINT TO END OF PACKET 21BA F080 T0084 21BC 0204 LI R4,MAPPER 21BE FC00 T0085 * T0086 * CALL DOWNLOADED ROUTINE AND RETURN FROM THERE TO CALLER T0087 * T0088 21C0 0460 B @PUTRLP AND RETURN TO CALLER FROM THERE NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0116 21C2 F0BC T0089 * T0090 * T0091 21C4 04E0 PTRXIT CLR @MAPPER ENSURE MAP PAGE ZERO 21C6 FC00 T0092 21C8 045B RT AND RETURN TO CALLER T0093 * T0094 * PUTTING HEADER INTO RAM. - CHECK FOR CLEAR PAGE ETC. T0095 * T0096 21CA D827 PUTHDR MOVB @MAGMAP+1(R7),@MAPPER SET UP THE MAPPER 21CC D013 21CE FC00 T0097 21D0 25A0 CZC @NOSUBP,R6 SUB PAGES ALLOWED? 21D2 0054 T0098 21D4 1603 JNE HPUT2 NO, JUMP T0099 21D6 21A0 COC @SUBHDR,R6 IS IT A SUB PAGE HEADER? 21D8 0062 T0100 21DA 1309 JEQ HPUT5 YES, ABORT THE CLEAR PAGE T0101 21DC D020 HPUT2 MOVB @SUBPT,R0 GET ERASE PAGE DATA 21DE F05B T0102 21E0 2020 COC @C4,R0 ERASE PAGE SET? 21E2 0064 T0103 21E4 1604 JNE HPUT5 T0104 21E6 99E0 CB @BYTEFF,@MAGMAP(R7) PAGE CLEARED NOW? 21E8 008D 21EA D012 T0105 21EC 1602 JNE HPUT10 NO, GO CLEAR IT T0106 21EE 04C1 HPUT5 CLR R1 T0107 21F0 10DF JMP PUTR30 TRANSFER ROW TO RAM T0108 * T0109 21F2 C067 HPUT10 MOV @MAGADR(R7),R1 GET PAGE START ADR. 21F4 D002 T0110 21F6 0202 LI R2,' ' SET UP SPACES 21F8 2020 T0111 21FA C0C1 MOV R1,R3 COPY T0112 21FC 0223 AI R3,COUNTS COMPUTE END ADR. 21FE 0410 T0113 2200 CC42 HPUT20 MOV R2,*R1+ CLEAR THE STORE T0114 2202 80C1 C R1,R3 CHECK FOR END T0115 2204 1AFD JL HPUT20 T0116 2206 0223 AI R3,COUNT4+1 COMPUTE END OF COUNTERS 2208 001C T0117 220A 04F1 HPUT30 CLR *R1+ T0118 220C 80C1 C R1,R3 T0119 220E 1AFD JL HPUT30 T0120 2210 D9E0 MOVB @BYTEFF,@MAGMAP(R7) SET PAGE CLEARED FLAG 2212 008D 2214 D012 T0121 2216 10EB JMP HPUT5 GO TRANSFER ROW TO RAM T0122 2218 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0117 0070 COPY VDPUTILS.990 U0001 ************************************************************ U0002 * * U0003 * CLRDIS - Clears the screen display area * U0004 * * U0005 * Preconditions: * U0006 * * U0007 * Postconditions: * U0008 * * U0009 * Called by: * U0010 * * U0011 * Calls: SETADR, * U0012 * * U0013 * Local variables: R0,R1 * U0014 * * U0015 * Global variables: * U0016 * * U0017 * Comments: Also clears the double height * U0018 * flags * U0019 * * U0020 * AUTHOR: COLIN HINSON * U0021 ************************************************************ U0022 2218 0200 CLRBTM LI R0,24*80+DSPLAY POINT TO BOTTOM ROW 221A 1180 U0023 221C 0201 LI R1,80 ONE ROW 221E 0050 U0024 2220 100F JMP CLRMID U0025 * U0026 2222 0201 CLRHDR LI R1,80-16 ONE ROW LESS THE TIME BYTES 2224 0040 U0027 2226 1002 JMP CLRH10 U0028 * U0029 2228 0201 CLRALL LI R1,25*80 COMPLETE SCREEN 222A 07D0 U0030 222C 0200 CLRH10 LI R0,DSPLAY START OF HEADER 222E 0A00 U0031 2230 1007 JMP CLRMID U0032 * U0033 2232 0201 CLRCTR LI R1,23*80 LEAVE TOP AND BOTTOM ROWS 2234 0730 U0034 2236 1002 JMP CLRD10 U0035 * U0036 2238 0201 CLRDIS LI R1,24*80 Number of bytes to clear 223A 0780 U0037 223C 0200 CLRD10 LI R0,DSPLAY+80 Start of screen area 223E 0A50 U0038 2240 2C00 CLRMID SETA R0 Go point to it U0039 2242 04C0 CLR R0 Null byte U0040 2244 D740 CDLP MOVB R0,*VRAM Write a byte U0041 2246 0601 DEC R1 U0042 2248 16FD JNE CDLP U0043 * CLEAR THE DOUBLE HEIGHT FLAGS U0044 224A 0200 LI R0,DHTFGS 224C D068 U0045 224E 0201 LI R1,DHTFGS+24 2250 D080 U0046 2252 04F0 DHTFCL CLR *R0+ NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0118 U0047 2254 8040 C R0,R1 U0048 2256 1AFD JL DHTFCL U0049 2258 045B RT U0050 ************************************************************ U0051 * * U0052 * PAGQTY - Put the quantity of stored pages * U0053 * on the screen. * U0054 * * U0055 ************************************************************ U0056 225A 0200 PGQNTY LI R0,DSPLAY+52 WRITE STARTING AT COL 26 225C 0A34 U0057 225E 2C00 SETA R0 U0058 2260 C060 MOV @PAGCNT,R1 GET THE CURRENT PAGE COUNT 2262 D000 U0059 2264 04C0 CLR R0 U0060 2266 3C20 DIV @TEN,R0 COMPUTE UNITS 2268 0044 U0061 226A C081 MOV R1,R2 SAVE U0062 226C C040 MOV R0,R1 SET UP U0063 226E 1303 JEQ PAGQ10 U0064 2270 04C0 CLR R0 U0065 2272 3C20 DIV @TEN,R0 COMPUTE TENS 2274 0044 U0066 * U0067 * PAGE UNITS IN R2, TENS IN R1, & HUNDREDS IN R0 U0068 * U0069 2276 D0E0 PAGQ10 MOVB @CYAN,R3 SET UP CYAN ATR. 2278 0089 U0070 227A D743 MOVB R3,*VRAM U0071 227C 0220 AI R0,'0' 227E 0030 U0072 2280 D760 MOVB @R0LSB,*VRAM SEND HUNDREDS 2282 F001 U0073 2284 D743 MOVB R3,*VRAM U0074 2286 0221 AI R1,'0' 2288 0030 U0075 228A D760 MOVB @R1LSB,*VRAM SEND TENS 228C F003 U0076 228E D743 MOVB R3,*VRAM U0077 2290 0222 AI R2,'0' 2292 0030 U0078 2294 D760 MOVB @R2LSB,*VRAM SEND UNITS 2296 F005 U0079 2298 045B RT RETURN TO CALLER U0080 ************************************************************ U0081 * * U0082 * WRTHXN,WRTHXB, WRTHXW write the data in R0 (byte or * U0083 * nibble or word) to the screen, attribute is in R2 * U0084 * Data for a nibble is in the ls nibble of the MS byte. * U0085 * * U0086 ************************************************************ U0087 229A F0C6 WRTHXN DATA WORKS2,WTHXNV 229C 22A6 U0088 229E F0C6 WRTHXB DATA WORKS2,WTHXBV 22A0 22B2 U0089 22A2 F0C6 WRTHXW DATA WORKS2,WTHXWV 22A4 22B8 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0119 U0090 * U0091 * WHX1 ENTRY POINT U0092 * U0093 22A6 C29D WTHXNV MOV *WR13,WR10 GET VALUE TO PRINT U0094 22A8 0209 LI WR9,1 ONE NIBBLE TO WRITE 22AA 0001 U0095 22AC 020B LI WR11,>FA00 POINT TO VRAM WRITE 22AE FA00 U0096 22B0 100A JMP NIBENT U0097 * U0098 * WRITE HEX BYTE ENTRY POINT U0099 * U0100 22B2 0209 WTHXBV LI WR9,2 TWO NIBBLES TO WRITE 22B4 0002 U0101 22B6 1002 JMP BYTENT U0102 * U0103 * WRITE HEX WORD ENTRY POINT U0104 * U0105 22B8 0209 WTHXWV LI WR9,4 SET COUNT FOR 4 DIGITS OUT 22BA 0004 U0106 22BC C31D BYTENT MOV *WR13,WR12 GET THE VALUE U0107 22BE 020B LI WR11,>FA00 POINT TO VRAM WRITE 22C0 FA00 U0108 22C2 C28C LOOP1 MOV WR12,WR10 U0109 22C4 094A SRL WR10,4 ALIGN U0110 22C6 024A NIBENT ANDI WR10,>0F00 BYTE ALIGN 22C8 0F00 U0111 22CA 028A CI WR10,>900 NUMERIC? 22CC 0900 U0112 22CE 1202 JLE NUM YES, SKIP U0113 22D0 022A AI WR10,>700 ALPHA ADJUST 22D2 0700 U0114 22D4 022A NUM AI WR10,'0'*256 NUMERIC TO ASCII 22D6 3000 U0115 22D8 D6ED MOVB @4(R13),*WR11 WRITE THE ATTRIBUTE 22DA 0004 U0116 22DC D6CA MOVB WR10,*WR11 WRITE THE CHARACTER U0117 22DE 0BCC SRC WR12,12 ALIGN NEXT DIGIT U0118 22E0 0609 DEC WR9 DONE? U0119 22E2 16EF JNE LOOP1 NO, LOOP U0120 22E4 0380 RTWP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0120 0072 COPY DISPN.990 V0001 ************************************************************ V0002 * * V0003 * DISPN - Displays the requested page number on * V0004 * the screen * V0005 * * V0006 * USE OF REGISTERS: * V0007 * R0 = WORK REGISTER * V0008 * R1 = WORK REGISTER * V0009 * R2 = WORK REGISTER * V0010 * R3 = WORK REGISTER * V0011 * R4 = HOLDS PKEY * V0012 * R6 = FLAG BIT REGISTER * V0013 * R7 = INCOMING MAGAZINE NUMBER (TIMES 2) * V0014 * R8 = INCOMING SUB PAGE NUMBER * V0015 * R9 = INCOMING ROW NUMBER * V0016 * R10= STACK POINTER * V0017 * R11= RETURN ADDRESS * V0018 * R13= POINTER TO VDP MEMORY ACCESS * V0019 * R14= FLAG BIT REGISTER * V0020 * R15= FIRST FREE LINK POINTER * V0021 * * V0022 * AVAILABLE: R5,R12 * V0023 * * V0024 * Called by: * V0025 * * V0026 * Calls: SETADR * V0027 * * V0028 * AUTHOR: COLIN HINSON * V0029 * * V0030 ************************************************************ V0031 22E6 04C0 DISPN CLR R0 FOR BYTE MOVE V0032 22E8 D020 MOVB @PAGHEX,R0 GET PAGE NUMBER 22EA F050 V0033 22EC 1103 JLT DPGN05 IF INVALID, SKIP V0034 22EE 0A10 SLA R0,1 MPY BY 2 V0035 22F0 D800 MOVB R0,@DISMAG+1 SET UP MAGAZINE INDEX 22F2 F093 V0036 22F4 23A0 DPGN05 COC @INHEDR,R14 HEADER INHIBITED? 22F6 005E V0037 22F8 135F JEQ DPGNXT YES, ABORT V0038 * V0039 22FA C120 DPGN10 MOV @PKEY,R4 GET CURRENT KEY ENTRY COUNT 22FC D044 V0040 22FE 0203 LI R3,7 7 DIGITS TO WRITE 2300 0007 V0041 2302 0200 LI R0,DSPLAY Point to start of screen 2304 0A00 V0042 2306 2C00 SETA R0 Set VDP pointer V0043 2308 D0A0 MOVB @WHITE,R2 DEFAULT TO WHITE PAGE NO. 230A 008A V0044 230C 21A0 COC @NOPAGE,R6 IS PAGE AVAILABLE? 230E 006C V0045 2310 1604 JNE DPGN20 YES V0046 2312 41A0 SZC @NOPAGE,R6 CLEAR THE FLAG 2314 006C V0047 2316 0202 LI R2,>A000 SET TO MAGENTA NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0121 2318 A000 V0048 231A 23A0 DPGN20 COC @NFDISP,R14 IN N/F MODE? 231C 0058 V0049 231E 160A JNE DPGN30 NO, SKIP V0050 2320 23A0 COC @NOHDR,R14 MESSAGE IN HEADER? 2322 004E V0051 2324 1302 JEQ DPGN25 YES, DISPLAY HEADER IN BOX V0052 2326 C104 MOV R4,R4 IF NO KEY ENTRY IN PROGRESS V0053 2328 1305 JEQ DPGN30 SKIP V0054 232A D760 DPGN25 MOVB @INC,*VRAM SET BOX DELIMITER ATTR. 232C 0064 V0055 232E D760 MOVB @BYTE20,*VRAM AND THEN WRITE DELIMITER 2330 0068 V0056 2332 0603 DEC R3 COUNT THE CHAR V0057 2334 D760 DPGN30 MOVB @BYTEE0,*VRAM Write 'P' to screen 2336 008A V0058 2338 D760 MOVB @CHP,*VRAM 233A 008E V0059 233C C044 MOV R4,R1 GET PAGE KEY POINTER V0060 233E 1602 JNE DPGN40 V0061 2340 0201 LI R1,4 SET UP 3 DIGITS 2342 0004 V0062 2344 0601 DPGN40 DEC R1 PKEY IS A POINTER, NOT COUNTER V0063 2346 1334 JEQ WSPG60 IF ZERO, NO DIGITS V0064 2348 C020 MOV @PAGHEX,R0 GET PAGE NUMBER 234A F050 V0065 234C 0240 ANDI R0,>7FFF REMOVE MSBIT (IF ANY) 234E 7FFF V0066 * V0067 * CODE DELETED FOR NO SCREEN UPDATE WITH INHIBIT HEADER V0068 * - ADDED ON ROUTINE ENTRY V0069 * V0070 * SLA R0,1 V0071 * MOVB R0,@DISMAG+1 SET UP MAGAZINE INDEX V0072 * SZCB @WD0100,@DISMAG+1 CLEAR LS BIT IN CASE IT'S SET V0073 * SRL R0,1 REMOVE MS BIT (INCOMPLETE NO.) V0074 * V0075 * V0076 2350 D000 MOVB R0,R0 MAGAZINE 0? V0077 2352 1602 JNE DPGN50 NO V0078 2354 0220 AI R0,>0800 YES, LOAD 8 2356 0800 V0079 2358 0220 DPGN50 AI R0,'0'*256 MAKE DIGIT ASCII 235A 3000 V0080 235C D742 MOVB R2,*VRAM Attribute to screen V0081 235E D740 MOVB R0,*VRAM Write digit to screen V0082 2360 0603 DEC R3 COUNT THE CHARACTER V0083 2362 0601 DEC R1 COUNT THE DIGIT V0084 2364 1304 JEQ WSPG10 IF DONE, DO SUB PAGE V0085 2366 0A40 SLA R0,4 NEXT DIGIT V0086 2368 0240 ANDI R0,>0FF0 CLEAR MS NIBBLE 236A 0FF0 V0087 236C 10F5 JMP DPGN50 AND LOOP BACK V0088 * V0089 * WRITE THE SUB PAGE NO. IF NECESSARY V0090 * V0091 236E C104 WSPG10 MOV R4,R4 PAGE NO. BEING ENTERED? NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0122 V0092 2370 161F JNE WSPG60 YES, WRITE SPACES V0093 2372 D020 MOVB @SUBHEX+1,R0 GET THE SUB PAGE 2374 F053 V0094 2376 111C JLT WSPG60 IF INVALID, WRITE SPACES V0095 * V0096 * IF THE SUB PAGE IS ZERO, AND NO MORE LINKS, NO SUB PAGE TO V0097 * V0098 2378 D0A0 MOVB @WHITE,R2 DEFAULT TO WHITE SUB PAGE NO. 237A 008A V0099 237C C060 MOV @PAGHEX,R1 GET DISPLAYED PAGE NO. 237E F050 V0100 2380 0A11 SLA R1,1 WORD ALIGN V0101 2382 C061 MOV @INDEX(R1),R1 GET POINTER & FLAG 2384 C000 V0102 2386 2060 COC @WD0001,R1 SUB PAGE ALLOWED? 2388 004E V0103 238A 1609 JNE WSPG20 NO, JUMP V0104 238C D000 MOVB R0,R0 SUB PAGE = ZERO? V0105 238E 1609 JNE WSPG30 NO, WRITE SUB PAGE IN WHITE V0106 2390 0241 ANDI R1,LNKMSK REMOVE SUB PAGE FLAG 2392 FFFE V0107 2394 04E0 CLR @MAPPER 2396 FC00 V0108 2398 C051 MOV *R1,R1 GET NEXT LINK POINTER V0109 239A 130A JEQ WSPG60 NO MORE LINKS, WRITE 4 SPACES V0110 239C 1002 JMP WSPG30 ELSE WRITE SUB PAGE IN WHITE V0111 * V0112 * WRITE THE SUB PAGE NUMBER V0113 * V0114 239E D0A0 WSPG20 MOVB @RED,R2 WRITE CURRENT SUB PAGE IN RED 23A0 0068 V0115 * V0116 23A2 D742 WSPG30 MOVB R2,*VRAM WRITE ATTRIBUTE V0117 23A4 D760 MOVB @FSTOP,*VRAM WRITE DECIMAL POINT 23A6 008F V0118 23A8 0603 DEC R3 COUNT THE CHARACTER V0119 23AA 0420 BLWP @WRTHXB WRITE THE MSBYTE OF R0 TO SCREEN 23AC 229E V0120 23AE 0643 DECT R3 COUNT 2 DIGITS V0121 * V0122 23B0 D743 WSPG60 MOVB R3,*VRAM V0123 23B2 D743 MOVB R3,*VRAM V0124 23B4 0603 DEC R3 V0125 23B6 16FC JNE WSPG60 V0126 23B8 045B DPGNXT RT NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0123 0074 COPY XOPS.990 W0001 ************************************************************ W0002 * * W0003 * SETADR - Programs an address into the VDP * W0004 * registers COL and ROW * W0005 * * W0006 ************************************************************ W0007 23BA D820 SETADR MOVB @BYTE02,@VDPREG Point to ROW 23BC 0060 23BE F800 W0008 23C0 D81B MOVB *R11,@VDPREG Program ROW register 23C2 F800 W0009 23C4 D820 MOVB @BYTE01,@VDPREG Point to COL 23C6 005E 23C8 F800 W0010 23CA D82B MOVB @1(R11),@VDPREG Program COL register(R0 LSB) 23CC 0001 23CE F800 W0011 23D0 0380 RTWP NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0124 0076 COPY CHARSENG.990 X0001 * X0002 * Line no. 9 X0003 * X0004 23D2 00 GEN0 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0005 23DA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0006 23E2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0007 23EA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0008 23F2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0009 23FA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0010 2402 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0011 240A 00 BYTE >00,>00,>00,>20,>00,>00,>00,>00 X0012 2412 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0013 241A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0014 2422 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0015 242A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0016 2432 00 BYTE >00,>00,>00,>00,>00,>00,>00,>7C X0017 243A 00 BYTE >00,>00,>7C,>00,>00,>00,>00,>00 X0018 2442 80 BYTE >80,>02,>00,>00,>00,>00,>00,>00 X0019 244A 00 BYTE >00,>7C,>00,>00,>00,>00,>00,>00 X0020 * X0021 * Line no. 8 X0022 * X0023 2452 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0024 245A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0025 2462 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0026 246A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0027 2472 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0028 247A 00 BYTE >00,>00,>00,>00,>20,>00,>00,>00 X0029 2482 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0030 248A 00 BYTE >00,>00,>00,>10,>00,>00,>00,>00 X0031 2492 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0032 249A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0033 24A2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0034 24AA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0035 24B2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>02 X0036 24BA 00 BYTE >00,>00,>82,>00,>00,>00,>00,>00 X0037 24C2 80 BYTE >80,>02,>00,>00,>00,>00,>00,>00 X0038 24CA 00 BYTE >00,>02,>00,>00,>00,>00,>00,>00 X0039 * X0040 * Line no. 7 X0041 * X0042 24D2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0043 24DA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0044 24E2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0045 24EA 00 BYTE >00,>00,>00,>00,>0E,>1E,>1C,>04 X0046 24F2 00 BYTE >00,>10,>00,>FE,>10,>8E,>7A,>00 X0047 24FA 20 BYTE >20,>08,>10,>00,>10,>00,>10,>80 X0048 2502 38 BYTE >38,>7C,>FE,>7C,>08,>7C,>7C,>10 X0049 250A 7C BYTE >7C,>78,>30,>30,>08,>00,>40,>10 X0050 2512 7E BYTE >7E,>82,>FC,>7C,>FC,>FE,>80,>7C X0051 251A 82 BYTE >82,>38,>7C,>84,>FE,>82,>82,>7C X0052 2522 80 BYTE >80,>7A,>82,>7C,>10,>7C,>10,>44 X0053 252A 82 BYTE >82,>10,>FE,>10,>1E,>10,>10,>44 X0054 2532 00 BYTE >00,>7E,>FC,>7E,>7E,>7C,>20,>7A X0055 253A 82 BYTE >82,>38,>02,>44,>38,>92,>82,>7C X0056 2542 BC BYTE >BC,>7A,>80,>FC,>1C,>7A,>10,>6C NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0125 X0057 254A 84 BYTE >84,>7E,>FE,>04,>28,>04,>00,>FE X0058 * X0059 * Line no. 6 X0060 * X0061 2552 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0062 255A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0063 2562 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0064 256A 00 BYTE >00,>00,>00,>00,>04,>10,>02,>1E X0065 2572 00 BYTE >00,>00,>00,>60,>FC,>4E,>84,>00 X0066 257A 40 BYTE >40,>04,>92,>10,>10,>00,>00,>40 X0067 2582 44 BYTE >44,>10,>80,>82,>08,>82,>82,>10 X0068 258A 82 BYTE >82,>04,>30,>30,>10,>00,>20,>00 X0069 2592 80 BYTE >80,>82,>82,>82,>42,>80,>80,>82 X0070 259A 82 BYTE >82,>10,>82,>88,>80,>82,>86,>82 X0071 25A2 80 BYTE >80,>84,>84,>82,>10,>82,>28,>AA X0072 25AA 44 BYTE >44,>10,>40,>20,>10,>08,>10,>44 X0073 25B2 00 BYTE >00,>84,>82,>80,>82,>80,>20,>86 X0074 25BA 82 BYTE >82,>10,>02,>48,>10,>92,>82,>82 X0075 25C2 C2 BYTE >C2,>86,>80,>02,>20,>86,>28,>92 X0076 25CA 48 BYTE >48,>82,>40,>1E,>28,>1E,>10,>FE X0077 * X0078 * Line no. 5 X0079 * X0080 25D2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0081 25DA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0082 25E2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0083 25EA 00 BYTE >00,>00,>00,>00,>84,>8C,>8C,>94 X0084 25F2 00 BYTE >00,>10,>00,>20,>12,>20,>8A,>00 X0085 25FA 80 BYTE >80,>02,>54,>10,>00,>00,>00,>20 X0086 2602 82 BYTE >82,>10,>40,>02,>FE,>02,>82,>10 X0087 260A 82 BYTE >82,>02,>00,>00,>20,>FE,>10,>10 X0088 2612 9C BYTE >9C,>82,>82,>80,>42,>80,>80,>8E X0089 261A 82 BYTE >82,>10,>02,>90,>80,>82,>8A,>82 X0090 2622 80 BYTE >80,>8A,>88,>02,>10,>82,>44,>92 X0091 262A 28 BYTE >28,>10,>20,>40,>EC,>04,>10,>FE X0092 2632 00 BYTE >00,>7C,>82,>80,>82,>FE,>20,>82 X0093 263A 82 BYTE >82,>10,>02,>70,>10,>92,>82,>82 X0094 2642 82 BYTE >82,>82,>C0,>7C,>20,>82,>44,>92 X0095 264A 30 BYTE >30,>82,>38,>54,>28,>D4,>00,>FE X0096 * X0097 * Line no. 4 X0098 * X0099 2652 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0100 265A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0101 2662 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0102 266A 00 BYTE >00,>00,>00,>00,>8C,>82,>82,>8C X0103 2672 00 BYTE >00,>10,>00,>78,>7C,>10,>70,>00 X0104 267A 80 BYTE >80,>02,>38,>FE,>00,>7C,>00,>10 X0105 2682 82 BYTE >82,>10,>3C,>1C,>48,>02,>FC,>08 X0106 268A 7C BYTE >7C,>7E,>30,>30,>40,>00,>08,>0C X0107 2692 A2 BYTE >A2,>FE,>FC,>80,>42,>F8,>F8,>80 X0108 269A FE BYTE >FE,>10,>02,>E0,>80,>92,>92,>82 X0109 26A2 FC BYTE >FC,>82,>FC,>7C,>10,>82,>82,>92 X0110 26AA 10 BYTE >10,>10,>10,>FE,>42,>FE,>92,>44 X0111 26B2 FE BYTE >FE,>04,>C2,>80,>86,>82,>F8,>82 X0112 26BA C2 BYTE >C2,>10,>02,>48,>10,>92,>C2,>82 X0113 26C2 C2 BYTE >C2,>86,>A0,>80,>20,>82,>82,>82 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0126 X0114 26CA 48 BYTE >48,>82,>04,>4C,>28,>2C,>7C,>FE X0115 * X0116 * Line no. 3 X0117 * X0118 26D2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0119 26DA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0120 26E2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0121 26EA 00 BYTE >00,>00,>00,>00,>E4,>EC,>EC,>E4 X0122 26F2 00 BYTE >00,>10,>28,>20,>90,>08,>88,>20 X0123 26FA 80 BYTE >80,>02,>54,>10,>00,>00,>00,>08 X0124 2702 82 BYTE >82,>10,>02,>02,>28,>FC,>80,>04 X0125 270A 82 BYTE >82,>82,>30,>30,>20,>FE,>10,>02 X0126 2712 9E BYTE >9E,>82,>82,>80,>42,>80,>80,>80 X0127 271A 82 BYTE >82,>10,>02,>90,>80,>AA,>A2,>82 X0128 2722 82 BYTE >82,>82,>82,>80,>10,>82,>82,>82 X0129 272A 28 BYTE >28,>28,>08,>40,>5C,>04,>54,>FE X0130 2732 00 BYTE >00,>78,>BC,>7E,>7A,>7C,>20,>7E X0131 273A BC BYTE >BC,>30,>06,>44,>10,>EC,>BC,>7C X0132 2742 BC BYTE >BC,>7A,>9E,>7C,>70,>82,>82,>82 X0133 274A 84 BYTE >84,>82,>FE,>44,>28,>64,>00,>FE X0134 * X0135 * Line no. 2 X0136 * X0137 2752 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0138 275A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0139 2762 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0140 276A 00 BYTE >00,>00,>00,>00,>80,>80,>80,>80 X0141 2772 00 BYTE >00,>10,>28,>22,>7E,>E4,>88,>10 X0142 277A 40 BYTE >40,>04,>92,>10,>00,>00,>00,>04 X0143 2782 44 BYTE >44,>30,>82,>82,>18,>80,>40,>02 X0144 278A 82 BYTE >82,>82,>00,>00,>10,>00,>20,>82 X0145 2792 82 BYTE >82,>44,>82,>82,>42,>80,>80,>82 X0146 279A 82 BYTE >82,>10,>02,>88,>80,>C6,>C2,>82 X0147 27A2 82 BYTE >82,>82,>82,>82,>10,>82,>82,>82 X0148 27AA 44 BYTE >44,>44,>04,>20,>C0,>08,>38,>44 X0149 27B2 00 BYTE >00,>00,>80,>00,>02,>00,>20,>00 X0150 27BA 80 BYTE >80,>00,>00,>40,>10,>00,>00,>00 X0151 27C2 00 BYTE >00,>00,>00,>00,>20,>00,>00,>00 X0152 27CA 00 BYTE >00,>00,>00,>C0,>28,>20,>10,>FE X0153 * X0154 * Line no. 1 X0155 * X0156 27D2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0157 27DA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0158 27E2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0159 27EA 00 BYTE >00,>00,>00,>00,>F0,>F0,>F0,>F0 X0160 27F2 00 BYTE >00,>10,>28,>1C,>10,>E2,>70,>10 X0161 27FA 20 BYTE >20,>08,>10,>00,>00,>00,>00,>02 X0162 2802 38 BYTE >38,>10,>7C,>7C,>08,>FE,>3C,>FE X0163 280A 7C BYTE >7C,>7C,>00,>00,>08,>00,>40,>7C X0164 2812 7C BYTE >7C,>38,>FC,>7C,>FC,>FE,>FE,>7C X0165 281A 82 BYTE >82,>38,>02,>84,>80,>82,>82,>7C X0166 2822 FC BYTE >FC,>7C,>FC,>7C,>FE,>82,>82,>82 X0167 282A 82 BYTE >82,>82,>FE,>10,>40,>10,>10,>44 X0168 2832 00 BYTE >00,>00,>80,>00,>02,>00,>1E,>00 X0169 283A 80 BYTE >80,>10,>02,>40,>30,>00,>00,>00 X0170 2842 00 BYTE >00,>00,>00,>00,>20,>00,>00,>00 NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:27 04-20-98 RE-WRITE THE DISPLAYED PAGE PAGE 0127 X0171 284A 00 BYTE >00,>00,>00,>40,>28,>C0,>00,>FE X0172 * X0173 * Line no. 0 X0174 * X0175 2852 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0176 285A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0177 2862 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0178 286A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0179 2872 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0180 287A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0181 2882 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0182 288A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0183 2892 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0184 289A 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0185 28A2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0186 28AA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0187 28B2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0188 28BA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0189 28C2 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0190 28CA 00 BYTE >00,>00,>00,>00,>00,>00,>00,>00 X0191 28D2 0077 28D2 GENEND EQU $ 0078 END NO ERRORS, NO WARNINGS NO$IDT 99000 FAMILY MACRO ASSEMBLER PC2.1 84.107 12:23:28 04-20-98 PAGE 0128 0001 0000 NO ERRORS, NO WARNINGS