0001 0000 ;TELEMARK CROSS ASSEMBLER (TASM) http://www.halcyon.com/squakvly/ 0002 0000 0003 0000 ;*************************************************** 0004 0000 ;*************************************************** 0005 0000 ;** ** 0006 0000 ;** PL-PA00-JOO1A ** 0007 0000 ;** ** 0008 0000 ;** ROCKWELL R6500 MICROCOMPUTER SYSTEM ** 0009 0000 ;** ** 0010 0000 ;** AIM 65 MONITOR ** 0011 0000 ;** ** 0012 0000 ;** PROGRAM LISTING ** 0013 0000 ;** ** 0014 0000 ;** REVISION A AUG 22, 1978 ** 0015 0000 ;** ** 0016 0000 ;*************************************************** 0017 0000 ;*************************************************** 0018 0000 0019 0000 ;ROCKWELL INTERNATIONAL 0020 0000 ;MICROELECTRONIC DEVICES 0021 0000 ;3310 MIRALOMA AVENUE 0022 0000 ;P. O. BOX 3669 0023 0000 ;ANAHEIM CA U.S.A. 92803 0024 0000 0025 0000 ; ************************************** 0026 0000 ; * USER 6522 ADDRESSES (A000-A00F) * 0027 0000 ; ************************************** 0028 A000 *=$A000 0029 A000 UDRB .BLOCK 1 ;DATA REG B 0030 A001 UDRAH .BLOCK 1 ;DATA REG A 0031 A002 UDDRB .BLOCK 1 ;DATA DIR REG B 0032 A003 UDDRA .BLOCK 1 ;DATA DIR REG A 0033 A004 UT1L .BLOCK 1 ;TIMER 1 COUNTER LOW 0034 A005 UT1CH .BLOCK 1 ;TIMER 1 COUNTER HIGH 0035 A006 UT1LL .BLOCK 1 ;TIMER 1 LATCH LOW 0036 A007 UT1LH .BLOCK 1 ;TIMER 1 LATCH HIGH 0037 A008 UT2L .BLOCK 1 ;TIMER 2 LATCH & COUNTER LOW 0038 A009 UT2H .BLOCK 1 ;TIMER 2 COUNTER HIGH 0039 A00A USR .BLOCK 1 ;SHIFT REGISTER 0040 A00B UACR .BLOCK 1 ;AUX CONTROL REGISTER 0041 A00C UPCR .BLOCK 1 ;PERIPHERAL CONTROL REGISTER 0042 A00D UIFR .BLOCK 1 ;INTERRUPT FLAG REGISTER 0043 A00E UIER .BLOCK 1 ;INTERRUPT ENABLE REGISTER 0044 A00F UDRA .BLOCK 1 ;DATA REGISTER A 0045 A010 0046 A010 ASSEM =$D000 ;ASSEMBLER ENTRY 0047 A010 BASIEN =$B000 ;BASIC ENTRY (COLD) 0048 A010 BASIRE =$B003 ;BASIC ENTRY (WARM) 0049 A010 0050 A010 ; MONITOR RAM 0051 A010 ;TEXT EDITOR EQUATES (PAG 0) 0052 A010 ;OVERLAPS TABUF2+50 (TAPE OUTPUT BUFFER $AD-$FF) 0053 00DF *=$00DF 0054 00DF NOWLN .BLOCK 2 ;CURRENT LINE 0055 00E1 BOTLN .BLOCK 2 ;LAST ACTIVE , SO FAR 0056 00E3 TEXT .BLOCK 2 ;LIMITS OF BUFFER (START) 0057 00E5 END .BLOCK 2 ;LIMITS OF BUFFER (END) 0058 00E7 SAVE .BLOCK 2 ;USED BY REPLACE 0059 00E9 OLDLEN .BLOCK 1 ;ORIG LENGTH 0060 00EA LENGTH .BLOCK 1 ;NEW LENGTH 0061 00EB STRING .BLOCK 20 ;FIND STRING 0062 00FF 0063 0100 *=$0100 0064 0100 ;BREAKPOINTS AND USER I/O HANDLERS 0065 0100 BKS .BLOCK 8 ;BRK LOCATIONS 0066 0108 UIN .BLOCK 2 ;USER INPUT HANDLER (VECTOR) 0067 010A UOUT .BLOCK 2 ;USER OUTPUT HANDLER (VECTOR) 0068 010C 0069 010C ;UNUSED KEYS TO GO TO USER ROUTINE 0070 010C KEYF1 .BLOCK 3 ;USER PUTS A JMP INSTRUCTION TO... 0071 010F KEYF2 .BLOCK 3 ;GO TO HIS ROUTINE ON EITHER KEY.. 0072 0112 KEYF3 .BLOCK 3 ;ENTRY 0073 0115 0074 0115 ;EQUATES FOR DISASSEMBLER (PAG 1) 0075 0116 *=$0116 ;SAME AS TAPE BUFFER I/O (TABUFF) 0076 0116 FORMA .BLOCK 1 0077 0117 LMNEM .BLOCK 1 0078 0118 RMNEM .BLOCK 14 0079 0126 0080 0126 ;EQUATES FOR MNEMONIC ENTRY 0081 0126 MOVAD .BLOCK 8 0082 012E TYPE .BLOCK 2 0083 0130 TMASK1 =MOVAD 0084 0130 TMASK2 =MOVAD+1 0085 0130 CH .BLOCK 3 0086 0133 ADFLD .BLOCK 20 0087 0147 HISTM =$A42E ;SHARE WITH NAME & HIST 0088 0147 BYTESM =HISTM+1 0089 0147 TEMPX =HISTM+3 0090 0147 TEMPA =HISTM+5 0091 0147 OPCODE =HISTM+6 0092 0147 CODFLG =HISTM+9 0093 0147 0094 0147 ; ********************************** 0095 0147 ; * 6532 ADDRESSES (A400-A7FF) * 0096 0147 ; ********************************** 0097 A400 *=$A400 0098 A400 MONRAM *=* 0099 A400 ;JUMP VECTORS 0100 A400 IRQV4 .BLOCK 2 ;IRQ AFTER MONITOR (NO BRK) 0101 A402 NMIV2 .BLOCK 2 ;NMI 0102 A404 IRQV2 .BLOCK 2 ;IRQ 0103 A406 0104 A406 ;I/O DEVICES 0105 A406 DILINK .BLOCK 2 ;DISPL LINKAGE (TO ECHO TO DISP) 0106 A408 TSPEED .BLOCK 1 ;TAPE SPEED (C7,5B,5A) 0107 A409 GAP .BLOCK 1 ;TIMING GAP BETWEEN BLOCKS 0108 A40A ;END OF USER ALTERABLE LOCATIONS 0109 A40A NPUL .BLOCK 1 ;# OF HALF PULSES... 0110 A40B TIMG .BLOCK 3 ;FOR TAPE 0111 A40E REGF .BLOCK 1 ;REGS FLG FOR SINGLE STEP MODE 0112 A40F DISFLG .BLOCK 1 ;DISASSEM FLG FOR SINGLE STEP MODE 0113 A410 BKFLG .BLOCK 1 ;ENABLE OR DIS BREAKPOINTS 0114 A411 PRIFLG .BLOCK 1 ;ENABLE OR DIS PRINTER 0115 A412 INFLG .BLOCK 1 ;INPUT DEVICE 0116 A413 OUTFLG .BLOCK 1 ;OUTPUT DEVICE 0117 A414 HISTP .BLOCK 1 ;HISTORY PTR (SINGLE STEP) (Y) 0118 A415 CURPO2 .BLOCK 1 ;DISPLAY POINTER 0119 A416 CURPOS .BLOCK 1 ;PRINTER POINTER 0120 A417 CNTH30 .BLOCK 1 ;BAUD RATE &... 0121 A418 CNTL30 .BLOCK 1 ;DELAY FOR TTY 0122 A419 COUNT .BLOCK 1 ;# OF LINES (0-99) 0123 A41A S1 .BLOCK 2 ;START ADDRESS 0124 A41C ADDR .BLOCK 2 ;END ADDRESS 0125 A41E CKSUM .BLOCK 2 ;CHECKSUM 0126 A420 S2 =BKS+6 ;VERTICAL COUNT (ONLY ON DUMP) 0127 A420 0128 A420 ;MONITOR REGISTERS 0129 A420 SAVPS .BLOCK 1 ;STATUS 0130 A421 SAVA .BLOCK 1 ;ACCUM 0131 A422 SAVX .BLOCK 1 ;X REG 0132 A423 SAVY .BLOCK 1 ;Y REG 0133 A424 SAVS .BLOCK 1 ;STACK POINTER 0134 A425 SAVPC .BLOCK 2 ;PROGR COUNTER 0135 A427 0136 A427 ;WORK AREAS FOR PAGE ZERO SIMULATION 0137 A427 ;SIMULATE LDA (NNNN),Y ,WHERE NNNN IS ABSOLUTE 0138 A427 STIY .BLOCK 3 ;STA NM,Y 0139 A42A CPIY .BLOCK 3 ;CMP NM,Y OR LDA NM,Y 0140 A42D .BLOCK 1 ;RTS 0141 A42E LDIY =CPIY ;LDA NM,Y 0142 A42E 0143 A42E ;VARIABLES FOR TAPE 0144 A42E NAME .BLOCK 6 ;FILE NAME 0145 A434 TAPIN .BLOCK 1 ;IN FLG (TAPE 1 OR 2) 0146 A435 TAPOUT .BLOCK 1 ;OUT FLG (TAPE 1 OR 2) 0147 A436 TAPTR .BLOCK 1 ;TAPE BUFF POINTER 0148 A437 TAPTR2 .BLOCK 1 ;TAPE OUTPUT BUFF PTR 0149 A438 HIST =NAME ;FOUR LAST ADDR + NEXT (SINGL STEP)` 0150 A438 BLK =$0115 ;BLOCK COUNT 0151 A438 TABUFF =$0116 ;TAPE BUFFER (I/O) 0152 A438 BLKO =$0168 ;OUTPUT BLOCK COUNT 0153 A438 TABUF2 =$00AD ;OUTPUT BUFF WHEN ASSEMB (PAG0) 0154 A438 DIBUFF .BLOCK 40 ;DISPLAY BUFFER 0155 A460 0156 A460 ;VARIABLES USED IN PRINTING 0157 A460 IBUFM .BLOCK 20 ;PRINTER BUFFER 0158 A474 IDIR .BLOCK 1 ;DIRECTION == 0=>+ , FF=>- 0159 A475 ICOL .BLOCK 1 ;COLUMN LEFTMOST=0,RIGHTMOST=4 0160 A476 IOFFST .BLOCK 1 ;OFFSET 0=LEFT DGT,1=RIGHT DGT 0161 A477 IDOT .BLOCK 1 ;# OF LAST DOT ENCOUNTERED 0162 A478 IOUTL .BLOCK 1 ;LOWER 8 OUTPUTS(8 COLS ON RIGHT) 0163 A479 IOUTU .BLOCK 1 ;UPPER 2 DIGITS 0164 A47A IBITL .BLOCK 1 ;1 BIT MSK FOR CURRENT OUTPUT 0165 A47B IBITU .BLOCK 1 0166 A47C IMASK .BLOCK 1 ;MSK FOR CURRENT ROW 0167 A47D JUMP .BLOCK 2 ;INDIR & ADDR OF TABL FOR CURR ROW 0168 A47F 0169 A47F ;VARIABLES FOR KEYBOARD 0170 A47F ROLLFL .BLOCK 1 ;SAVE LAST STROBE FOR ROLLOVER 0171 A480 KMASK =CPIY ;TO MASK OFF CTRL OR SHIFT 0172 A480 STBKEY =CPIY+1 ;STROBE KEY (1-8 COLUMNS) 0173 A480 0174 A480 ; I/O ASSIGNMENT 0175 A480 *=$A480 0176 A480 DRA2 .BLOCK 1 ;DATA REG A 0177 A481 DDRA2 .BLOCK 1 ;DATA DIR REG A 0178 A482 DRB2 .BLOCK 1 ;DATA REG B 0179 A483 DDRB2 .BLOCK 1 ;DATA DIR REG B 0180 A484 0181 A484 ; WRITE EDGE DETECT CONTROL (NOT USED BECAUSE KB) 0182 A484 *=$A484 0183 A484 DNPA7 .BLOCK 1 ;DISABLE PA7 INT ,NEG EDGE DET 0184 A485 DPPA7 .BLOCK 1 ;DIS PA7 INT ,POS EDGE DETE 0185 A486 ENPA7 .BLOCK 1 ;ENA PA7 INT ,NEG EDG DET 0186 A487 EPPA7 .BLOCK 1 ;ENA PA7 INT ,POS EDG DET 0187 A488 0188 A488 ; READ AND CLEAR INTERRUPT 0189 A485 *=$A485 0190 A485 RINT .BLOCK 1 ;BIT 7=TIMER FLG , BIT 6=PA7 FLG 0191 A486 0192 A486 ; TIMER INTERRUPT 0193 A494 *=$A494 0194 A494 ;WRITE COUNT TO INTERVAL TIMER 0195 A494 ;INTERRUPT DISABLE FOR THESE ADDRS 0196 A494 DIV1 .BLOCK 1 ;DIV BY 1 (DISABLE);ADD 8 TO ENA 0197 A495 DIV8 .BLOCK 1 ;DIV BY 8 (DIS) ; ADD 8 TO ENA 0198 A496 DIV64 .BLOCK 1 ;DIV BY 64 (DIS) ; ADD 8 TO ENA 0199 A497 DI1024 .BLOCK 1 ;DIV BY 1024 (DIS) ; ADD 8 TO ENA 0200 A498 0201 A498 ; ********************************************* 0202 A498 ; * 6522 ADDRESSES (MONIT) (A800-ABFF) * 0203 A498 ; ********************************************* 0204 A800 *=$A800 0205 A800 DRB .BLOCK 1 ;DATA REG B 0206 A801 DRAH .BLOCK 1 ;DATA REG A 0207 A802 DDRB .BLOCK 1 ;DATA DIR REG B 0208 A803 DDRA .BLOCK 1 ;DATA DIR REG A 0209 A804 T1L .BLOCK 1 ;TIMER 1 COUNTER LOW 0210 A805 T1CH .BLOCK 1 ;TIMER 1 COUNTER HIGH 0211 A806 T1LL .BLOCK 1 ;TIMER 1 LATCH LOW 0212 A807 T1LH .BLOCK 1 ;TIMER 1 LATCH HIGH 0213 A808 T2L .BLOCK 1 ;TIMER 2 LATCH & COUNTER LOW 0214 A809 T2H .BLOCK 1 ;TIMER 2 COUNTER HIGH 0215 A80A SR .BLOCK 1 ;SHIFT REGISTER 0216 A80B ACR .BLOCK 1 ;AUX CONTROL REGISTER 0217 A80C PCR .BLOCK 1 ;PERIPHERAL CONTROL REGISTER 0218 A80D IFR .BLOCK 1 ;INTERRUPT FLAG REGISTER 0219 A80E IER .BLOCK 1 ;INTERRUPT ENABLE REGISTER 0220 A80F DRA .BLOCK 1 ;DATA REGISTER A 0221 A810 0222 A810 ;DEFINE I/O CONTROL FOR PCR (CA1,CA2,CB1,CB2) 0223 A810 DATIN =$0E ;DATA IN CA2=1 0224 A810 DATOUT =$0C ;DATA OUT CA2=0 0225 A810 PRST =$00 ;PRINT START (CB1) ,NEG DETEC 0226 A810 SP12 =$01 ;STROBE P1,P2 (CA1) ,POS DETEC 0227 A810 MON =$C0 ;MOTOR ON (CB2=0) 0228 A810 MOFF =$E0 0229 A810 ;MSKS TO OBTAIN EACH INTERRUPT 0230 A810 MPRST =$10 ;INT FLG FOR CB1 0231 A810 MSP12 =$02 ;INT FLG FOR CA1 0232 A810 MT2 =$20 ;INT FLG FOR T2 0233 A810 0234 A810 ;DEFINE I/O CONTROL FOR ACR (TIMERS,SR) 0235 A810 PRTIME =1700 ; PRINTING TIME =1.7M MSEC 0236 A810 DEBTIM =5000 ; DEBOUNCE TIME (5 MSEC) 0237 A810 T2I =$00 ;T2 AS ONE SHOT (PRI,KB,TTY,TAPE) 0238 A810 T1I =$00 ;T1 AS ONE SHOT,PB7 DIS (TAPES) 0239 A810 T1FR =$C0 ;T1 IN FREE RUNNING (TAPE) 0240 A810 0241 A810 ; ****************************** 0242 A810 ; * DISPLAY (AC00-AFFF) * 0243 A810 ; ****************************** 0244 A810 ; REGISTERS FOR DISPLAY (6520) 0245 AC00 *=$AC00 0246 AC00 RA .BLOCK 1 ;REGISTER A 0247 AC01 CRA .BLOCK 1 ;CONTROL REG A 0248 AC02 RB .BLOCK 1 ;REG B 0249 AC03 CRB .BLOCK 1 ;CONTROL REG B 0250 AC04 0251 AC04 ;CHR 00-03 ENA BY $AC04-AC07 0252 AC04 ;CHR 04-07 ENA BY $AC08-AC0B 0253 AC04 ;CHR 08-11 ENA BY $AC10-AC13 0254 AC04 ;CHR 12-15 ENA BY $AC20-AC23 0255 AC04 ;CHR 16-19 ENA BY $AC40-AC43 0256 AC04 0257 AC04 NULLC =$FF 0258 AC04 CR =$0D 0259 AC04 LF =$0A 0260 AC04 ESCAPE =$1B 0261 AC04 RUB =$08 0262 AC04 EQS =$BD 0263 AC04 ;.FILE A1 0264 AC04 0265 AC04 ; E=ENTER EDITOR 0266 AC04 ; T=RE-ENTER EDITOR TO RE-EDIT SOURCE 0267 AC04 ; R=SHOW REGISTERS 0268 AC04 ; M=DISPLAY MEMORY 0269 AC04 ; =SHOW NEXT 4 ADDRESSES 0270 AC04 ; G=GO AT CURRENT P.C. (COUNT) 0271 AC04 ; /=ALTER CURRENT MEMORY 0272 AC04 ; L=LOAD OBJECT 0273 AC04 ; D=DUMP OBJECT 0274 AC04 ; N=ASSEMBLE 0275 AC04 ; *=ALTER P.C. 0276 AC04 ; A=ALTER ACCUMULATOR 0277 AC04 ; X=ALTER X REGISTER 0278 AC04 ; Y=ALTER Y REGISTER 0279 AC04 ; P=ALTER PROCESSOR STATUS 0280 AC04 ; S=ALTER STACK POINTER 0281 AC04 ; B=SET BREAK ADDR 0282 AC04 ; ?=SHOW BREAK ADDRESSES 0283 AC04 ; #=CLEAR BREAK ADDRESSES 0284 AC04 ; H=SHOW TRACE HISTORY STACK 0285 AC04 ; V=TOGGLE REGISTER PRINT WITH DIS. 0286 AC04 ; Z=TOGGLE DISASSEMBLER TRACE 0287 AC04 ; \=TURN ON/OFF PRINTER 0288 AC04 ; =ADV PAPER 0289 AC04 ; I=MNEMONIC ENTRY 0290 AC04 ; K=DISASSEMBLE MEMORY 0291 AC04 ; 1=TOGGLE TAPE 1 CONTRL (ON OR OFF) 0292 AC04 ; 2=TOGGLE TAPE 2 CONTRL 0293 AC04 ; 3=VERIFY CKSUM FOR TAPES 0294 AC04 ; 4=ENABLE BREAKS 0295 AC04 ; 5=BASIC ENTRY (COLD) 0296 AC04 ; 6=BASIC REENTRY (WARM) 0297 AC04 0298 AC04 ;FOLLOWING KEYS ARE UNUSED BUT 'HOOKS' 0299 AC04 ;ARE PROVIDED IN LOCATIONS 010C-0114 0300 AC04 ; 0301 AC04 ; KEYF1,KEYF2,KEYF3 0302 AC04 0303 E000 *=$E000 0304 E000 ;ALL MSGS HAVE MSB=1 OF LAST CHAR TO END IT 0305 E000 46524F4DBD M1 .DB "FROM",EQS 0306 E005 54 4F BD M3 .DB "TO",EQS 0307 E008 202A2A2A2A20M4 .DB " **** PS AA XX YY S",$D3 0307 E00E 50532041412058582059592053D3 0308 E01C 4D4F5245BF M5 .DB "MORE",$BF 0309 E021 4F 4E A0 M6 .DB "ON",$A0 ;"ON " 0310 E024 4F 46 C6 M7 .DB "OF",$C6 ;"OFF" 0311 E027 42 52 CB M8 .DB "BR",$CB ;"BRK" 0312 E02A 49 4E BD M9 .DB "IN",EQS 0313 E02D 4F 55 54 BD M10 .DB "OUT",EQS 0314 E031 204D454D2046M11 .DB " MEM FAIL",$A0 0314 E037 41494CA0 0315 E03B 205052494E54M12 .DB " PRINTER DOW",$CE 0315 E041 455220444F57CE 0316 E048 2053524348 TMSG0 .DB " SRCH" 0317 E04D 20 46 BD TMSG1 .DB " F",EQS 0318 E050 54 BD TMSG2 .DB "T",EQS 0319 E052 A0 C5 D2 D2 TMSG3 .DB $A0,$C5,$D2,$D2 ;PRINT " ERROR" ,MSB=1 0320 E056 CFD2A0A0A0A0 .DB $CF,$D2,$A0,$A0,$A0,$A0,$A0,$A0,";" 0320 E05C A0A03B 0321 E05F 41 BD TMSG5 .DB "A",EQS 0322 E061 424C4B3DA0 TMSG6 .DB "BLK=",$A0 0323 E066 A0CCCFC1C43BTMSG7 .DB $A0,$CC,$CF,$C1,$C4,";" 0324 E06C 454449544FD2EMSG1 .DB "EDITO",$D2 ;EDITOR MESSAGES 0325 E072 45 4E C4 EMSG2 .DB "EN",$C4 0326 E075 0327 E075 ;VECTORS COME HERE FIRST AFTER JUMP THRU FFFA-FFFF 0328 E075 6C 02 A4 NMIV1 JMP (NMIV2) ;NMIV2 IS A VECTOR TO NMIV3 0329 E078 6C 04 A4 IRQV1 JMP (IRQV2) ;IRQV2 IS A VECTOR TO IRQV3 0330 E07B 0331 E07B ;SINGLE STEP ENTRY POINT (NMI) 0332 E07B 8D 21 A4 NMIV3 STA SAVA ;SAVE ACCUM 0333 E07E 68 PLA 0334 E07F 8D 20 A4 STA SAVPS ;SAVE PROCESSOR STATUS 0335 E082 D8 CLD 0336 E083 8E 22 A4 STX SAVX ;SAVE X 0337 E086 8C 23 A4 STY SAVY 0338 E089 68 PLA 0339 E08A 8D 25 A4 STA SAVPC ;PROGRAM COUNTER 0340 E08D 68 PLA 0341 E08E 8D 26 A4 STA SAVPC+1 0342 E091 BA TSX ;GET STACK PTR & SAVE IT 0343 E092 8E 24 A4 STX SAVS 0344 E095 ;TRACE THE ADDRESS 0345 E095 AC 14 A4 LDY HISTP ;GET POINTER TO HISTORY STACK 0346 E098 AD 26 A4 LDA SAVPC+1 ;SAVE HALT ADDR IN HISTORY STACK 0347 E09B 99 2E A4 STA HIST,Y 0348 E09E AD 25 A4 LDA SAVPC 0349 E0A1 99 2F A4 STA HIST+1,Y 0350 E0A4 20 88 E6 JSR NHIS ;UPDATE POINTER 0351 E0A7 AD 10 A4 LDA BKFLG ;SOFT BREAKS ON? 0352 E0AA F0 08 BEQ NMI5 ;NO ,DONT CHCK BRKPOINT LIST 0353 E0AC 20 6B E7 JSR CKB ;CHECK BREAKPOINT LIST 0354 E0AF 90 03 BCC NMI5 ;DID NOT HIT BREAKPOINT 0355 E0B1 4C 7F E1 NMI4 JMP IRQ2 ;HIT A BREAK-TRAP TO MONITOR 0356 E0B4 20 90 E7 NMI5 JSR DONE ;COUNT =0 ? 0357 E0B7 F0 F8 BEQ NMI4 ;YES,TRAP TO MONITOR 0358 E0B9 20 07 E9 JSR RCHEK ;CHK IF HE WANTS TO INTERR 0359 E0BC 4C 6D E2 JMP GOBK ;NOT DONE-RESUME EXECUTION 0360 E0BF 0361 E0BF ;POWER UP AND RESET ENTRY POINT (RST TRANSFERS HERE) 0362 E0BF D8 RSET CLD ;CLEAR DEC MODE 0363 E0C0 78 SEI ;DISABLE INTERRUPT 0364 E0C1 A2 FF LDX #$FF ;INIT STACK PTR 0365 E0C3 9A TXS 0366 E0C4 8E 24 A4 STX SAVS ;ALSO INIT SAVED STACK PTR 0367 E0C7 ;INITIALIZE 6522 0368 E0C7 A2 0E LDX #14 0369 E0C9 BD 43 E7 RS1 LDA INTAB1,X ;PB1-PB0,PA7-PA0 FOR PRNTR 0370 E0CC 9D 00 A8 STA DRB,X ;PB2=TTO,PB6=TTI 0371 E0CF CA DEX ;PB4-PB5=TAPE CONTROL,PB7=DATA 0372 E0D0 10 F7 BPL RS1 ;PB3 =SWITCH KB/TTY 0373 E0D2 ;INITIALIZE 6532 0374 E0D2 A2 03 LDX #3 ;PORTS USED FOR KB 0375 E0D4 BD 52 E7 RS2 LDA INTAB2,X ;PA0-PA7 AS OUTPUT 0376 E0D7 9D 80 A4 STA DRA2,X ;PB0-PB7 AS INPUT 0377 E0DA CA DEX 0378 E0DB 10 F7 BPL RS2 0379 E0DD ;INITIALIZE MONITOR RAM (6532) 0380 E0DD AD 56 E7 LDA INTAB3 ;CHECK IF NMIV2 HAS BEEN CHANGED 0381 E0E0 CD 02 A4 CMP NMIV2 ;IF IT HAS THEN ASSUME A COLD 0382 E0E3 D0 0C BNE RS3A ;START AND INITIALIZE EVERYTHING 0383 E0E5 AD 57 E7 LDA INTAB3+1 0384 E0E8 CD 03 A4 CMP NMIV2+1 0385 E0EB D0 04 BNE RS3A 0386 E0ED A2 10 LDX #16 ;THEY ARE EQUAL ,IT'S A WARM RESET 0387 E0EF D0 02 BNE RS3 0388 E0F1 A2 00 RS3A LDX #0 ;INIT EVERYTHING (POWER UP) 0389 E0F3 BD 56 E7 RS3 LDA INTAB3,X 0390 E0F6 9D 02 A4 STA NMIV2,X 0391 E0F9 E8 INX 0392 E0FA E0 15 CPX #21 0393 E0FC 90 F5 BCC RS3 0394 E0FE ;INITIALIZE DISPLAY (6520) 0395 E0FE A9 00 LDA #0 ;SET CONTR REG FOR DATA DIR REG 0396 E100 A2 01 LDX #1 0397 E102 20 13 E1 JSR SETREG 0398 E105 A9 FF LDA #$FF ;SET DATA DIR REG FOR OUTPUT 0399 E107 CA DEX 0400 E108 20 13 E1 JSR SETREG 0401 E10B A9 04 LDA #$04 ;SET CONTR REG FOR PORTS 0402 E10D E8 INX 0403 E10E 20 13 E1 JSR SETREG 0404 E111 D0 07 BNE RS3B 0405 E113 9D 00 AC SETREG STA RA,X 0406 E116 9D 02 AC STA RB,X 0407 E119 60 RTS 0408 E11A 58 RS3B CLI ;CLEAR INTERRUPT 0409 E11B 0410 E11B ;KB/TTY SWITCH TEST AND BIT RATE MEASUREMENT 0411 E11B A9 08 LDA #$08 ;PB3=SWITCH KB/TTY 0412 E11D 2C 00 A8 RS4 BIT DRB ;A^M ,PB6-> V (OVERFLOW FLG) 0413 E120 D0 22 BNE RS7 ;BRANCH ON KB 0414 E122 70 F9 BVS RS4 ;START BIT=PB6=0? 0415 E124 A9 FF LDA #$FF ;YES ,INITIALIZE TIMER T2 0416 E126 8D 09 A8 STA T2H 0417 E129 2C 00 A8 RS5 BIT DRB ;END OF START BIT ? 0418 E12C 50 FB BVC RS5 ;NO ,WAIT UNTIL PB6 BACK TO 1 0419 E12E AD 09 A8 LDA T2H ;STORE TIMING 0420 E131 49 FF EOR #$FF ;COMPLEMENT 0421 E133 8D 17 A4 STA CNTH30 0422 E136 AD 08 A8 LDA T2L 0423 E139 49 FF EOR #$FF 0424 E13B 20 7C FE JSR PATCH1 ;ADJUST IT 0425 E13E 20 13 EA RS6 JSR CRLOW ;CLEAR DISPLAY 0426 E141 4C 72 FF JMP PAT21 0427 E144 A2 13 RS7 LDX #19 ;CLEAR HARDWARE CURSORS 0428 E146 8A RS8 TXA 0429 E147 48 PHA 0430 E148 A9 00 LDA #0 0431 E14A 20 7B EF JSR OUTDD1 0432 E14D 68 PLA 0433 E14E AA TAX 0434 E14F CA DEX 0435 E150 10 F4 BPL RS8 0436 E152 30 EA BMI RS6 0437 E154 0438 E154 ;BRK INSTR (00) OR IRQ ENTRY POINT 0439 E154 8D 21 A4 IRQV3 STA SAVA 0440 E157 68 PLA 0441 E158 48 PHA ;GET STATUS 0442 E159 29 10 AND #$10 ;SEE IF 'BRK' , ISOLATE B FLG 0443 E15B D0 06 BNE IRQ1 ;TRAP WAS CAUSED BY "BRK" INSTRUC 0444 E15D AD 21 A4 LDA SAVA ;TRAP CAUSED BY IRQ SO TRANSFER 0445 E160 6C 00 A4 JMP (MONRAM) ;CONTROL TO USER THRU VECTOR 0446 E163 ;IS 'BRK' INSTR ,SHOW PC & DATA 0447 E163 ;PC IS OFF BY ONE , SO ADJUST IT 0448 E163 68 IRQ1 PLA 0449 E164 8D 20 A4 STA SAVPS ;SAVE PROCESSOR STATUS 0450 E167 8E 22 A4 STX SAVX 0451 E16A 8C 23 A4 STY SAVY 0452 E16D D8 CLD 0453 E16E 68 PLA ;PROGR CNTR 0454 E16F 38 SEC ;SUBTRACT ONE FROM RETURN ADDR 0455 E170 E9 01 SBC #1 0456 E172 8D 25 A4 STA SAVPC 0457 E175 68 PLA 0458 E176 E9 00 SBC #0 0459 E178 8D 26 A4 STA SAVPC+1 0460 E17B BA TSX ;GET STACK PTR & SAVE IT 0461 E17C 8E 24 A4 STX SAVS 0462 E17F ;SHOW PC AND DATA 0463 E17F 20 61 F4 IRQ2 JSR REGQ ;SHOW NEXT INSTRUCTION & CONTINUE 0464 E182 0465 E182 ;THIS ROUTINE WILL GET A CHR WITH "( )" FROM 0466 E182 ;KB/TTY & THEN WILL GO TO THE RESPECTIVE COMMAND 0467 E182 4C 59 FF START JMP PAT19 ;CLEAR DEC MODE & 0468 E185 A9 BC STA1 LDA #'<'+$80 ;"<" CHR WITH MSB=1 FOR DISP 0469 E187 20 7A E9 JSR OUTPUT 0470 E18A 20 96 FE JSR RED1 ;GET CHR & ECHO FROM KB/TTY 0471 E18D 48 PHA 0472 E18E A9 3E LDA #'>' 0473 E190 20 7A E9 JSR OUTPUT 0474 E193 68 PLA ;SCAN LIST OF CMDS FOR ENTERED CHR 0475 E194 A2 20 LDX #MCNT ;COUNT OF COMMANDS 0476 E196 DD C4 E1 MCM2 CMP COMB,X ;CHECK NEXT COMMAND IN LIST 0477 E199 F0 11 BEQ MCM3 ;MATCH , SO PROCESS THIS COMMAND 0478 E19B CA DEX 0479 E19C 10 F8 BPL MCM2 0480 E19E ;IS BAD COMMAND 0481 E19E 20 D4 E7 JSR QM 0482 E1A1 D8 COMIN CLD 0483 E1A2 20 FE E8 JSR LL 0484 E1A5 AE 24 A4 LDX SAVS 0485 E1A8 9A TXS 0486 E1A9 4C 82 E1 JMP START 0487 E1AC ;HAVE VALID COMMAND 0488 E1AC 8A MCM3 TXA ;CONVERT TO WORD (MULT BY 2) 0489 E1AD 0A ASL A ;2 BYTES (ADDR) 0490 E1AE AA TAX 0491 E1AF BD E5 E1 LDA MONCOM,X ;GET ADDRESS OF COMMAND PROCESSOR 0492 E1B2 8D 7D A4 STA JUMP 0493 E1B5 BD E6 E1 LDA MONCOM+1,X 0494 E1B8 8D 7E A4 STA JUMP+1 0495 E1BB 20 C1 E1 JSR JMPR ;CMD PROCESSORS CAN EXIT WITH 'RTS' 0496 E1BE 4C 82 E1 JMP START 0497 E1C1 6C 7D A4 JMPR JMP (JUMP) ;GO TO COMMAND 0498 E1C4 0499 E1C4 ;VALID COMMANDS 0500 E1C4 MCNT =32 ;COUNT 0501 E1C4 4554524D472FCOMB .DB "ETRMG/LDN*AXYPS " 0501 E1CA 4C444E2A415859505320 0502 E1D4 423F2348565A .DB "B?#HVZIK123456[]",$5E 0502 E1DA 494B3132333435365B5D5E 0503 E1E5 0504 E1E5 39F6CFF627E2MONCOM .DW EDIT,REENTR,REG,MEM,GO 0504 E1EB 48E261E2 0505 E1EF A0E2E6E23BE4 .DW CHNGG,LOAD,DUMP,ASSEM,CGPC,CGA 0505 E1F5 00D0D4E5EEE5 0506 E1FB F2E5F6E5EAE5 .DW CGX,CGY,CGPS,CGS,NXT5,BRKA 0506 E201 FAE50DE61BE6 0507 E207 4DE6FEE665E6 .DW SHOW,CLRBK,SHIS,REGT,TRACE 0507 E20D D9E6DDE6 0508 E211 9EFB0AE7BDE6 .DW MNEENT,KDISA,TOGTA1,TOGTA2,VECKSM 0508 E217 CBE694E6 0509 E21B E5E600B003B0 .DW BRKK,BASIEN,BASIRE 0510 E221 ;USER DEFINED FUNCTIONS 0511 E221 0C010F011201 .DW KEYF1,KEYF2,KEYF3 0512 E227 0513 E227 ;***** R COMMAND-DISPLAY REGISTERS ***** 0514 E227 20 13 EA REG JSR CRLOW ;CLEAR DISP IF KB 0515 E22A A0 08 LDY #M4-M1 ;MESSAG & 0516 E22C 20 AF E7 JSR KEP 0517 E22F 20 24 EA JSR CRCK 0518 E232 20 3E E8 REG1 JSR BLANK 0519 E235 A0 09 LDY #SAVPC-ADDR ;OUTPUT PGR CNTR (SAVEPC+1,SAVEPC) 0520 E237 20 DD E2 JSR WRITAD 0521 E23A A9 20 LDA #SAVPS ;NOW THE OTHER 5 REGS 0522 E23C 8D 1C A4 STA ADDR 0523 E23F A9 A4 LDA #SAVPS/256 0524 E241 8D 1D A4 STA ADDR+1 0525 E244 A2 05 LDX #5 ;COUNT 0526 E246 D0 07 BNE MEM1 ;SHARE CODE 0527 E248 0528 E248 ;***** M COMMAND-DISPLAY MEMORY ***** 0529 E248 20 AE EA MEM JSR ADDIN ;GET START ADDDRESS IN ADDR 0530 E24B B0 13 BCS MEM3 0531 E24D A2 04 MEIN LDX #4 0532 E24F A0 00 MEM1 LDY #0 0533 E251 20 3E E8 MEM2 JSR BLANK 0534 E254 A9 1C LDA #ADDR 0535 E256 20 58 EB JSR LDAY ;LOAD CONTENTS OF CURR LOCATION 0536 E259 20 46 EA JSR NUMA ;AND DISPLAY IT AS 2 HEX DIGITS 0537 E25C C8 INY 0538 E25D CA DEX ;DECR COUNTER 0539 E25E D0 F1 BNE MEM2 0540 E260 60 MEM3 RTS ;GET NEXT COMMAND 0541 E261 0542 E261 ;***** G COMMAND-RESTART PROCESSOR ***** 0543 E261 20 37 E8 GO JSR PSL1 ;"/" 0544 E264 20 85 E7 JSR GCNT ;GET COUNT 0545 E267 20 F0 E9 JSR CRLF 0546 E26A 4C 86 E2 JMP GOBK1 ;RESUME EXECUTION 0547 E26D AD 0E A4 GOBK LDA REGF ;DISPLAY REGISTERS ? 0548 E270 F0 06 BEQ GOBK0 ;NO,BRANCH 0549 E272 20 32 E2 JSR REG1 ;SHOW THE SIX REG 0550 E275 20 24 EA JSR CRCK ; 0551 E278 20 07 E9 GOBK0 JSR RCHEK ;SEE IF HE WANTS TO INTERRUPT 0552 E27B AD 0F A4 LDA DISFLG ;DISASSEMBLE CURRENT INSTR ? 0553 E27E F0 06 BEQ GOBK1 ;NO,BRANCH 0554 E280 20 6C F4 JSR DISASM ;DISASM THIS INSTRUCTION 0555 E283 20 13 EA JSR CRLOW 0556 E286 AE 24 A4 GOBK1 LDX SAVS ;RESTORE SAVED REGS FOR RTI 0557 E289 9A TXS 0558 E28A AC 23 A4 LDY SAVY 0559 E28D AE 22 A4 LDX SAVX 0560 E290 AD 26 A4 LDA SAVPC+1 0561 E293 48 PHA ;PUT PC ON STACK 0562 E294 AD 25 A4 LDA SAVPC 0563 E297 48 PHA 0564 E298 AD 20 A4 LDA SAVPS ;STATUS ALSO 0565 E29B 48 PHA 0566 E29C AD 21 A4 LDA SAVA 0567 E29F 40 RTI ;AND AWAY WE GO... 0568 E2A0 0569 E2A0 ;***** / COMMAND-ALTER MEMORY ***** 0570 E2A0 20 3E E8 CHNGG JSR BLANK 0571 E2A3 20 DB E2 JSR WRITAZ ;WRITE ADDR 0572 E2A6 20 3E E8 CHNG1 JSR BLANK 0573 E2A9 20 5D EA JSR RD2 ;GET VALUE 0574 E2AC 90 0A BCC CH2 ;ISN'T SKIP OR DONE 0575 E2AE C9 20 CMP #' ' 0576 E2B0 D0 13 BNE CH3 ;NOT BLANK SO MUST BE DONE 0577 E2B2 ;SKIP THIS LOCATION 0578 E2B2 20 3E E8 JSR BLANK 0579 E2B5 4C C0 E2 JMP CH4 0580 E2B8 ;IS ALTER 0581 E2B8 20 78 EB CH2 JSR SADDR ;STORE ENTERED VALUE INTO MEMORY 0582 E2BB F0 03 BEQ CH4 ;NO ERROR IN STORE 0583 E2BD 4C 33 EB JMP MEMERR ;MEMORY WRITE ERROR 0584 E2C0 C8 CH4 INY 0585 E2C1 C0 04 CPY #4 0586 E2C3 D0 E1 BNE CHNG1 ;GO AGAIN 0587 E2C5 ;HAVE DONE LINE OR HAVE 0588 E2C5 20 CD E2 CH3 JSR NXTADD ;UPDATE THE ADDRESS 0589 E2C8 A9 0D LDA #CR ;CLEAR DISPL 0590 E2CA 4C E9 FE JMP PATC10 ;ONLY ONE & BACK TO MONITOR 0591 E2CD 0592 E2CD 98 NXTADD TYA ;ADD Y TO ADDR+1,ADDR 0593 E2CE 18 CLC 0594 E2CF 6D 1C A4 ADC ADDR 0595 E2D2 8D 1C A4 STA ADDR 0596 E2D5 90 03 BCC NXTA1 0597 E2D7 EE 1D A4 INC ADDR+1 0598 E2DA 60 NXTA1 RTS 0599 E2DB 0600 E2DB ;WRITE CURRENT VALUE OF ADDR 0601 E2DB ;PART OF / & SPACE COMM 0602 E2DB A0 00 WRITAZ LDY #0 0603 E2DD B9 1D A4 WRITAD LDA ADDR+1,Y 0604 E2E0 BE 1C A4 LDX ADDR,Y 0605 E2E3 4C 42 EA JMP WRAX 0606 E2E6 0607 E2E6 ;***** L COMMAND-GENERAL LOAD ***** 0608 E2E6 ;LOAD OBJECT FROM TTY,USER,TYPE OR TAPE IN KIM-1 FORMAT 0609 E2E6 20 48 E8 LOAD JSR WHEREI ;WHERE INPUT 0610 E2E9 ;GET ";" , # OF BYTES AND SA 0611 E2E9 20 93 E9 LOAD1 JSR INALL ;GET FIRST CHAR 0612 E2EC C9 3B CMP #SEMICOLON ;LOOK FOR BEGINNING 0613 E2EE D0 F9 BNE LOAD1 ;IGNORE ALL CHARS BEFORE ";" 0614 E2F0 20 4D EB JSR CLRCK ;CLEAR CHECHSUM 0615 E2F3 20 4B E5 JSR CHEKAR ;READ RECORD LENGTH 0616 E2F6 AA TAX ;SAVE IN X THE # BYTES 0617 E2F7 20 4B E5 JSR CHEKAR ;READ UPPER HALF OF ADDRESS 0618 E2FA 8D 1D A4 STA ADDR+1 0619 E2FD 20 4B E5 JSR CHEKAR ;READ LOWER HALF OF ADDRESS 0620 E300 8D 1C A4 STA ADDR 0621 E303 8A TXA 0622 E304 F0 1B BEQ LOAD4 ;LAST RECORD (RECORD LENGTH=0) 0623 E306 ;GET DATA 0624 E306 20 FD E3 LOAD2 JSR RBYTE ;READ NEXT BYTE OF DATA 0625 E309 20 13 E4 JSR STBYTE ;STORE AT LOC (ADDR+1,ADDR) 0626 E30C CA DEX ;DECR RECORD LENGTH 0627 E30D D0 F7 BNE LOAD2 0628 E30F ;COMPARE CKSUM 0629 E30F 20 FD E3 JSR RBYTE ;READ UPPER HALF OF CHCKSUM 0630 E312 CD 1F A4 CMP CKSUM+1 ;COMPARE TO COMPUTED VALUE 0631 E315 D0 6E BNE CKERR ;CKSUM ERROR 0632 E317 20 FD E3 JSR RBYTE ;READ LOWER HALF OF CHECKSUM 0633 E31A CD 1E A4 CMP CKSUM 0634 E31D D0 66 BNE CKERR 0635 E31F F0 C8 BEQ LOAD1 ;UNTIL LAST RECORD 0636 E321 A2 05 LOAD4 LDX #5 ;READ 4 MORE ZEROS 0637 E323 20 FD E3 LOAD5 JSR RBYTE 0638 E326 CA DEX 0639 E327 D0 FA BNE LOAD5 0640 E329 20 93 E9 JSR INALL ;READ LAST 0641 E32C 4C 20 E5 JMP DU13 ;SET DEFAULT DEV & GO BACK 0642 E32F 0643 E32F ;LOAD ROUTINE FROM TAPE BY BLOCKS 0644 E32F ;CHECK FOR RIGHT FILE & LOAD FIRST BLOCK 0645 E32F A9 00 LOADTA LDA #$00 ;CLEAR BLOCK COUNT 0646 E331 8D 15 01 STA BLK 0647 E334 20 53 ED JSR TIBY1 ;LOAD BUFFER WITH A BLOCK 0648 E337 CA DEX ;SET X=0 0649 E338 8E 15 A4 STX CURPO2 ;CLEAR DISPLAY PTR 0650 E33B BD 16 01 LDA TABUFF,X ;BLK COUNT SHOULD BE ZERO 0651 E33E D0 EF BNE LOADTA ;NO, READ ANOTHER BLOCK 0652 E340 E8 INX 0653 E341 ;AFTER FIRST BLOCK OUTPUT FILE NAME 0654 E341 EE 11 A4 INC PRIFLG ;SO DO NOT GO TO PRINT. 0655 E344 A0 48 LDY #TMSG0-M1 ;PRINT "F=" 0656 E346 20 AF E7 JSR KEP 0657 E349 BD 16 01 LOAD1A LDA TABUFF,X ;OUTPUT FILE NAME 0658 E34C 20 7A E9 JSR OUTPUT ;ONLY TO DISPLAY 0659 E34F E8 INX 0660 E350 E0 06 CPX #6 0661 E352 D0 F5 BNE LOAD1A 0662 E354 20 3E E8 JSR BLANK 0663 E357 A0 61 LDY #TMSG6-M1 ;PRINT "BLK= " 0664 E359 20 AF E7 JSR KEP 0665 E35C CE 11 A4 DEC PRIFLG ;RESTORE PRINTR FLG 0666 E35F 20 BD ED JSR ADDBK1 ;JUST OUTPUT BLK CNT 0667 E362 A2 01 LDX #1 ;RESTORE X 0668 E364 ;CHECK IF FILE IS CORRECT 0669 E364 BD 16 01 LOADT2 LDA TABUFF,X ;NOW CHCK FILE NAME 0670 E367 DD 2D A4 CMP NAME-1,X 0671 E36A D0 C3 BNE LOADTA ;IF NO FILENAME GET 0672 E36C E8 INX ;ANOTHER BLOCK 0673 E36D E0 06 CPX #6 ;FILENAME=5 CHRS 0674 E36F D0 F3 BNE LOADT2 0675 E371 8E 36 A4 STX TAPTR ;SAVE TAPE BUFF PTR 0676 E374 EE 11 A4 INC PRIFLG ;OUTPUT MSG ONLY TO DISPLAY 0677 E377 A9 00 LDA #0 ;CLEAR DISPLAY POINTER 0678 E379 8D 15 A4 STA CURPO2 0679 E37C A0 66 LDY #TMSG7-M1 ;PRINT "LOAD " WITHOUT CLR DISPL 0680 E37E 20 96 E3 JSR CKER1 0681 E381 CE 11 A4 DEC PRIFLG 0682 E384 60 RTS 0683 E385 0684 E385 ;LINE CKSUM ERROR 0685 E385 20 8E E3 CKERR JSR CKER0 ;SUBR SO MNEM ENTRY CAN USE IT 0686 E388 20 DB E2 JSR WRITAZ ;WRITE ADDR 0687 E38B 4C A1 E1 JMP COMIN 0688 E38E 20 FE E8 CKER0 JSR LL ;SET DEFAULT DEVICES 0689 E391 20 24 EA JSR CRCK ; 0690 E394 A0 52 CKER00 LDY #TMSG3-M1 ;PRINT "ERROR" 0691 E396 B9 00 E0 CKER1 LDA M1,Y ;DONT CLR DISPLAY TO THE RIGHT 0692 E399 C9 3B CMP #SEMICOLON 0693 E39B F0 06 BEQ CKER2 0694 E39D 20 7A E9 JSR OUTPUT ;ONLY TO TERMINAL 0695 E3A0 C8 INY 0696 E3A1 D0 F3 BNE CKER1 0697 E3A3 60 CKER2 RTS 0698 E3A4 0699 E3A4 ;LOAD ROUTINE FROM TAPE WITH KIM-1 FORMAT 0700 E3A4 20 4D EB LOADKI JSR CLRCK ;CLEAR CKSUM 0701 E3A7 20 EA ED LOADK1 JSR TAISET ;SET TAPE FOR INPUT 0702 E3AA 20 29 EE LOADK2 JSR GETTAP ;READ CHARACTER FROM TAPE 0703 E3AD C9 2A CMP #'*' ;BEGINNING OF FILE? 0704 E3AF F0 06 BEQ LOADK3 ;YES,BRNCH 0705 E3B1 C9 16 CMP #$16 ;IF NOT * SHOULD BE SYN 0706 E3B3 D0 F2 BNE LOADK1 0707 E3B5 F0 F3 BEQ LOADK2 0708 E3B7 20 FD E3 LOADK3 JSR RBYTE ;READ ID FROM TAPE 0709 E3BA 8D 21 A4 STA SAVA ;SAVE ID 0710 E3BD ;NOW GET ADDR TO DISPLAY 0711 E3BD ;& COMPARE ID AFTERWARDS 0712 E3BD 20 4B E5 JSR CHEKAR ;GET START ADDR LOW 0713 E3C0 8D 1C A4 STA ADDR 0714 E3C3 20 4B E5 JSR CHEKAR ;GET START ADDR HIGH 0715 E3C6 8D 1D A4 STA ADDR+1 0716 E3C9 20 25 E4 JSR GETID ;ID FROM HIM 0717 E3CC CD 21 A4 CMP SAVA ;DO IDS MATCH? 0718 E3CF D0 D3 BNE LOADKI ;NO ,GET ANOTHER FILE 0719 E3D1 A2 02 LOADK5 LDX #$02 ;GET 2 CHARS 0720 E3D3 20 29 EE LOADK6 JSR GETTAP ;1 CHAR FROM TAPE 0721 E3D6 C9 2F CMP #'/' ;LAST CHAR ? 0722 E3D8 F0 0E BEQ LOADK7 ;YES,BRNCH 0723 E3DA 20 84 EA JSR PACK ;CONVERT TO HEX 0724 E3DD B0 A6 BCS CKERR ;NOT HEX CHAR SO ERROR 0725 E3DF CA DEX 0726 E3E0 D0 F1 BNE LOADK6 0727 E3E2 20 13 E4 JSR STBYTE ;STORE & CHCK MEM FAIL 0728 E3E5 4C D1 E3 JMP LOADK5 ;NEXT 0729 E3E8 20 FD E3 LOADK7 JSR RBYTE ;END OF DATA CMP CKSUM 0730 E3EB CD 1E A4 CMP CKSUM ;LOW 0731 E3EE D0 95 BNE CKERR 0732 E3F0 20 FD E3 JSR RBYTE 0733 E3F3 CD 1F A4 CMP CKSUM+1 ;HIGH 0734 E3F6 D0 8D BNE CKERR 0735 E3F8 68 PLA ;CORRECT RTN INSTEAD OF WHEREI 0736 E3F9 68 PLA 0737 E3FA 4C 20 E5 JMP DU13 ;TELL HIM & GO BACK TO COMMAN 0738 E3FD 0739 E3FD ;GET 2 ASCII CHRS INTO 1 BYTE 0740 E3FD ;FOR TAPE (T) GET ONLY ONE HEX CHR 0741 E3FD AD 12 A4 RBYTE LDA INFLG ;INPUT DEVICE 0742 E400 C9 54 CMP #'T' 0743 E402 D0 03 BNE RBYT1 0744 E404 4C 93 E9 JMP INALL ;ONLY ONE BYTE FOR T (INPUT DEV) 0745 E407 20 93 E9 RBYT1 JSR INALL 0746 E40A 20 84 EA JSR PACK 0747 E40D 20 93 E9 JSR INALL 0748 E410 4C 84 EA JMP PACK 0749 E413 0750 E413 ;STORE AND CHECK MEMORY FAIL 0751 E413 20 4E E5 STBYTE JSR CHEKA ;ADD TO CKSUM 0752 E416 A0 00 LDY #0 0753 E418 20 78 EB JSR SADDR ;STORE AND CHCK 0754 E41B F0 03 BEQ *+5 0755 E41D 4C 33 EB JMP MEMERR ;MEMORY WRITE ERROR 0756 E420 A0 01 LDY #1 ;INC ADDR+1,ADDR BY 1 0757 E422 4C CD E2 JMP NXTADD 0758 E425 0759 E425 ;GET ID FROM LAST 2 CHR OF FILENAM 0760 E425 A2 04 GETID LDX #4 ;SEE WHAT HE GAVE US 0761 E427 BD 2E A4 GID1 LDA NAME,X ;GET LAST 2 CHARS 0762 E42A CA DEX 0763 E42B C9 20 CMP #' ' ; ? 0764 E42D F0 F8 BEQ GID1 0765 E42F BD 2E A4 LDA NAME,X ;CONVERT TO BINARY 0766 E432 20 84 EA JSR PACK 0767 E435 BD 2F A4 LDA NAME+1,X 0768 E438 4C 84 EA JMP PACK ;ID IS IN STIY 0769 E43B 0770 E43B ;***** D COMMAND-GENERAL DUMP ***** 0771 E43B ;TO TTY,PRINTR,USER,X ,TAPE,TAKIM-1 0772 E43B AD 10 A4 DUMP LDA BKFLG ;SAVE IT TO USE IT 0773 E43E 48 PHA 0774 E43F A9 00 LDA #00 0775 E441 8D 10 A4 STA BKFLG 0776 E444 20 24 EA DU1 JSR CRCK ; 0777 E447 20 A3 E7 DU0 JSR FROM ;GET START ADDR 0778 E44A B0 FB BCS DU0 ;IN CASE OF ERROR DO IT AGAIN 0779 E44C 20 3E E8 JSR BLANK 0780 E44F 20 10 F9 JSR ADDRS1 ;TRANSFER ADDR TO S1 0781 E452 20 A7 E7 DU1B JSR TO ;GET END ADDR 0782 E455 B0 FB BCS DU1B 0783 E457 20 13 EA JSR CRLOW 0784 E45A AD 10 A4 LDA BKFLG ;EXECUTE WHEREO ONLY ONCE 0785 E45D D0 0E BNE DU1A 0786 E45F 20 71 E8 JSR WHEREO ;WHICH DEV (OUTFLG) 0787 E462 A9 00 LDA #0 0788 E464 8D 06 01 STA S2 ;CLEAR RECORD COUNT 0789 E467 8D 07 01 STA S2+1 0790 E46A EE 10 A4 INC BKFLG ;SET FLG 0791 E46D ;CHCK OUTPUT DEV 0792 E46D AD 13 A4 DU1A LDA OUTFLG 0793 E470 C9 4B CMP #'K' ;TAPE FOR KIM? 0794 E472 D0 04 BNE *+6 0795 E474 68 PLA ;PULL FLG 0796 E475 4C 87 E5 JMP DUMPKI ;YES, GO OUTPUT WHOLE FILE 0797 E478 A0 01 LDY #1 ;OUTPUT ONE MORE BYTE 0798 E47A 20 CD E2 JSR NXTADD 0799 E47D 20 F0 E9 DU2 JSR CRLF 0800 E480 20 07 E9 JSR RCHEK ;SEE IF HE WANTS TO INTERRUPT 0801 E483 ;CALCULATE # OF BYTES YET TO BE DUMPED 0802 E483 20 4D EB JSR CLRCK ;CLEAR CKSUM 0803 E486 AD 1C A4 LDA ADDR ;END ADDRESS-CURRENT ADDRESS 0804 E489 38 SEC 0805 E48A ED 1A A4 SBC S1 0806 E48D 48 PHA ;# OF BYTES LOW 0807 E48E AD 1D A4 LDA ADDR+1 0808 E491 ED 1B A4 SBC S1+1 0809 E494 D0 09 BNE DU6 ;# OF BYTES HIGH 0810 E496 ;SEE IF 24 OR MORE BYTES TO GO 0811 E496 68 PLA ;# BYTES HIGH WAS ZERO 0812 E497 F0 42 BEQ DU10 ;ARE DONE 0813 E499 C9 18 CMP #24 ;# BYTES > 24 ? 0814 E49B 90 05 BCC DU8 ;NO ,ONLY OUTPUT REMAINING BYTES 0815 E49D B0 01 BCS DU7 ;YES ,24 BYTES IN NEXT RECORD 0816 E49F 68 DU6 PLA 0817 E4A0 A9 18 DU7 LDA #24 0818 E4A2 ;OUTPUT ";" ,# OF BYTES AND SA 0819 E4A2 48 DU8 PHA 0820 E4A3 20 BA E9 JSR SEMI ;SEMICOLON 0821 E4A6 68 PLA 0822 E4A7 8D 19 A4 STA COUNT ;SAVE # OF BYTES 0823 E4AA 20 38 E5 JSR OUTCK ;OUTPUT # OF BYTES 0824 E4AD AD 1B A4 LDA S1+1 ;OUTPUT ADDRESS 0825 E4B0 20 38 E5 JSR OUTCK 0826 E4B3 AD 1A A4 LDA S1 0827 E4B6 20 38 E5 JSR OUTCK 0828 E4B9 ;OUTPUT DATA 0829 E4B9 20 31 E5 DU9 JSR OUTCKS ;GET CHAR SPEC BY S1 (NO PAG 0) 0830 E4BC A9 00 LDA #0 ;CLEAR DISP PTR 0831 E4BE 8D 15 A4 STA CURPO2 0832 E4C1 20 5D E5 JSR ADDS1 ;INCR S1+1,S1 0833 E4C4 CE 19 A4 DEC COUNT ;DECREMENT BYTE COUNT 0834 E4C7 D0 F0 BNE DU9 ;NOT DONE WITH THIS RECORD 0835 E4C9 ;OUTPUT CKSUM 0836 E4C9 AD 1F A4 LDA CKSUM+1 0837 E4CC 20 3B E5 JSR OUTCK1 ;WITHOUT CHEKA 0838 E4CF AD 1E A4 LDA CKSUM 0839 E4D2 20 3B E5 JSR OUTCK1 0840 E4D5 20 66 E5 JSR INCS2 ;INC VERTICAL COUNT 0841 E4D8 4C 7D E4 JMP DU2 ;NEXT RECORD 0842 E4DB ;ALL DONE 0843 E4DB A0 1C DU10 LDY #M5-M1 ;PRINT "MORE ?# 0844 E4DD 20 70 E9 JSR KEPR ;OUTPUT MSG AND GET AN ANSWER 0845 E4E0 C9 59 CMP #'Y' 0846 E4E2 D0 03 BNE *+5 0847 E4E4 4C 44 E4 JMP DU1 ;DUMP MORE DATA 0848 E4E7 68 PLA ;RESTORE FLG 0849 E4E8 8D 10 A4 STA BKFLG 0850 E4EB ;OUTPUT LAST RECORD 0851 E4EB 20 66 E5 JSR INCS2 0852 E4EE 20 BA E9 JSR SEMI ;OUTPUT ';' 0853 E4F1 A2 02 LDX #2 0854 E4F3 A9 00 LDA #0 ;OUTPUT # OF BYTES (0-LAST RECORD) 0855 E4F5 20 3B E5 JSR OUTCK1 0856 E4F8 AD 07 01 DU10A LDA S2+1 ;OUTPUT RECORD COUNT 0857 E4FB 20 3B E5 JSR OUTCK1 ;CHECKCUM IS THE SAME 0858 E4FE AD 06 01 LDA S2 0859 E501 20 3B E5 JSR OUTCK1 0860 E504 CA DEX 0861 E505 D0 F1 BNE DU10A 0862 E507 20 F0 E9 JSR CRLF 0863 E50A ;CLOSE TAPE BLOCK IF ACTIVE 0864 E50A AD 13 A4 DU11 LDA OUTFLG 0865 E50D C9 54 CMP #'T' 0866 E50F D0 0F BNE DU13 ;NO ,BRANCH 0867 E511 AD 37 A4 DU12 LDA TAPTR2 ;TAP OUTPUT BUFF PTR 0868 E514 C9 01 CMP #1 ;BECAUSE FIRST ONE IS BLK CNT 0869 E516 F0 08 BEQ DU13 ;NO DATA TO WRITE 0870 E518 A9 00 LDA #0 ;FILL REST BUFF ZEROS 0871 E51A 20 8B F1 JSR TOBYTE ;OUTPUT TO BUFF 0872 E51D 4C 11 E5 JMP DU12 ;FINISH THIS BLOCK 0873 E520 20 13 EA DU13 JSR CRLOW 0874 E523 18 CLC ;ENABLE INTERR 0875 E524 A9 00 LDA #T1I ;T1 FROM FREE RUNNING TO 1 SHOT 0876 E526 8D 0B A8 STA ACR 0877 E529 A9 34 DU14 LDA #$34 ;SET BOTH TAPES ON 0878 E52B 8D 00 A8 STA DRB 0879 E52E 4C FE E8 JMP LL 0880 E531 0881 E531 ;GET CHAR SPECIFIED BY START ADDR (S1) 0882 E531 A9 1A OUTCKS LDA #S1 0883 E533 A0 00 LDY #0 0884 E535 20 58 EB JSR LDAY 0885 E538 0886 E538 ;ADD TO CHECKSUM AND PRINT 0887 E538 20 4E E5 OUTCK JSR CHEKA ;CHCKSUM 0888 E53B 48 OUTCK1 PHA 0889 E53C AD 13 A4 LDA OUTFLG ;IF TAPE DO NOT CNVRT 0890 E53F C9 54 CMP #'T' ;TO TWO ASCII CHRS 0891 E541 D0 04 BNE OUTCK2 0892 E543 68 PLA 0893 E544 4C 8B F1 JMP TOBYTE ;OUTPUT TO TAP BUFF 0894 E547 68 OUTCK2 PLA 0895 E548 4C 46 EA JMP NUMA ;TWO ASCII REPRE 0896 E54B 0897 E54B 20 FD E3 CHEKAR JSR RBYTE ;TWO ASCII CHR---> 1 BYTE 0898 E54E 48 CHEKA PHA ;ADD TO CHECKSUM 0899 E54F 18 CLC 0900 E550 6D 1E A4 ADC CKSUM 0901 E553 8D 1E A4 STA CKSUM 0902 E556 90 03 BCC *+5 0903 E558 EE 1F A4 INC CKSUM+1 0904 E55B 68 PLA 0905 E55C 60 RTS 0906 E55D 0907 E55D ;ADD ONE TO START ADDR (S1) 0908 E55D EE 1A A4 ADDS1 INC S1 0909 E560 D0 03 BNE ADD1 0910 E562 EE 1B A4 INC S1+1 0911 E565 60 ADD1 RTS 0912 E566 0913 E566 EE 06 01 INCS2 INC S2 ;INCR VERTICAL COUNT 0914 E569 D0 03 BNE *+5 0915 E56B EE 07 01 INC S2+1 0916 E56E 60 RTS 0917 E56F 0918 E56F ;OPEN A FILE FOR OUTPUT TO TAPE BY BLOCKS 0919 E56F ;OUTPUT FILENAME GIVEN BY JSR WHEREO TO TAPE BUFF 0920 E56F A2 00 DUMPTA LDX #0 ;INITIALIZE TAPTR 0921 E571 8A TXA ;TO OUTPUT 0922 E572 8E 68 01 STX BLKO ;BLOCK COUNTER 0923 E575 8E 37 A4 STX TAPTR2 ;TAP OUTPUT BUFF PTR 0924 E578 20 8B F1 JSR TOBYTE ;TWO START OF FILE CHRS 0925 E57B BD 2E A4 DUMPT1 LDA NAME,X ;OUTPUT FILENAME 0926 E57E 20 8B F1 JSR TOBYTE 0927 E581 E8 INX 0928 E582 E0 05 CPX #5 0929 E584 D0 F5 BNE DUMPT1 ;5 FILENAME CHRS ? 0930 E586 60 RTS 0931 E587 0932 E587 ;DUMP ROUTINE TO TAPE WITH KIM-1 FORMAT 0933 E587 20 1D F2 DUMPKI JSR TAOSET ;SET TAPE FOR OUTPUT 0934 E58A A9 2A LDA #'*' ;TO EITHER 1 OR 2 0935 E58C 20 4A F2 JSR OUTTAP ;DIRECTLY TO TAPE 0936 E58F ;ID FROM LAST 2 CHRS OF FILENAME 0937 E58F 20 25 E4 JSR GETID 0938 E592 20 3B E5 JSR OUTCK1 0939 E595 20 4D EB JSR CLRCK 0940 E598 ;STARTING ADDR 0941 E598 AD 1A A4 LDA S1 0942 E59B 20 38 E5 JSR OUTCK ;WITH CHCKSUM 0943 E59E AD 1B A4 LDA S1+1 0944 E5A1 20 38 E5 JSR OUTCK 0945 E5A4 ;OUTPUT DATA 0946 E5A4 20 31 E5 DUK2 JSR OUTCKS ;OUTPUT CHR SPECIFIED BY S1+1,S1 0947 E5A7 20 5D E5 JSR ADDS1 ;INCREM S1+1,S1 0948 E5AA AD 1A A4 LDA S1 ;CHCK FOR LAST BYTE 0949 E5AD CD 1C A4 CMP ADDR ;LSB OF END ADDR 0950 E5B0 AD 1B A4 LDA S1+1 0951 E5B3 ED 1D A4 SBC ADDR+1 0952 E5B6 90 EC BCC DUK2 ;NEXT CHR 0953 E5B8 ;NOW SEND END CHR "/" 0954 E5B8 A9 2F LDA #'/' 0955 E5BA 20 4A F2 JSR OUTTAP ;DIRECTLY TO TAPE 0956 E5BD ;CHECKSUM 0957 E5BD AD 1E A4 LDA CKSUM 0958 E5C0 20 46 EA JSR NUMA ;ASCII REPRES 0959 E5C3 AD 1F A4 LDA CKSUM+1 0960 E5C6 20 46 EA JSR NUMA 0961 E5C9 ;TWO EOT CHRS 0962 E5C9 A9 04 LDA #$04 0963 E5CB 20 4A F2 JSR OUTTAP 0964 E5CE 20 4A F2 JSR OUTTAP 0965 E5D1 ;TURN TAPES ON 0966 E5D1 4C 20 E5 JMP DU13 0967 E5D4 0968 E5D4 ;***** * COMMAND-ALTER PROGRAM COUNTER ***** 0969 E5D4 20 AE EA CGPC JSR ADDIN ;ADDR <=ADDRESS ENTERED FROM KB 0970 E5D7 20 DD E5 CGPC0 JSR CGPC1 ;TRANSFER ADDR TO SAVPC 0971 E5DA 4C 13 EA JMP CRLOW 0972 E5DD AD 1D A4 CGPC1 LDA ADDR+1 ;THIS WAY MNEMONICS CAN USE IT 0973 E5E0 8D 26 A4 STA SAVPC+1 0974 E5E3 AD 1C A4 LDA ADDR 0975 E5E6 8D 25 A4 STA SAVPC 0976 E5E9 60 RTS 0977 E5EA 0978 E5EA ;***** P COMMAND-ALTER PROCESSOR STATUS ***** 0979 E5EA A2 00 CGPS LDX #0 0980 E5EC F0 0E BEQ CGALL 0981 E5EE 0982 E5EE ;***** A COMMAND-ALTER ACCUMULATOR ***** 0983 E5EE A2 01 CGA LDX #1 0984 E5F0 D0 0A BNE CGALL 0985 E5F2 0986 E5F2 ;***** X COMMAND-ALTER X REGISTER ***** 0987 E5F2 A2 02 CGX LDX #2 0988 E5F4 D0 06 BNE CGALL 0989 E5F6 0990 E5F6 ;***** Y COMMAND-ALTER Y REGISTER ***** 0991 E5F6 A2 03 CGY LDX #3 0992 E5F8 D0 02 BNE CGALL 0993 E5FA 0994 E5FA ;***** S COMMAND-ALTER STACK POINTER ***** 0995 E5FA A2 04 CGS LDX #4 0996 E5FC 20 D8 E7 CGALL JSR EQUAL ;PRINT PROMPT 0997 E5FF 20 5D EA JSR RD2 ;GET VALUE FROM KEYBOARD 0998 E602 B0 04 BCS GOERR 0999 E604 9D 20 A4 STA SAVPS,X 1000 E607 60 RTS 1001 E608 20 D4 E7 GOERR JSR QM 1002 E60B D0 EF BNE CGALL 1003 E60D 1004 E60D ;***** COMMAND-SHOW NEXT 5 MEMORY LOC ***** 1005 E60D 20 3E E8 NXT5 JSR BLANK 1006 E610 A0 04 LDY #4 ;UPDATE ADDR FROM 1007 E612 20 CD E2 JSR NXTADD ;=XXXX 1008 E615 20 DB E2 JSR WRITAZ ;OUTPUT ADDRESS 1009 E618 4C 4D E2 JMP MEIN ;DISPLAY CONTENTS OF NEXT 4 LOCS 1010 E61B 1011 E61B ;***** B COMMAND-SET BREAKPOINT ADDR ***** 1012 E61B A0 27 BRKA LDY #M8-M1 ;PRINT "BRK" 1013 E61D 20 AF E7 JSR KEP 1014 E620 20 37 E8 BRK1 JSR PSL1 ;PRINT "/" 1015 E623 20 73 E9 JSR REDOUT ;GET BREAK NUMBER 1016 E626 38 SEC 1017 E627 E9 30 SBC #'0' ;0 THRU 3 1018 E629 30 04 BMI BKERR ;CHARACTER < '0' -ILLEGAL 1019 E62B C9 04 CMP #4 ;FOUR BRK POINTS 1020 E62D 30 05 BMI BKOK ;0 < CHARACTER < 4 -OK 1021 E62F 20 D4 E7 BKERR JSR QM ;ERROR 1022 E632 D0 EC BNE BRK1 ;ALLOW REENTRY OF BREAK NUMBER 1023 E634 0A BKOK ASL A ;*2 TO FORM WORD OFFSET 1024 E635 48 PHA ;SAVE IT 1025 E636 20 AE EA JSR ADDIN ;GET ADDRESS FOR BREAKPOINT 1026 E639 68 PLA 1027 E63A B0 10 BCS BKO2 ;BAD ADDRESS ENTERED 1028 E63C 20 3D FF JSR PATC18 ; & CLR BUFFERS 1029 E63F AA TAX ;# OF BRK 1030 E640 AD 1C A4 LDA ADDR ;STORE ENTERED ADDR IN BRKPT LIST 1031 E643 9D 00 01 STA BKS,X 1032 E646 AD 1D A4 LDA ADDR+1 1033 E649 9D 01 01 STA BKS+1,X 1034 E64C 60 BKO2 RTS ;ALL DONE 1035 E64D 1036 E64D ;***** ? COMMAND-SHOW CURRENT BREAKPOINTS ***** 1037 E64D A0 00 SHOW LDY #0 1038 E64F 20 13 EA JSR CRLOW 1039 E652 20 3E E8 SH1 JSR BLANK 1040 E655 BE 00 01 LDX BKS,Y ;ADDRESS OF NEXT BREAKPOINT 1041 E658 B9 01 01 LDA BKS+1,Y 1042 E65B 20 42 EA JSR WRAX ;SHOW BREAKPOINT ADDRESS 1043 E65E C8 INY 1044 E65F C8 INY 1045 E660 C0 08 CPY #8 1046 E662 D0 EE BNE SH1 1047 E664 60 RTS 1048 E665 1049 E665 ;***** H COMMAND-SHOW TRACE STACK HISTORY ***** 1050 E665 ;LAST FIVE INSTR ADDRS 1051 E665 A2 05 SHIS LDX #5 ;NUMBER OF ENTRIES 1052 E667 8E 29 A4 STX STIY+2 1053 E66A AC 14 A4 SH11 LDY HISTP ;POINTER TO LATEST ENTRY 1054 E66D 20 13 EA JSR CRLOW 1055 E670 20 3E E8 JSR BLANK 1056 E673 B9 2E A4 LDA HIST,Y ;OUTPUT ADDRESS OF ENTRY 1057 E676 20 46 EA JSR NUMA 1058 E679 B9 2F A4 LDA HIST+1,Y 1059 E67C 20 46 EA JSR NUMA 1060 E67F 20 88 E6 JSR NHIS ;UPDATE POINTER 1061 E682 CE 29 A4 DEC STIY+2 1062 E685 D0 E3 BNE SH11 1063 E687 60 RTS 1064 E688 1065 E688 ;UPDATE HISTORY POINTER (PART OF H) 1066 E688 C8 NHIS INY 1067 E689 C8 INY 1068 E68A C0 0A CPY #10 1069 E68C D0 02 BNE NH1 1070 E68E A0 00 LDY #0 ;WRAPAROUND AT 10 1071 E690 8C 14 A4 NH1 STY HISTP 1072 E693 60 RTS 1073 E694 1074 E694 ;***** 3 COMMAND-VERIFY TAPES ***** 1075 E694 ;VERIFY CKSUM OF BLOCKS 1076 E694 20 48 E8 VECKSM JSR WHEREI ;GET THE FILE 1077 E697 20 93 E9 JSR INALL ;CHCK OBJ OR SOURCE 1078 E69A C9 0D CMP #CR ;FIRST CHR IS IF OBJ 1079 E69C D0 0E BNE VECK2 ;ASSUME SOURCE CODE 1080 E69E 20 93 E9 VECK1 JSR INALL ;OBJECT FILE 1081 E6A1 C9 3B CMP #SEMICOLON 1082 E6A3 D0 F9 BNE VECK1 ;IGNORE ALL CHARS BEFORE ';' 1083 E6A5 20 93 E9 JSR INALL 1084 E6A8 4C 60 FF JMP PAT20 1085 E6AB EA NOP 1086 E6AC 20 93 E9 VECK2 JSR INALL ;IT IS TEXT 1087 E6AF C9 0D CMP #CR 1088 E6B1 D0 F9 BNE VECK2 1089 E6B3 20 93 E9 JSR INALL ;NEED TO TO FINISH 1090 E6B6 C9 0D CMP #CR 1091 E6B8 D0 F2 BNE VECK2 1092 E6BA 4C 20 E5 JMP DU13 ;CLOSE FILE, IT IS OKAY 1093 E6BD 1094 E6BD ;***** 1 COMMAND-TOGGLE TAPE 1 CONTROL ***** 1095 E6BD AD 00 A8 TOGTA1 LDA DRB 1096 E6C0 49 10 EOR #$10 ;INVERT PB4 1097 E6C2 8D 00 A8 STA DRB 1098 E6C5 29 10 AND #$10 1099 E6C7 F0 28 BEQ BRK3 ;IF 0 TAPE CNTRL IS ON 1100 E6C9 D0 2F BNE BRK4 ;IF $10 TAPE CNTRL IS OFF 1101 E6CB 1102 E6CB ;***** 2 COMMAND-TOGGLE TAPE 2 CONTROL ***** 1103 E6CB AD 00 A8 TOGTA2 LDA DRB 1104 E6CE 49 20 EOR #$20 ;INVERT PB5 1105 E6D0 8D 00 A8 STA DRB 1106 E6D3 29 20 AND #$20 1107 E6D5 F0 1A BEQ BRK3 1108 E6D7 D0 21 BNE BRK4 1109 E6D9 1110 E6D9 ;***** V COMMAND-TOGGLE REGISTER DISP FLG ***** 1111 E6D9 ;DISPLAY REGIST BEFORE EXEC 1112 E6D9 A2 0E REGT LDX #REGF 1113 E6DB D0 0A BNE TOGL 1114 E6DD 1115 E6DD ;****** Z COMMAND-TOGGLE DIS TRACE FLG ***** 1116 E6DD ;DISPL NEXT INSTR BEFORE EXEC 1117 E6DD A2 0F TRACE LDX #DISFLG 1118 E6DF D0 06 BNE TOGL 1119 E6E1 1120 E6E1 ;***** \ COMMAND-TOGGLE PRINTER FLAG ***** 1121 E6E1 A2 11 PRITR LDX #PRIFLG 1122 E6E3 D0 02 BNE TOGL 1123 E6E5 1124 E6E5 ;***** 4 COMMAND-TOGGLE SOFT BRK ENABL FLG ***** 1125 E6E5 A2 10 BRKK LDX #BKFLG 1126 E6E7 1127 E6E7 BD 00 A4 TOGL LDA MONRAM,X ;LOAD FLAG 1128 E6EA F0 0A BEQ TOGL1 ;FLAG IS OFF ,SO TURN ON 1129 E6EC A9 00 LDA #0 ;FLAG IS ON ,SO TURN OFF 1130 E6EE 9D 00 A4 STA MONRAM,X 1131 E6F1 A0 24 BRK3 LDY #M7-M1 ;PRINT "OFF" 1132 E6F3 4C AF E7 BRK2 JMP KEP 1133 E6F6 38 TOGL1 SEC ;TURN FLAG ON BY SETTING NON-ZERO 1134 E6F7 7E 00 A4 ROR MONRAM,X ;FLAG IS ON MSB 1135 E6FA A0 21 BRK4 LDY #M6-M1 ;PRINT "ON" 1136 E6FC D0 F5 BNE BRK2 1137 E6FE 1138 E6FE ;***** # COMMAND-CLEAR ALL BREAKS ***** 1139 E6FE A9 00 CLRBK LDA #0 ;STORE ZEROS INTO BRKPT LIST 1140 E700 A2 07 LDX #7 1141 E702 9D 00 01 RS20 STA BKS,X 1142 E705 CA DEX 1143 E706 10 FA BPL RS20 1144 E708 30 E7 BMI BRK3 ;PRINT "OFF" 1145 E70A 1146 E70A ;***** K COMMAND-DISASSEMBLE MEMORY ***** 1147 E70A A9 2A KDISA LDA #'*' ;GET START ADDRESS 1148 E70C 20 7A E9 JSR OUTPUT 1149 E70F 20 AE EA JSR ADDIN 1150 E712 B0 F6 BCS KDISA ;IF ERROR DO IT AGAIN 1151 E714 20 D7 E5 JSR CGPC0 ;GET IT INTO PROG CNTR 1152 E717 20 37 E8 JSR PSL1 ;PRINT "/" 1153 E71A 20 85 E7 JSR GCNT ;GET COUNT 1154 E71D 20 24 EA JSR CRCK 1155 E720 4C 2B E7 JMP JD2 1156 E723 20 07 E9 JD1 JSR RCHEK ;SEE IF HE WANTS TO INTERRUPT 1157 E726 20 90 E7 JSR DONE 1158 E729 F0 17 BEQ JD4 1159 E72B 20 6C F4 JD2 JSR DISASM ;GO TO DISASSEMBLER 1160 E72E AD 25 A4 LDA SAVPC ;POINT TO NEXT INSTRUC LOCAT 1161 E731 38 SEC ;ONE MORE TO PROG CNTR 1162 E732 65 EA ADC LENGTH 1163 E734 8D 25 A4 STA SAVPC 1164 E737 90 03 BCC JD3 1165 E739 EE 26 A4 INC SAVPC+1 1166 E73C 20 24 EA JD3 JSR CRCK ; 1167 E73F 4C 23 E7 JMP JD1 1168 E742 60 JD4 RTS 1169 E743 1170 E743 ;INITIALIZATION TABLE FOR 6522 1171 E743 340037FF25FFINTAB1 .DB $34,$00,$37,$FF,$25,$FF,$25,$FF 1171 E749 25FF 1172 E74B FF FF 00 00 .DB $FF,$FF,$00,T1I+T2I 1173 E74F E1 FF 7F .DB MOFF+PRST+SP12,$FF,$7F 1174 E752 ;INITIALIZATION TABLE FOR 6532 1175 E752 FF FF 00 00 INTAB2 .DB $FF,$FF,$00,$00 1176 E756 ;INITIALIZATION TABLE FOR MONITOR RAM 1177 E756 7BE054E105EFINTAB3 .DW NMIV3,IRQV3,OUTDIS 1178 E75C C70802CA0380 .DB $C7,$08,$02,$CA,$03,$80,$00,$00 1178 E762 0000 1179 E764 00800D0D0000 .DB $00,$80,$0D,$0D,$00,$00,$00 1179 E76A 00 1180 E76B ;SEE IF WE HIT A SOFT BREAKPOINT (PART OF NMV3) 1181 E76B A2 07 CKB LDX #7 ;COMPARE BRKPT LIST TO TRAP ADDR 1182 E76D BD 00 01 CKB2 LDA BKS,X ;GET ADDRESS OF NEXT BREAKPOINT 1183 E770 CA DEX 1184 E771 CD 26 A4 CMP SAVPC+1 ;COMPARE TO SAVED PROGRAM COUNTER 1185 E774 D0 0A BNE CKB1 1186 E776 BD 00 01 LDA BKS,X 1187 E779 CD 25 A4 CMP SAVPC 1188 E77C D0 02 BNE CKB1 ;NO MATCH SO TRY NEXT BREAKPOINT 1189 E77E 38 SEC ;MATCH-SET MATCH FLAG 1190 E77F 60 RTS 1191 E780 CA CKB1 DEX 1192 E781 10 EA BPL CKB2 ;MORE TO GO 1193 E783 18 CLC ;NO MATCH -RESET MATCH FLAG 1194 E784 60 RTS 1195 E785 1196 E785 ;GET # OF LINES COUNT FOR GO-COMMAND,LIST-COMM 1197 E785 20 5D EA GCNT JSR RD2 1198 E788 90 02 BCC GCN1 1199 E78A 49 0C EOR #$0C ;---> $2C ,---> $01 1200 E78C 8D 19 A4 GCN1 STA COUNT 1201 E78F 60 RTS 1202 E790 1203 E790 ;CHECK IF COUNT HAS REACHED ZERO 1204 E790 ;COUNT=$2C MEANS FOREVER 1205 E790 AD 19 A4 DONE LDA COUNT ;IF COUNT=0 WE ARE DONE 1206 E793 C9 2C CMP #$2C ;THIS MEANS FOR EVER 1207 E795 F0 09 BEQ DON1 ;SET ACC DIFF FROM ZERO 1208 E797 F8 SED ;DECREMENT COUNT IN DECIMAL 1209 E798 38 SEC 1210 E799 E9 01 SBC #1 1211 E79B D8 CLD 1212 E79C 8D 19 A4 STA COUNT 1213 E79F 60 RTS 1214 E7A0 A9 2C DON1 LDA #$2C 1215 E7A2 60 RTS 1216 E7A3 1217 E7A3 A0 00 FROM LDY #0 ;PRINT "FR=" 1218 E7A5 F0 02 BEQ TO1 1219 E7A7 1220 E7A7 A0 05 TO LDY #M3-M1 ;PRINT "TO=" 1221 E7A9 20 AF E7 TO1 JSR KEP 1222 E7AC 4C B1 EA JMP ADDNE ;GET ADDRESS 1223 E7AF 1224 E7AF ;PRINT MSG POINTED TO BY Y REG 1225 E7AF B9 00 E0 KEP LDA M1,Y 1226 E7B2 48 PHA 1227 E7B3 29 7F AND #$7F ;STRIP OFF MSB 1228 E7B5 20 7A E9 JSR OUTPUT 1229 E7B8 C8 INY 1230 E7B9 68 PLA 1231 E7BA 10 F3 BPL KEP ;MSB =1 ? 1232 E7BC 60 RTS 1233 E7BD 1234 E7BD ;PRINT "*" ,BUT NOT TO TAPE RECORDER, NOR LOADING.... 1235 E7BD ;PAPER TAPE OR TO DISPLAY 1236 E7BD AD 12 A4 PROMPT LDA INFLG ;WHICH DEV (FOR EDITOR) 1237 E7C0 C9 54 CMP #'T' ;NO PROMPT IF "T" OR "L" 1238 E7C2 4C EF FE JMP PATC11 1239 E7C5 20 42 E8 PROMP1 JSR TTYTST ;PROMPT ONLY TO TTY 1240 E7C8 D0 05 BNE PR2 ;BRANCH ON KB 1241 E7CA A9 2A LDA #'*' 1242 E7CC 4C 7A E9 PR1 JMP OUTPUT ;ONLY TO TERMIN 1243 E7CF A9 0D PR2 LDA #CR ;CLR DISP 1244 E7D1 4C 05 EF JMP OUTDIS 1245 E7D4 1246 E7D4 A9 3F QM LDA #'?' ;PRINT "?" 1247 E7D6 D0 F4 BNE PR1 1248 E7D8 1249 E7D8 A9 3D EQUAL LDA #'=' ;PRINT "=" 1250 E7DA D0 F0 BNE PR1 1251 E7DC 1252 E7DC ;ON DELETE KEY OUTPUT SLASH IF TTY & .... 1253 E7DC ;BACK UP CURSOR IF KB (MAY NEED SCROLLING) 1254 E7DC 20 42 E8 PSLS JSR TTYTST ;TTY OR KB ? 1255 E7DF F0 56 BEQ PSL1 ;BRANCH ON TTY 1256 E7E1 20 9E EB JSR PHXY ;SAVE X,Y 1257 E7E4 CE 15 A4 DEC CURPO2 ;DECR DISP PNTR 1258 E7E7 AE 15 A4 LDX CURPO2 1259 E7EA E0 14 CPX #20 ;IF MORE THAN 20 JUST SCROLL THEM 1260 E7EC B0 0D BCS PSL0 1261 E7EE A9 20 LDA #' ' ;< 20 ,SO CLR CUR 1262 E7F0 20 02 EF JSR OUTDP1 1263 E7F3 CE 15 A4 DEC CURPO2 1264 E7F6 4C 02 E8 JMP PSL00 1265 E7F9 EA NOP 1266 E7FA EA NOP 1267 E7FB 20 F8 FE PSL0 JSR PATC12 ;CLR PRIFLG 1268 E7FE CA DEX ;ONE CHR LESS 1269 E7FF 20 2F EF JSR OUTD2A ;SCROLL THEM 1270 E802 AD 15 A4 PSL00 LDA CURPO2 ;DISBUF---> PRIBUFF 1271 E805 C9 15 CMP #21 1272 E807 90 13 BCC PSL0B 1273 E809 C9 29 CMP #41 1274 E80B 90 07 BCC PSL0A 1275 E80D A0 28 LDY #40 ;CHR 40-59 1276 E80F E9 28 SBC #40 1277 E811 4C 1E E8 JMP PSL0C 1278 E814 A0 14 PSL0A LDY #20 ;CHR 20-39 1279 E816 38 SEC 1280 E817 E9 14 SBC #20 1281 E819 4C 1E E8 JMP PSL0C 1282 E81C A0 00 PSL0B LDY #0 ;CHR 00-19 1283 E81E 8D 16 A4 PSL0C STA CURPOS 1284 E821 A2 00 LDX #0 1285 E823 B9 38 A4 PSL0D LDA DIBUFF,Y ;TRANSFER THEM 1286 E826 9D 60 A4 STA IBUFM,X 1287 E829 E8 INX 1288 E82A C8 INY 1289 E82B EC 16 A4 CPX CURPOS ;PRI PNTR 1290 E82E 90 F3 BCC PSL0D 1291 E830 20 38 F0 JSR OUTPR ;CLR PRI BUFF TO THE RIGHT 1292 E833 20 AC EB JSR PLXY ;RESTORE X,Y 1293 E836 60 RTS 1294 E837 A9 2F PSL1 LDA #'/' ;PRINT "/" 1295 E839 D0 91 BNE PR1 1296 E83B 1297 E83B 20 3E E8 BLANK2 JSR BLANK ;TWO SPACES 1298 E83E A9 20 BLANK LDA #' ' 1299 E840 D0 8A BNE PR1 1300 E842 1301 E842 ;CHECK TTY/KBD SWITCH (Z=1 FOR TTY) 1302 E842 A9 08 TTYTST LDA #$08 ;CHECK IF TTY OR KB 1303 E844 2C 00 A8 BIT DRB ;TTY OR KB SWICTH =PB3 1304 E847 60 RTS 1305 E848 1306 E848 ;WHERE IS INPUT COMING FROM? 1307 E848 ;SET UP FOR INPUT ACTIVE DEVICE 1308 E848 A0 2A WHEREI LDY #M9-M1 ;PRINT "IN" 1309 E84A 20 70 E9 JSR KEPR ;OUTPUT MSG AND INPUT CHR 1310 E84D 8D 12 A4 STA INFLG 1311 E850 C9 54 CMP #'T' 1312 E852 D0 08 BNE WHE1 1313 E854 A2 00 LDX #0 ;FOR INPUT FILE FLG 1314 E856 20 A2 E8 JSR FNAM ;OPEN FILE FOR TAPE (1 OR 2) 1315 E859 4C 2F E3 JMP LOADTA ;GET FILE 1316 E85C C9 4B WHE1 CMP #'K' ;TAPE WITH KIM FORMAT 1317 E85E D0 08 BNE WHE2 1318 E860 A2 00 LDX #0 ;FOR INPUT FILE FLG 1319 E862 20 A2 E8 JSR FNAM ;OPEN FILE FOR TAP (1 OR 2) 1320 E865 4C A4 E3 JMP LOADKI ;THE WHOLE FILE 1321 E868 C9 55 WHE2 CMP #'U' ;USER RTN? 1322 E86A D0 04 BNE WHE3 1323 E86C 18 CLC ;SET FLG FOR INITIALIZATION 1324 E86D 6C 08 01 JMP (UIN) ;USER INPUT SETUP 1325 E870 60 WHE3 RTS 1326 E871 1327 E871 ;WHERE IS OUTPUT GOING TO? 1328 E871 ;SET UP FOR OUTPUT ACTIVE DEVICE 1329 E871 A0 2D WHEREO LDY #M10-M1 ;PRINT "OUT" 1330 E873 20 70 E9 JSR KEPR ;OUTPUT MSG & INPUT CHR 1331 E876 8D 13 A4 STA OUTFLG ;DEVICE FLG 1332 E879 ;TAPES 1333 E879 C9 54 CMP #'T' 1334 E87B D0 08 BNE WHRO1 1335 E87D A2 01 LDX #1 ;FOR OUTPUT FILE FLG 1336 E87F 20 A2 E8 JSR FNAM ;FILENAME & TAPE (1 OR 2) 1337 E882 4C 6F E5 JMP DUMPTA ;INITIALIZE FILE 1338 E885 C9 4B WHRO1 CMP #'K' ;TAPE WITH KIM FORMAT 1339 E887 D0 05 BNE WHRO2 1340 E889 A2 01 LDX #1 ;FOR OUTPUT FILE FLG 1341 E88B 4C A2 E8 JMP FNAM 1342 E88E ;PRINTER 1343 E88E C9 50 WHRO2 CMP #'P' ;PRINTER? 1344 E890 D0 05 BNE WHRO3 1345 E892 A9 0D LDA #CR ;OUTPUT LAST LINE IF ON 1346 E894 4C 00 F0 JMP OUTPRI ;& CLEAR PRINTER PTR 1347 E897 ;USER SET UP 1348 E897 C9 55 WHRO3 CMP #'U' ;USR RTN? 1349 E899 D0 04 BNE WHRO4 1350 E89B 18 CLC ;CLR FLG FOR INITIALIZATION 1351 E89C 6C 0A 01 JMP (UOUT) ;USER OUTPUT SETUP 1352 E89F ;ANY OTHER 1353 E89F 4C 13 EA WHRO4 JMP CRLOW 1354 E8A2 1355 E8A2 ;GET FILE NAME & TAPE UNIT 1356 E8A2 20 9E EB FNAM JSR PHXY ;SAVE IN/OUT FLG (X) 1357 E8A5 20 CF E8 JSR NAMO ;GET NAME 1358 E8A8 A0 50 WHICHT LDY #TMSG2-M1 ;PRINT "T=" 1359 E8AA 20 70 E9 JSR KEPR ;OUTPUT MSG & INPUT CHR 1360 E8AD C9 0D CMP #CR 1361 E8AF D0 02 BNE TAP1 1362 E8B1 A9 31 LDA #'1' ; ==> TAPE 1 1363 E8B3 38 TAP1 SEC 1364 E8B4 E9 31 SBC #'1' ;SUBTRACT 31 1365 E8B6 30 04 BMI TAP2 ;ONLY 1,2 OK 1366 E8B8 C9 02 CMP #2 1367 E8BA 30 06 BMI TAP3 ;OK 1368 E8BC 20 D4 E7 TAP2 JSR QM ;ERROR 1369 E8BF 4C A8 E8 JMP WHICHT 1370 E8C2 20 AC EB TAP3 JSR PLXY ;IN/OUT FLG 1371 E8C5 9D 34 A4 STA TAPIN,X ;IF X=0 --> TAPIN (TAPE 1 OR 2) 1372 E8C8 20 83 FE JSR CUREAD ;GET ANYTHING 1373 E8CB 20 24 EA JSR CRCK ; 1374 E8CE 60 RTS ;IF X=1 --> TAPOUT (TAPE 1 OR 2) 1375 E8CF 1376 E8CF ;GET FILE NAME 1377 E8CF A0 4D NAMO LDY #TMSG1-M1 ;PRINT "F=" 1378 E8D1 20 AF E7 JSR KEP ;NO CRLF 1379 E8D4 A0 00 LDY #0 1380 E8D6 20 5F E9 NAMO1 JSR RDRUP ;GET CHAR 1381 E8D9 C9 0D CMP #CR ;DONE? 1382 E8DB F0 0C BEQ NAMO2 1383 E8DD C9 20 CMP #' ' 1384 E8DF F0 08 BEQ NAMO2 1385 E8E1 99 2E A4 STA NAME,Y ;STORE 1386 E8E4 C8 INY 1387 E8E5 C0 05 CPY #5 1388 E8E7 D0 ED BNE NAMO1 1389 E8E9 ;BLANK REST OF NAME 1390 E8E9 A9 20 NAMO2 LDA #' ' 1391 E8EB C0 05 NAMO3 CPY #5 1392 E8ED F0 06 BEQ NAMO4 1393 E8EF 99 2E A4 STA NAME,Y 1394 E8F2 C8 INY 1395 E8F3 D0 F6 BNE NAMO3 1396 E8F5 4C 3E E8 NAMO4 JMP BLANK 1397 E8F8 1398 E8F8 ;SET INPUT FROM TERMINAL (KB OR TTY) 1399 E8F8 A9 0D INLOW LDA #CR 1400 E8FA 8D 12 A4 STA INFLG 1401 E8FD 60 RTS 1402 E8FE 1403 E8FE ;SET I/O TO TERMINAL (KB & D/P ,OR TTY) 1404 E8FE 20 F8 E8 LL JSR INLOW 1405 E901 1406 E901 ;SET OUTPUT TO TERMINAL (D/P OR TTY) 1407 E901 A9 0D OUTLOW LDA #CR 1408 E903 8D 13 A4 STA OUTFLG 1409 E906 60 OUTL1 RTS 1410 E907 1411 E907 ;ON STOPS EXECUTION & BACK TO MONITOR 1412 E907 ;ON STOPS EXECUTION & CONTINUE ON ANY OTHER KEY 1413 E907 20 42 E8 RCHEK JSR TTYTST ;TTY OR KB ? 1414 E90A F0 1A BEQ RCHTTY 1415 E90C 20 EF EC JSR ROONEK ;CLR MSK & GET A KEY 1416 E90F 88 DEY 1417 E910 30 13 BMI RCH3 ;RTN ON NO KEY 1418 E912 A2 00 LDX #0 1419 E914 20 82 EC JSR GETK2 ;GET THE KEY 1420 E917 C9 1B CMP #ESCAPE 1421 E919 F0 3B BEQ REA1 ;TO COMMAN & SET I/O TO TERMINAL 1422 E91B C9 20 CMP #' ' ;WAIT KEY 1423 E91D D0 06 BNE RCH3 ;RTN, IGNORE OTHER KEYS 1424 E91F 20 EF EC RCH2 JSR ROONEK ;WAIT TILL HE RELEASE IT & 1425 E922 88 DEY ;QUIT WAITING ON NEXT KEY 1426 E923 30 FA BMI RCH2 1427 E925 60 RCH3 RTS 1428 E926 70 13 RCHTTY BVS RCHT1 ;TTI=PB6 ---> V (OVERFL FLG) 1429 E928 2C 00 A8 RCHT2 BIT DRB ;WAIT TILL HE RELEASE IT 1430 E92B 50 FB BVC RCHT2 1431 E92D 20 0F EC JSR DELAY 1432 E930 20 DB EB JSR GETTTY ;GET A CHAR 1433 E933 C9 1B CMP #ESCAPE 1434 E935 F0 1F BEQ REA1 ;TO COMMAN 1435 E937 C9 20 CMP #' ' 1436 E939 D0 ED BNE RCHT2 1437 E93B 60 RCHT1 RTS ;QUIT WAITING ON ANY KEY 1438 E93C 1439 E93C ;READ ONE CHAR FROM KB/TTY & PRESERVE X,Y 1440 E93C 20 9E EB READ JSR PHXY ;PUSH X & Y 1441 E93F 20 42 E8 JSR TTYTST ;TTY OR KB ? 1442 E942 D0 06 BNE READ1 1443 E944 20 DB EB JSR GETTTY 1444 E947 4C 4D E9 JMP READ2 1445 E94A 20 40 EC READ1 JSR GETKEY 1446 E94D 20 AC EB READ2 JSR PLXY ;PULL X & Y 1447 E950 29 7F AND #$7F ;STRIP PARITY 1448 E952 C9 1B CMP #ESCAPE 1449 E954 D0 E5 BNE RCHT1 ;RTN 1450 E956 20 3D FF REA1 JSR PATC18 ; & CLR BUFFERS 1451 E959 4C A1 E1 JMP COMIN ;BOTH I/O TO TERMINAL 1452 E95C 1453 E95C ;READ WITH RUBOUT OR DELETE POSSIBLE 1454 E95C 20 DC E7 RB2 JSR PSLS ;SLASH OR BACK SPACE 1455 E95F 20 83 FE RDRUP JSR CUREAD 1456 E962 C9 08 CMP #RUB ;RUBOUT 1457 E964 F0 04 BEQ RDR1 1458 E966 C9 7F CMP #$7F ;ALSO DELETE 1459 E968 D0 0C BNE RED2 ;ECHO IF NOT 1460 E96A ;RUBOUT TO DELETE CHAR 1461 E96A 88 RDR1 DEY 1462 E96B 10 EF BPL RB2 1463 E96D C8 INY 1464 E96E F0 EF BEQ RDRUP 1465 E970 1466 E970 ;OUTPUT MESSAGE THEN INPUT CHR 1467 E970 20 AF E7 KEPR JSR KEP 1468 E973 1469 E973 ;READ AND ECHO A CHAR FROM KB OR TTY 1470 E973 20 83 FE REDOUT JSR CUREAD 1471 E976 C9 0D RED2 CMP #CR 1472 E978 F0 C1 BEQ RCHT1 ;DO NOT ECHO 1473 E97A 1474 E97A ;OUTPUTS A CHAR TO EITHER TTY OR D/P 1475 E97A 48 OUTPUT PHA ;SAVE IT 1476 E97B AD 11 A4 OUT1 LDA PRIFLG ;IF LSB=1 OUTPUT ONLY TO DISP 1477 E97E 29 01 AND #$01 1478 E980 F0 04 BEQ OUT1A 1479 E982 68 PLA 1480 E983 4C 02 EF JMP OUTDP1 ;ONLY TO DISPL 1481 E986 20 42 E8 OUT1A JSR TTYTST ;TTY OR KB ? 1482 E989 D0 04 BNE OUT2 1483 E98B 68 PLA 1484 E98C 4C A8 EE JMP OUTTTY ;TO TTY 1485 E98F 68 OUT2 PLA 1486 E990 4C FC EE JMP OUTDP ;TO DISP & PRINTR 1487 E993 1488 E993 ;GET A CHR FROM CURRENT INPUT DEVICE (SET ON INFLG) 1489 E993 AD 12 A4 INALL LDA INFLG 1490 E996 C9 54 CMP #'T' 1491 E998 D0 03 BNE *+5 1492 E99A 4C 3B ED JMP TIBYTE ;CHAR FROM BUFFER 1493 E99D C9 4B CMP #'K' ;WITH KIM FORMAT 1494 E99F D0 03 BNE *+5 1495 E9A1 4C 29 EE JMP GETTAP ;DIRECTLY FROM TAPE 1496 E9A4 C9 4D CMP #'M' ;MEMORY FOR ASM? 1497 E9A6 D0 03 BNE *+5 1498 E9A8 4C D0 FA JMP MREAD 1499 E9AB C9 55 CMP #'U' ;USER ROUTINE? 1500 E9AD D0 04 BNE *+6 1501 E9AF 38 SEC ;SET FLG FOR NORMAL INPUT 1502 E9B0 6C 08 01 JMP (UIN) 1503 E9B3 C9 4C CMP #'L' ;TO LOAD PPR TAPE 1504 E9B5 D0 A8 BNE RDRUP 1505 E9B7 4C DB EB JMP GETTTY ; FROM TTY 1506 E9BA 1507 E9BA ;.FILE A2 1508 E9BA A9 3B SEMI LDA #SEMICOLON ;OUTPUT A ";" 1509 E9BC ;WRITE A CHR TO OUTPUT DEVICE (SET ON OUTFLG) 1510 E9BC 48 OUTALL PHA 1511 E9BD AD 13 A4 LDA OUTFLG 1512 E9C0 ;TAPE BY BLOCKS 1513 E9C0 C9 54 CMP #'T' ;TAPES ? 1514 E9C2 D0 04 BNE OUTA1 1515 E9C4 68 PLA 1516 E9C5 4C 8B F1 JMP TOBYTE ;OUTPUT ONE CHAR TO TAPE BUFFER 1517 E9C8 ;TAPE KIM FORMAT 1518 E9C8 C9 4B OUTA1 CMP #'K' ;KIM-1 ? 1519 E9CA D0 04 BNE OUTA2 1520 E9CC 68 PLA 1521 E9CD 4C 4A F2 JMP OUTTAP 1522 E9D0 ;PRINTER 1523 E9D0 C9 50 OUTA2 CMP #'P' ;PRINTER ? 1524 E9D2 D0 0E BNE OUTA3 1525 E9D4 38 SEC ;TURN PRINTER ON 1526 E9D5 6E 11 A4 ROR PRIFLG 1527 E9D8 68 PLA 1528 E9D9 08 PHP 1529 E9DA 20 00 F0 JSR OUTPRI 1530 E9DD 28 PLP 1531 E9DE 2E 11 A4 ROL PRIFLG ;RESTORE FLG 1532 E9E1 60 RTS 1533 E9E2 ;USER DEFINED 1534 E9E2 C9 55 OUTA3 CMP #'U' ;USER ROUTINE? 1535 E9E4 D0 04 BNE OUTA4 1536 E9E6 38 SEC ;SET FLG FOR NORMAL OUTPUT 1537 E9E7 6C 0A 01 JMP (UOUT) ;YES 1538 E9EA ;NOWHERE OR TO TTY ,D/P 1539 E9EA C9 58 OUTA4 CMP #'X' ;EAT IT? 1540 E9EC D0 8D BNE OUT1 ;OUTPUT TO TTY OR D/P 1541 E9EE 68 PLA 1542 E9EF 60 RTS 1543 E9F0 1544 E9F0 ;THIS ROUTINE OUTPUTS A CRLF TO ANY OUTPUT DEV 1545 E9F0 ;LF AND NULL IS SENT ONLY TO TTY 1546 E9F0 A9 0D CRLF LDA #CR 1547 E9F2 20 BC E9 JSR OUTALL 1548 E9F5 20 42 E8 JSR TTYTST ;TTY OR KB ? 1549 E9F8 D0 29 BNE CR2J 1550 E9FA AD 13 A4 LDA OUTFLG ;LF ONLY TO TTY 1551 E9FD C9 54 CMP #'T' 1552 E9FF F0 22 BEQ CR2J 1553 EA01 C9 4B CMP #'K' 1554 EA03 F0 1E BEQ CR2J 1555 EA05 C9 50 CMP #'P' 1556 EA07 F0 1A BEQ CR2J 1557 EA09 A9 0A LDA #LF 1558 EA0B 20 BC E9 JSR OUTALL 1559 EA0E A9 FF LDA #NULLC 1560 EA10 4C BC E9 JMP OUTALL 1561 EA13 1562 EA13 ;CRLF TO TERMINAL (TTY OR D/P) ONLY 1563 EA13 48 CRLOW PHA ;SAVE A 1564 EA14 AD 13 A4 LDA OUTFLG 1565 EA17 48 PHA 1566 EA18 20 01 E9 JSR OUTLOW 1567 EA1B 20 F0 E9 JSR CRLF 1568 EA1E 68 PLA 1569 EA1F 8D 13 A4 STA OUTFLG 1570 EA22 68 PLA 1571 EA23 60 CR2J RTS 1572 EA24 1573 EA24 ;OUTPUT TO TTY IF SWITCH ON TTY & INFLG NOT L 1574 EA24 ;DONT CLR DISPLAY BUT CLEARS PNTRS FOR NEXT LINE 1575 EA24 ;IF PRNTR HAS PRINTED ON 21RST CHR DONT OUTPUT 1576 EA24 AD 12 A4 CRCK LDA INFLG ;NO IF "L" 1577 EA27 C9 4C CMP #'L' 1578 EA29 D0 01 BNE CRCK1 1579 EA2B 60 RTS 1580 EA2C 20 42 E8 CRCK1 JSR TTYTST ;CHECK IF TTY OR KB 1581 EA2F F0 E2 BEQ CRLOW ;BRNCH IF TTY 1582 EA31 ;IF PRINTR PTR=0 ,DO NOT CLR PRI 1583 EA31 AD 16 A4 LDA CURPOS 1584 EA34 F0 05 BEQ CRCK2 ;IF PTR=0 ,NO 1585 EA36 A9 0D LDA #CR 1586 EA38 20 00 F0 JSR OUTPRI 1587 EA3B A9 8D CRCK2 LDA #CR+$80 ; ONLY FOR TV 1588 EA3D 4C 02 EF JMP OUTDP1 1589 EA40 EA NOP 1590 EA41 EA NOP 1591 EA42 1592 EA42 ;WRITE A THEN X IN ASCII TO THE OUTPUT DEV 1593 EA42 20 46 EA WRAX JSR NUMA 1594 EA45 8A TXA 1595 EA46 1596 EA46 ;PRINT ONE BYTE=TWO ASCII CHARS TO OUTPUT DEVICE 1597 EA46 48 NUMA PHA 1598 EA47 4A LSR A 1599 EA48 4A LSR A 1600 EA49 4A LSR A 1601 EA4A 4A LSR A 1602 EA4B 20 51 EA JSR NOUT 1603 EA4E 68 PLA 1604 EA4F 29 0F AND #$F 1605 EA51 18 NOUT CLC 1606 EA52 69 30 ADC #'0' 1607 EA54 C9 3A CMP #'9'+1 1608 EA56 90 02 BCC LT10 1609 EA58 69 06 ADC #6 ;CARRY IS SET 1610 EA5A 4C BC E9 LT10 JMP OUTALL 1611 EA5D 1612 EA5D ;READ TWO CHR & PACK THEM INTO ONE BYTE 1613 EA5D ;PART OF ALTER MEMORY , / COMM 1614 EA5D 20 73 E9 RD2 JSR REDOUT 1615 EA60 C9 0D CMP #CR ;? 1616 EA62 F0 17 BEQ RSPAC 1617 EA64 C9 20 CMP #' ' ;FOR MEMORY ALTER 1618 EA66 F0 13 BEQ RSPAC 1619 EA68 C9 2E CMP #'.' ;TREAT "." AS 1620 EA6A D0 04 BNE RD1 1621 EA6C A9 20 LDA #' ' 1622 EA6E D0 0B BNE RSPAC 1623 EA70 20 84 EA RD1 JSR PACK 1624 EA73 B0 06 BCS RSPAC 1625 EA75 20 73 E9 JSR REDOUT 1626 EA78 4C 84 EA JMP PACK 1627 EA7B ;WAS SPACE OR 1628 EA7B 38 RSPAC SEC 1629 EA7C 60 RTS 1630 EA7D 1631 EA7D ;CONVERT ACC IN ASCII TO ACC IN HEX (4 MSB=0) 1632 EA7D 48 HEX PHA ;SAVE A 1633 EA7E A9 00 LDA #0 ;CLEAR STIY IF HEX 1634 EA80 8D 29 A4 STA STIY+2 ;BECAUSE ONLY ONCE 1635 EA83 68 PLA 1636 EA84 ;PACK TWO ASCII INTO ONE HEX (CALL SUBR TWO TIMES) 1637 EA84 ;RESULT IS GIVEN ON ACC WITH FIRST CHR INTO 4 MSB 1638 EA84 C9 30 PACK CMP #'0' ;< 30 ? 1639 EA86 90 F3 BCC RSPAC 1640 EA88 C9 47 CMP #'F'+1 ; > 47 ? 1641 EA8A B0 EF BCS RSPAC 1642 EA8C C9 3A CMP #'9'+1 ; < $10 1643 EA8E 90 06 BCC PAK1 1644 EA90 C9 40 CMP #'A'-1 ; > $10 ? 1645 EA92 90 E7 BCC RSPAC 1646 EA94 69 08 ADC #8 ;ADD 9 IF LETTER (C IS SET) 1647 EA96 2A PAK1 ROL A ;SHIFT A 4 TIMES 1648 EA97 2A ROL A 1649 EA98 2A ROL A 1650 EA99 2A ROL A 1651 EA9A 8E 2D A4 STX CPIY+3 ;SAVE X 1652 EA9D A2 04 LDX #4 1653 EA9F 2A PAK2 ROL A ;TRANSFER A TO STIY 1654 EAA0 2E 29 A4 ROL STIY+2 ; THRU CARRY 1655 EAA3 CA DEX 1656 EAA4 D0 F9 BNE PAK2 1657 EAA6 AE 2D A4 LDX CPIY+3 ;REST X 1658 EAA9 AD 29 A4 LDA STIY+2 1659 EAAC 18 CLC 1660 EAAD 60 RTS 1661 EAAE 1662 EAAE ;GET FOUR BYTE ADDR ,TAKE LAST FOUR CHR TO... 1663 EAAE ;CALCULATE ADDR .ALLOW DELETE ALSO 1664 EAAE 20 D8 E7 ADDIN JSR EQUAL 1665 EAB1 AD 15 A4 ADDNE LDA CURPO2 ;SAVE POSITION 1666 EAB4 48 PHA 1667 EAB5 A0 00 LDY #0 1668 EAB7 20 5F E9 ADDN1 JSR RDRUP 1669 EABA C9 0D CMP #CR 1670 EABC F0 09 BEQ ADDN2 1671 EABE C9 20 CMP #' ' 1672 EAC0 F0 05 BEQ ADDN2 1673 EAC2 C8 INY 1674 EAC3 C0 0B CPY #11 ;ALLOW 10 1675 EAC5 90 F0 BCC ADDN1 1676 EAC7 68 ADDN2 PLA 1677 EAC8 8D 2D A4 STA CPIY+3 ;SAVE 1678 EACB C0 00 CPY #0 ;IF FIRST CHR PUT DEFAULT VALUES 1679 EACD D0 0D BNE ADDN3 1680 EACF A9 02 LDA #$02 1681 EAD1 8D 1D A4 STA ADDR+1 ;DEFAULT OF 0200 1682 EAD4 8D 1E A4 STA CKSUM ;DEFAULT 1683 EAD7 8C 1C A4 STY ADDR 1684 EADA 18 CLC 1685 EADB 60 RTS 1686 EADC A2 00 ADDN3 LDX #0 1687 EADE 88 DEY ;Y-4 1688 EADF 88 DEY 1689 EAE0 88 DEY 1690 EAE1 88 DEY 1691 EAE2 10 13 BPL ADDN5 ;BRANCH IF > 4 CHR 1692 EAE4 98 TYA 1693 EAE5 49 FF EOR #$FF 1694 EAE7 A8 TAY ;# OF LEADING 0 1695 EAE8 A9 30 ADDN4 LDA #$30 1696 EAEA 9D 1C A4 STA ADDR,X 1697 EAED E8 INX 1698 EAEE 88 DEY 1699 EAEF 10 F7 BPL ADDN4 1700 EAF1 AC 2D A4 LDY CPIY+3 ;NOW THE CHR 1701 EAF4 4C FD EA JMP ADDN6 1702 EAF7 98 ADDN5 TYA ;PUT CHR 1703 EAF8 18 CLC 1704 EAF9 6D 2D A4 ADC CPIY+3 1705 EAFC A8 TAY 1706 EAFD B9 38 A4 ADDN6 LDA DIBUFF,Y ;FROM DISP BUFF 1707 EB00 9D 1C A4 STA ADDR,X 1708 EB03 C8 INY 1709 EB04 E8 INX 1710 EB05 E0 04 CPX #4 1711 EB07 D0 F4 BNE ADDN6 1712 EB09 A2 01 LDX #1 1713 EB0B A0 00 LDY #0 ;CNVRT CHR TO HEX 1714 EB0D B9 1C A4 ADDN7 LDA ADDR,Y 1715 EB10 20 7D EA JSR HEX 1716 EB13 B0 16 BCS ADDN8 1717 EB15 C8 INY 1718 EB16 B9 1C A4 LDA ADDR,Y 1719 EB19 C8 INY 1720 EB1A 20 84 EA JSR PACK ;PACK TWO CHRS INTO 1 BYTE 1721 EB1D B0 0C BCS ADDN8 ;BRCNH IF ERROR 1722 EB1F 9D 1C A4 STA ADDR,X 1723 EB22 CA DEX 1724 EB23 10 E8 BPL ADDN7 1725 EB25 E8 INX ;X=0 1726 EB26 8E 1E A4 STX CKSUM ;TO INDICATE WE GOT AN ADDR 1727 EB29 18 CLC ;NO INVALID CHARS 1728 EB2A 60 RTS 1729 EB2B 20 94 E3 ADDN8 JSR CKER00 ;OUTPUT ERROR MSG 1730 EB2E 20 24 EA JSR CRCK ; 1731 EB31 38 SEC ;SET CARRY FOR INVALID CHR 1732 EB32 60 RTS 1733 EB33 1734 EB33 ;MEMORY FAIL TO WRITE MSG & SPECIFIC ADDRESS 1735 EB33 20 24 EA MEMERR JSR CRCK 1736 EB36 20 CD E2 JSR NXTADD ;ADD Y TO ADDR+1,ADDR 1737 EB39 A0 31 LDY #M11-M1 ;PRINT "MEM FAIL" 1738 EB3B 20 AF E7 JSR KEP ;FAIL MSG 1739 EB3E 20 DB E2 JSR WRITAZ ;PRINT ADDR+1 , ADDR 1740 EB41 4C A1 E1 JMP COMIN 1741 EB44 1742 EB44 ;CLEAR DISPLAY & PRINTER POINTERS 1743 EB44 A9 00 CLR LDA #0 1744 EB46 8D 15 A4 STA CURPO2 ;DISP PNTR 1745 EB49 8D 16 A4 STA CURPOS ;PRINTR PNTR 1746 EB4C 60 RTS 1747 EB4D 1748 EB4D ;CLEAR CKSUM 1749 EB4D A9 00 CLRCK LDA #0 1750 EB4F 8D 1F A4 STA CKSUM+1 1751 EB52 8D 1E A4 STA CKSUM 1752 EB55 60 RTS 1753 EB56 1754 EB56 ;CODE FOR PAGE ZERO SIMULATION 1755 EB56 ;SUBR LDAY-SIMULATES LDA (N),Y INSTR WITHOUT PAG 0 1756 EB56 ;BY PUTTING INDIR ADDR INTO RAM & THEN EXEC LDA NM,Y 1757 EB56 A9 25 PCLLD LDA #SAVPC ;FOR DISASSEMBLER 1758 EB58 8C 2D A4 LDAY STY CPIY+3 ;SAVE Y 1759 EB5B A8 TAY 1760 EB5C B9 00 A4 LDA MONRAM,Y ;MONRAM=MONITOR RAM 1761 EB5F 8D 2B A4 STA LDIY+1 1762 EB62 B9 01 A4 LDA MONRAM+1,Y 1763 EB65 8D 2C A4 STA LDIY+2 1764 EB68 AC 2D A4 LDY CPIY+3 ;REST Y 1765 EB6B A9 B9 LDA #$B9 ;INST FOR LDA NM,Y 1766 EB6D 8D 2A A4 STA LDIY 1767 EB70 A9 60 LDA #$60 ;RTS 1768 EB72 8D 2D A4 STA LDIY+3 1769 EB75 4C 2A A4 JMP LDIY ;START EXECUTING LDA (),Y 1770 EB78 1771 EB78 ;SUBR STORE AT ADDR & CMP WITHOUT PAG 0 1772 EB78 ;REPLACES STA (ADDR),Y & CMP (ADDR),Y 1773 EB78 ;LOOK THAT ADDR & ADDR+1 ARE NOT ON PAG 0 1774 EB78 48 SADDR PHA 1775 EB79 AD 1C A4 LDA ADDR 1776 EB7C 8D 28 A4 STA STIY+1 1777 EB7F 8D 2B A4 STA CPIY+1 1778 EB82 AD 1D A4 LDA ADDR+1 1779 EB85 8D 29 A4 STA STIY+2 1780 EB88 8D 2C A4 STA CPIY+2 1781 EB8B A9 99 LDA #$99 ;STA INSTR 1782 EB8D 8D 27 A4 STA STIY 1783 EB90 A9 D9 LDA #$D9 ;CMP INSTR 1784 EB92 8D 2A A4 STA CPIY 1785 EB95 A9 60 LDA #$60 ;RTS 1786 EB97 8D 2D A4 STA LDIY+3 1787 EB9A 68 PLA 1788 EB9B 4C 27 A4 JMP STIY ;START EXECUTING STA (),Y 1789 EB9E 1790 EB9E ;PUSH X & Y WITHOUT CHANGING THE REGS 1791 EB9E 8D 2D A4 PHXY STA CPIY+3 ;SAVE ACC 1792 EBA1 98 TYA 1793 EBA2 48 PHA ;PUSH Y 1794 EBA3 8A TXA 1795 EBA4 48 PHA ;PUSH X 1796 EBA5 20 BA EB JSR SWSTAK ;SWAP X , Y WITH RTRN ADDR FROM S` 1797 EBA8 AD 2D A4 LDA CPIY+3 1798 EBAB 60 RTS 1799 EBAC 1800 EBAC ;PULL X & Y WITHOUT CHANGING ACC 1801 EBAC ;IT HAS TO BE CALLED BY JSR & NOT BY JMP INSTR 1802 EBAC ;SINCE IT SWAPS THE STACK 1803 EBAC 8D 2D A4 PLXY STA CPIY+3 1804 EBAF 20 BA EB JSR SWSTAK ;SWAP X , Y WITH RTRN ADDR FROM` 1805 EBB2 68 PLA 1806 EBB3 AA TAX ;PULL X 1807 EBB4 68 PLA 1808 EBB5 A8 TAY ;PULL Y 1809 EBB6 AD 2D A4 LDA CPIY+3 1810 EBB9 60 RTS 1811 EBBA 1812 EBBA ;SWAP STACK 1813 EBBA BA SWSTAK TSX 1814 EBBB A9 02 LDA #2 1815 EBBD 48 SWST1 PHA 1816 EBBE BD 06 01 LDA $0106,X ;GET PCH OR PCL 1817 EBC1 BC 04 01 LDY $0104,X ;GET Y OR X REGS 1818 EBC4 9D 04 01 STA $0104,X 1819 EBC7 98 TYA 1820 EBC8 9D 06 01 STA $0106,X 1821 EBCB CA DEX 1822 EBCC 68 PLA 1823 EBCD 38 SEC 1824 EBCE E9 01 SBC #1 1825 EBD0 D0 EB BNE SWST1 1826 EBD2 BD 08 01 LDA $0108,X ;RESTORE Y & X FROM STACK 1827 EBD5 A8 TAY 1828 EBD6 BD 07 01 LDA $0107,X 1829 EBD9 AA TAX 1830 EBDA 60 RTS 1831 EBDB 1832 EBDB ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1833 EBDB ;GET A CHAR FROM TTY SUBR INTO ACC ,SAVES X 1834 EBDB 8A GETTTY TXA ;SAVE X 1835 EBDC 48 PHA 1836 EBDD A2 07 LDX #$07 ;SET UP FOR 8 BIT CNT 1837 EBDF 8E 2A A4 STX CPIY ;CLR MSB 1838 EBE2 2C 00 A8 GET1 BIT DRB ;A^M , PB6->V 1839 EBE5 70 FB BVS GET1 ;WAIT FOR START BIT 1840 EBE7 20 0F EC JSR DELAY ;DELAY 1 BIT 1841 EBEA 20 23 EC JSR DEHALF ;DELAY 1/2 BIT TIME 1842 EBED AD 00 A8 GET3 LDA DRB ;GET 8 BITS 1843 EBF0 29 40 AND #$40 ;MASK OFF OTHER BITS,ONLY PB6 1844 EBF2 4E 2A A4 LSR CPIY ;SHIFT RIGHT CHARACTER 1845 EBF5 0D 2A A4 ORA CPIY 1846 EBF8 8D 2A A4 STA CPIY 1847 EBFB 20 0F EC JSR DELAY ;DELAY 1 BIT TIME 1848 EBFE CA DEX 1849 EBFF D0 EC BNE GET3 ;GET NEXT BIT 1850 EC01 20 0F EC JSR DELAY ;DO NOT CARE FOR PARITY BIT 1851 EC04 20 23 EC JSR DEHALF ;UNTIL WE GET BACK TO ONE AGAIN 1852 EC07 68 PLA ;RESTORE X 1853 EC08 AA TAX 1854 EC09 AD 2A A4 LDA CPIY 1855 EC0C 29 7F AND #$7F ;CLEAR PARITY BIT 1856 EC0E 60 RTS 1857 EC0F 1858 EC0F ;DELAY 1 BIT TIME AS GIVEN BY BAUD RATE 1859 EC0F AD 18 A4 DELAY LDA CNTL30 ;START TIMER T2 1860 EC12 8D 08 A8 STA T2L 1861 EC15 AD 17 A4 LDA CNTH30 1862 EC18 8D 09 A8 DE1 STA T2H 1863 EC1B AD 0D A8 DE2 LDA IFR ;GET INT FLG FOR T2 1864 EC1E 29 20 AND #MT2 1865 EC20 F0 F9 BEQ DE2 ;TIME OUT ? 1866 EC22 60 RTS 1867 EC23 1868 EC23 ;DELAY HALF BIT TIME 1869 EC23 ;TOTAL TIME DIVIDED BY 2 1870 EC23 AD 17 A4 DEHALF LDA CNTH30 1871 EC26 4A LSR A ;LSB TO CARRY 1872 EC27 AD 18 A4 LDA CNTL30 1873 EC2A 6A ROR A ;SHIFT WITH CARRY 1874 EC2B 8D 08 A8 STA T2L 1875 EC2E AD 17 A4 LDA CNTH30 1876 EC31 4A LSR A 1877 EC32 8D 09 A8 STA T2H 1878 EC35 4C 1B EC JMP DE2 1879 EC38 1880 EC38 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1881 EC38 A9 00 GETKD0 LDA #0 1882 EC3A 8D 77 A4 STA IDOT ;GO ANOTHER 90 DOTS 1883 EC3D 20 50 F0 JSR IPO0 ;OUTPUT 90 DOTS TO PRI (ZEROS) 1884 EC40 1885 EC40 ;GET A CHAR FROM KB SUBROUTINE 1886 EC40 ;FROM KB Y=ROW ,STBKEY=COLUMNS (STROBE) 1887 EC40 ;X=CTRL OR SHIFT ,OTHERWISE X=0 1888 EC40 20 EF EC GETKEY JSR ROONEK ;WAIT IF LAST KEY STILL DOWN 1889 EC43 20 2A ED GETKY JSR DEBKEY ;DEBOUNCE KEY (5 MSEC) 1890 EC46 ;CTRL OR SHIFT ? 1891 EC46 A9 8F LDA #$8F ;CHCK CLMN 5,6,7 1892 EC48 8D 80 A4 STA DRA2 1893 EC4B AD 82 A4 LDA DRB2 ;CHCK ROW 1 1894 EC4E 4A LSR A 1895 EC4F B0 20 BCS GETK1 ;IF=1 ,NO CTRL OR SHIFT 1896 EC51 A2 03 LDX #3 ;CLMN 5,6,7 (CNTRL,SHIFTL,SHIFTR) 1897 EC53 A9 7F LDA #$7F ;CTRL OR SHIFT ,SO WHICH ONE? 1898 EC55 38 GETK0 SEC 1899 EC56 6A ROR A 1900 EC57 48 PHA 1901 EC58 20 0B ED JSR ONEK2 ;LETS GET CTRL OR SHIFT INTO X 1902 EC5B AD 82 A4 LDA DRB2 1903 EC5E 4A LSR A ;ONLY ROW 1 1904 EC5F 90 06 BCC GETK00 ;GOT YOU 1905 EC61 68 PLA 1906 EC62 CA DEX 1907 EC63 D0 F0 BNE GETK0 1908 EC65 F0 DC BEQ GETKY ;THERE IS A MISTAKE CHECK AGAIN 1909 EC67 68 GETK00 PLA ;NOW GET STBKEY INTO X 1910 EC68 AD 2B A4 LDA STBKEY ;CLMN INTO X 1911 EC6B 49 FF EOR #$FF ;COMPLEMENT BECAUSE STRBS ARE 0 1912 EC6D AA TAX ;CTRL OR SHIFT TO X 1913 EC6E EE 2A A4 INC KMASK ;SET MSK=$01 1914 EC71 ;NOW GET ANY KEY 1915 EC71 20 05 ED GETK1 JSR ONEKEY ;GET A KEY 1916 EC74 88 DEY ;CHK THE ROW (1-8) 1917 EC75 D0 09 BNE GETK1B ;CHK IF CTRL OR SHIFT 1918 EC77 AD 2B A4 LDA STBKEY ;WERE ENTERED AT THE LAST MOMENT 1919 EC7A C9 F7 CMP #$F7 ;IF CLMN 5,6,7,8 TO IT AGAIN 1920 EC7C B0 04 BCS GETK2 1921 EC7E 90 C3 BCC GETKY ;SEND IT TO GET CTRL OR SHIFT 1922 EC80 30 C1 GETK1B BMI GETKY ;NO KEY ,CLEAR MSK 1923 EC82 ;WE HAVE A KEY ,DECODE IT 1924 EC82 20 2C ED GETK2 JSR DEBK1 ;DEBOUNCE KEY (5 MSEC) 1925 EC85 98 TYA ;MULT BY 8 1926 EC86 0A ASL A 1927 EC87 0A ASL A 1928 EC88 0A ASL A 1929 EC89 A8 TAY ;NOW Y HAS ROW ADDR FROM ROW 1 1930 EC8A AD 2B A4 LDA STBKEY ;ADD COLUMN TO Y 1931 EC8D 4A GETK3 LSR A 1932 EC8E 90 03 BCC GETK4 1933 EC90 C8 INY 1934 EC91 D0 FA BNE GETK3 1935 EC93 B9 21 F4 GETK4 LDA ROW1,Y ;GET THE CHR 1936 EC96 48 PHA 1937 EC97 8A TXA ;SEE IF CTRL OR SHIFT WAS USED 1938 EC98 F0 24 BEQ GETK7 ;BRCH IF NO CTRL OR SHIFT 1939 EC9A 29 10 AND #$10 ;CTRL ? 1940 EC9C F0 06 BEQ GETK5 ;NO ,GO GETKS 1941 EC9E 68 PLA 1942 EC9F 29 3F AND #$3F ;MSK OFF 2 MSB FOR CONTROL 1943 ECA1 4C BF EC JMP GETK8 ;EXIT 1944 ECA4 68 GETK5 PLA 1945 ECA5 48 PHA ;SAVE IT 1946 ECA6 29 40 AND #$40 ;IF ALPHA CHARS DO NOT SHIFT 1947 ECA8 D0 14 BNE GETK7 1948 ECAA 68 PLA 1949 ECAB 48 PHA 1950 ECAC 29 0F AND #$0F ;ONLY LSB 1951 ECAE F0 0E BEQ GETK7 ;DO NOT INTERCHANGE OR 0 1952 ECB0 C9 0C CMP #$0C ;ACC>=$0C ? 1953 ECB2 B0 05 BCS GETK6 ;YES ACC>=$0C 1954 ECB4 68 PLA ;NO, ACC<$0C 1955 ECB5 29 EF AND #$EF ;STRIP OFF BIT 4 1956 ECB7 D0 06 BNE GETK8 ;EXIT 1957 ECB9 68 GETK6 PLA ;ACC>=$0C 1958 ECBA 09 10 ORA #$10 ;BIT 4= 1 1959 ECBC D0 01 BNE GETK8 ;EXIT 1960 ECBE 68 GETK7 PLA 1961 ECBF ;CHECK FOR "ADV PAP","PRI LINE", OR "TOGL PRIFLG" 1962 ECBF ;IN THIS WAY WE DONT HAVE TO CHCK FOR THIS COMM 1963 ECBF C9 60 GETK8 CMP #$60 ;ADV PAPER COMM 1964 ECC1 D0 06 BNE GETK11 1965 ECC3 E0 00 CPX #0 ;IF SHIFT IS NOT ADV PAPER 1966 ECC5 F0 25 BEQ GETK10 ;NO SHIFT ,SO ADVPAPER 1967 ECC7 29 4F AND #$4F ;CONVRT TO "@" 1968 ECC9 C9 1C GETK11 CMP #$1C ;SEE IF TOGGL PRIFLG (CONTRL PRI) 1969 ECCB D0 14 BNE GETK13 1970 ECCD 20 E1 E6 JSR PRITR ;GO TOGGLE FLG 1971 ECD0 A0 01 LDY #1 ;GET THE PTRS BACK 3 SPACES 1972 ECD2 B9 15 A4 GETK12 LDA CURPO2,Y 1973 ECD5 38 SEC 1974 ECD6 E9 03 SBC #3 ;BECAUSE "ON ,OFF" MSGS 1975 ECD8 99 15 A4 STA CURPO2,Y 1976 ECDB 88 DEY 1977 ECDC 10 F4 BPL GETK12 1978 ECDE 4C 40 EC JMP GETKEY 1979 ECE1 C9 5C GETK13 CMP #BACKSLASH ;PRINT LINE COMMAND 1980 ECE3 D0 06 BNE GETK14 1981 ECE5 20 4A F0 JSR IPS0 ;PRINT WHATEVER IS IN BUFFER 1982 ECE8 4C 40 EC JMP GETKEY 1983 ECEB 60 GETK14 RTS 1984 ECEC 4C 38 EC GETK10 JMP GETKD0 1985 ECEF 1986 ECEF ;WAIT IF LAST KEY STILL DOWN (ROLLOVER) 1987 ECEF AD 82 A4 ROONEK LDA DRB2 ;SEE IF KEY STILL DOWN 1988 ECF2 C9 FF CMP #$FF 1989 ECF4 F0 0A BEQ ROO1 ;NO KEY AT ALL, CLR ROLLFL 1990 ECF6 0D 7F A4 ORA ROLLFL ;ACCEPT ONLY LAST KEY 1991 ECF9 49 FF EOR #$FF ;STRBS ARE ZEROS TO INVER 1992 ECFB D0 F2 BNE ROONEK 1993 ECFD 20 2A ED JSR DEBKEY ;CLR KMASK & DEBOUNCE RELEASE 1994 ED00 A9 00 ROO1 LDA #0 ;CLR KMASK 1995 ED02 8D 2A A4 STA KMASK 1996 ED05 ;GO THRU KB ONCE AND RTN ,IF ANY 1997 ED05 ;KEY Y=ROW (1-8) & STBKEY=CLMN 1998 ED05 ;IF NO KEY Y=0 ,STBKEY=$FF 1999 ED05 A9 7F ONEKEY LDA #$7F ;FIRST STROBE TO MSB 2000 ED07 D0 02 BNE ONEK2 ;START AT ONEK2 2001 ED09 38 ONEK1 SEC ;ONLY ONE PULSE (ZERO) 2002 ED0A 6A ROR A ;SHIFT TO RIGHT 2003 ED0B 8D 80 A4 ONEK2 STA DRA2 ;OUTPUT CLMN STROBE 2004 ED0E 8D 2B A4 STA STBKEY ;SAVE IT 2005 ED11 A0 08 LDY #8 ;CHECK 8 ROWS 2006 ED13 AD 82 A4 LDA DRB2 ;ANY KEY ? 2007 ED16 0D 2A A4 ORA KMASK ;DISABLE ROW 1 IF CTRL OR SHIFT 2008 ED19 8D 7F A4 STA ROLLFL ;SAVE WHICH KEY IT WAS 2009 ED1C 0A ONEK3 ASL A 2010 ED1D 90 0A BCC ONEK4 ;JUMP IF KEY (ZERO) 2011 ED1F 88 DEY 2012 ED20 D0 FA BNE ONEK3 2013 ED22 AD 2B A4 LDA STBKEY 2014 ED25 C9 FF CMP #$FF ;LAST CLMN ? 2015 ED27 D0 E0 BNE ONEK1 ;NO ,DO NEXT CLMN 2016 ED29 60 ONEK4 RTS 2017 ED2A 2018 ED2A A2 00 DEBKEY LDX #0 ;CLEAR CNTRL OR SHIFT 2019 ED2C A9 00 DEBK1 LDA #0 ;CLR KMASK 2020 ED2E 8D 2A A4 STA KMASK 2021 ED31 A9 88 LDA #DEBTIM ;DEBOUNCE TIME FOR KEYBOARD 2022 ED33 8D 08 A8 STA T2L 2023 ED36 A9 13 LDA #DEBTIM/256 2024 ED38 4C 18 EC JMP DE1 ;WAIT FOR 5 MSEC 2025 ED3B 2026 ED3B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2027 ED3B ;GET A CHAR FROM TAPE SUBROUTINE 2028 ED3B ;A BUFFER IS USED TO GET BLOCKS OF DATA 2029 ED3B ;FROM TAPE ,EXCEPT WHEN FORMAT EQUAL TO 2030 ED3B ;KIM-1 (THE WHOLE FILE IS LOADED AT ONE TIME) 2031 ED3B 20 9E EB TIBYTE JSR PHXY ;PUSH X 2032 ED3E AE 36 A4 LDX TAPTR ;POINTER FOR BUFFER 2033 ED41 E0 50 CPX #80 ;IS BUFFER EMPTY ? 2034 ED43 D0 03 BNE TIB1 2035 ED45 20 53 ED JSR TIBY1 ;LOAD ANOTHER BLOCK 2036 ED48 BD 16 01 TIB1 LDA TABUFF,X 2037 ED4B E8 INX 2038 ED4C 8E 36 A4 STX TAPTR 2039 ED4F 20 AC EB JSR PLXY ;PULL X 2040 ED52 60 RTS 2041 ED53 ;LOAD A BLOCK FROM TAPE INTO BUFFER 2042 ED53 20 EA ED TIBY1 JSR TAISET ;SET TAPE FOR INPUT 2043 ED56 20 29 EE TIBY3 JSR GETTAP ;GET A CHAR FROM TAPE 2044 ED59 C9 23 CMP #'#' ;CHECK FIRST CHR FOR 2045 ED5B F0 06 BEQ TIBY4 ;START OF BLOCK 2046 ED5D C9 16 CMP #$16 ;IF NOT # SHOULD BE SYN 2047 ED5F D0 F2 BNE TIBY1 2048 ED61 F0 F3 BEQ TIBY3 2049 ED63 A2 00 TIBY4 LDX #0 2050 ED65 20 29 EE TIBY5 JSR GETTAP ;NOW LOAD INTO BUFFER 2051 ED68 9D 16 01 STA TABUFF,X 2052 ED6B E8 INX 2053 ED6C E0 52 CPX #82 2054 ED6E D0 F5 BNE TIBY5 2055 ED70 AD 00 A8 LDA DRB 2056 ED73 29 CF AND #$CF 2057 ED75 8D 00 A8 STA DRB ;TURN OFF TAPES 2058 ED78 58 CLI ;ENABL INTERR 2059 ED79 20 BD ED JSR ADDBK1 ;DISPLAY BLK COUNT 2060 ED7C A2 00 LDX #0 ;TO CLEAR PTR IN TIBYTE 2061 ED7E AD 15 01 LDA BLK ;CHECK THE BLOCK COUNT 2062 ED81 F0 05 BEQ TIBY5A ;IF FIRST BLK ,DO NOT CMP 2063 ED83 DD 16 01 CMP TABUFF,X 2064 ED86 D0 28 BNE TIBY7 ;BRANCH IF WE MISSED ONE BLOCK 2065 ED88 E8 TIBY5A INX 2066 ED89 8E 36 A4 STX TAPTR 2067 ED8C EE 15 01 INC BLK ;INCR BLK CONT 2068 ED8F AD 67 01 LDA TABUFF+81 ;STORE THIS BLK CKSUM 2069 ED92 48 PHA 2070 ED93 AD 66 01 LDA TABUFF+80 2071 ED96 48 PHA 2072 ED97 CE 12 A4 DEC INFLG ;SET INFLG DIFF FROM OUTFLG 2073 ED9A 20 E7 F1 JSR BKCKSM ;COMPUT BLK CKSUM FOR THIS BLK 2074 ED9D 68 PLA 2075 ED9E CD 66 01 CMP TABUFF+80 ;DO THEY AGREE ? 2076 EDA1 D0 0C BNE TIBY6 2077 EDA3 68 PLA 2078 EDA4 CD 67 01 CMP TABUFF+81 2079 EDA7 D0 07 BNE TIBY7 2080 EDA9 EE 12 A4 INC INFLG ;RESTORE INPUT DEVICE 2081 EDAC A2 01 LDX #1 ;TO GET FIRST CHR IN TIBYTE 2082 EDAE 60 RTS 2083 EDAF 68 TIBY6 PLA ;RESTORE STACK PTR 2084 EDB0 68 TIBY7 PLA 2085 EDB1 68 PLA 2086 EDB2 68 PLA 2087 EDB3 68 PLA 2088 EDB4 20 8E E3 JSR CKER0 2089 EDB7 4C A1 E1 JMP COMIN 2090 EDBA 2091 EDBA ;ADD 1 TO BLK COUNT AND OUTPUT IT 2092 EDBA EE 15 01 ADDBLK INC BLK ;INCR BLK CNT 2093 EDBD EE 11 A4 ADDBK1 INC PRIFLG ;SO DONT OUTPUT TO PRINTR 2094 EDC0 A9 12 LDA #18 ;ONLY OUTPUT IN THIS POSITION 2095 EDC2 8D 15 A4 STA CURPO2 2096 EDC5 AD 4A A4 LDA DIBUFF+18 ;SAVE DISBUF (FOR EDIT) 2097 EDC8 48 PHA 2098 EDC9 AD 4B A4 LDA DIBUFF+19 2099 EDCC 48 PHA 2100 EDCD AE 13 A4 LDX OUTFLG ;SAVE OUTFLG 2101 EDD0 A9 0D LDA #CR 2102 EDD2 8D 13 A4 STA OUTFLG ;TO OUTPUT TO TERMINAL 2103 EDD5 AD 16 01 LDA BLK+1 ;BLK CNT COMING FROM TAPE 2104 EDD8 20 46 EA JSR NUMA ;OUTPUT IN ASCII 2105 EDDB 8E 13 A4 STX OUTFLG ;RESTORE OUTFLG 2106 EDDE 68 PLA 2107 EDDF 8D 4B A4 STA DIBUFF+19 2108 EDE2 68 PLA 2109 EDE3 8D 4A A4 STA DIBUFF+18 2110 EDE6 CE 11 A4 DEC PRIFLG ;RESTORE PRI FLG 2111 EDE9 60 RTS 2112 EDEA 2113 EDEA ;SET TAPE (1 OR 2) FOR INPUT 2114 EDEA A9 37 TAISET LDA #$37 ;SET PB7 FOR INPUT 2115 EDEC 8D 02 A8 STA DDRB 2116 EDEF AD 34 A4 LDA TAPIN ;INPUT FLG (TAP 1=2 OR TAP 2=1) 2117 EDF2 20 1C EE JSR TIOSET ;RESET PB4 OR PB5 2118 EDF5 A9 EE LDA #MOFF+DATIN ;SET CA2=1 (DATA IN) 2119 EDF7 8D 0C A8 STA PCR 2120 EDFA A9 FF LDA #$FF ;PREPARE T2 2121 EDFC 8D 08 A8 STA T2L ;LACTH 2122 EDFF ;CHCK BIT BY BIT UNTIL $16 2123 EDFF 20 3B EE SYNC JSR RDBIT ;GET A BIT IN MSB 2124 EE02 4E 2A A4 LSR CPIY ;MAKE ROOM FOR BIT 2125 EE05 0D 2A A4 ORA CPIY ;PUT BIT INTO MSB 2126 EE08 8D 2A A4 STA CPIY 2127 EE0B C9 16 CMP #$16 ;SYN CHAR ? 2128 EE0D D0 F0 BNE SYNC 2129 EE0F A2 05 LDX #$05 ;TEST FOR 5 SYN CHARS 2130 EE11 20 29 EE SYNC1 JSR GETTAP 2131 EE14 C9 16 CMP #$16 2132 EE16 D0 E7 BNE SYNC ;IF NOT 2 CHAR RE-SYNC 2133 EE18 CA DEX 2134 EE19 D0 F6 BNE SYNC1 2135 EE1B 60 RTS 2136 EE1C 2137 EE1C ;SET PB4 OR PB5 OFF 2138 EE1C ;USED BY IN/OUT SET UPS 2139 EE1C D0 04 TIOSET BNE TIOS1 ;BRCH IF TAP1 2140 EE1E A9 14 LDA #$14 ;SET TAP 2 OFF (PB5=0) 2141 EE20 D0 02 BNE TIOS2 2142 EE22 A9 24 TIOS1 LDA #$24 ;SET TAP 1 OFF (PB4=0) 2143 EE24 8D 00 A8 TIOS2 STA DRB 2144 EE27 78 SEI ;DISABLE INTERR WHILE TAP 2145 EE28 60 RTS 2146 EE29 2147 EE29 ;GET 1 CHAR FROM TAPE AND RETURN 2148 EE29 ;WITH CHR IN ACC, USE CPIY TO ASM CHR ,USES Y 2149 EE29 A0 08 GETTAP LDY #$08 ;READ 8 BITS 2150 EE2B 20 3B EE GETA1 JSR RDBIT ;GET NEXT DATA BIT 2151 EE2E 4E 2A A4 LSR CPIY ;MAKE ROOM FOR MSB 2152 EE31 0D 2A A4 ORA CPIY ;OR IN SIGN BIT 2153 EE34 8D 2A A4 STA CPIY ;REPLACE CHAR 2154 EE37 88 DEY 2155 EE38 D0 F1 BNE GETA1 2156 EE3A 60 RTS 2157 EE3B ;GET ONE BIT FROM TAPE AND 2158 EE3B ;RETURN IT IN SIGN OF A (MSB) 2159 EE3B AD 08 A4 RDBIT LDA TSPEED ;ARE WE IN C7 OR 5B,5A FREQUENC` 2160 EE3E 30 27 BMI RDBIT4 ;JUMP TO C7 FREQ FORMAT 2161 EE40 20 75 EE JSR CKFREQ ;START BIT IN HIGH FREQ 2162 EE43 20 75 EE RDBIT1 JSR CKFREQ ;HIGH TO LOW FREQ TRANS 2163 EE46 B0 FB BCS RDBIT1 2164 EE48 AD 96 A4 LDA DIV64 ;GET HIGH FREQ TIMING 2165 EE4B 48 PHA 2166 EE4C A9 FF LDA #$FF ;SET UP TIMER 2167 EE4E 8D 96 A4 STA DIV64 2168 EE51 20 75 EE RDBIT2 JSR CKFREQ ;LOW TO HIGH FREQ TRANS 2169 EE54 90 FB BCC RDBIT2 ;WAIT TILL FREQ IS HIGH 2170 EE56 68 PLA 2171 EE57 38 SEC 2172 EE58 ED 96 A4 SBC DIV64 ;(256-T1) - (256-T2) =T2-T1 2173 EE5B 48 PHA ;LOW FREQ TIME-HIGH FREQ TIME 2174 EE5C A9 FF LDA #$FF 2175 EE5E 8D 96 A4 STA DIV64 ;SET UP TIMER 2176 EE61 68 PLA 2177 EE62 49 FF EOR #$FF 2178 EE64 29 80 AND #$80 2179 EE66 60 RTS 2180 EE67 ;EACH BIT STARTS WITH HALF PULSE OF 2400 & THEN 2181 EE67 ;3 HALF PULSES OF 1200 HZ FOR 0 ,3 PUSLES OF 2400 FOR 1 2182 EE67 ;THE READING IS MADE ON THE FOURTH 1/2 PULSE ,WHERE 2183 EE67 ;THE SIGNAL HAS STABILIZED 2184 EE67 20 75 EE RDBIT4 JSR CKFREQ ;SEE WHICH FREQ 2185 EE6A 90 FB BCC RDBIT4 2186 EE6C 20 75 EE JSR CKFREQ 2187 EE6F 20 75 EE JSR CKFREQ 2188 EE72 4C B5 FF JMP PATC24 ;NOW READ THE BIT 2189 EE75 2190 EE75 2C 00 A8 CKFREQ BIT DRB ;ARE WE HIGH OR LOW ? 2191 EE78 30 27 BMI CKF4 2192 EE7A 2C 00 A8 CKF1 BIT DRB ;WAIT TILL HIGH 2193 EE7D 10 FB BPL CKF1 2194 EE7F 65 00 ADC $00 ;EQUALIZER 2195 EE81 AD 09 A8 CKF2 LDA T2H ;SAVE CNTR 2196 EE84 48 PHA 2197 EE85 AD 08 A8 LDA T2L 2198 EE88 48 PHA 2199 EE89 A9 FF LDA #$FF 2200 EE8B 8D 09 A8 STA T2H ;START CNTR 2201 EE8E AD 08 A4 LDA TSPEED 2202 EE91 30 06 BMI CKF3 ;SUPER SPEED ? 2203 EE93 68 PLA 2204 EE94 CD 08 A4 CMP TSPEED ;HIGH OR LOW FREC 2205 EE97 68 PLA ;C=1 IF HIGH ,C=0 IF LOW 2206 EE98 60 RTS 2207 EE99 68 CKF3 PLA 2208 EE9A CD 08 A4 CMP TSPEED ;CENTER FREQ 2209 EE9D 68 CKF3A PLA 2210 EE9E E9 FE SBC #$FE 2211 EEA0 60 RTS 2212 EEA1 2C 00 A8 CKF4 BIT DRB ;WAIT TILL LOW 2213 EEA4 30 FB BMI CKF4 2214 EEA6 10 D9 BPL CKF2 ;GO GET TIMING 2215 EEA8 2216 EEA8 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2217 EEA8 ;OUTPUT ACC TO TTY SUBROUTINE 2218 EEA8 ;X,Y ARE PRESERVED 2219 EEA8 48 OUTTTY PHA ;SAVE A 2220 EEA9 20 9E EB JSR PHXY ;PUSH X 2221 EEAC 8D 27 A4 STA STIY ;PUT CHAR HERE 2222 EEAF 20 0F EC JSR DELAY ;STOP BIT FROM LAST CHAR 2223 EEB2 AD 00 A8 LDA DRB 2224 EEB5 29 FB AND #$FB ;START BIT PB2=0 2225 EEB7 8D 00 A8 STA DRB ;TTO=PB2 2226 EEBA 8D 28 A4 STA STIY+1 ;SAVE THIS PATTERN 2227 EEBD 20 0F EC JSR DELAY 2228 EEC0 A2 08 LDX #$08 ;8 BITS 2229 EEC2 2E 27 A4 ROL STIY ;GET FIRST LSB INTO BIT 2 2230 EEC5 2E 27 A4 ROL STIY 2231 EEC8 2E 27 A4 ROL STIY 2232 EECB 6E 27 A4 OUTT1 ROR STIY 2233 EECE AD 27 A4 LDA STIY 2234 EED1 29 04 AND #$04 ;GET ONLY BIT 2 FOR PB2 2235 EED3 0D 28 A4 ORA STIY+1 ;PUT BIT INTO PATTERN 2236 EED6 8D 00 A8 STA DRB ;NOW TO TTY 2237 EED9 08 PHP ;PRESERVE CARRY FOR ROTATE 2238 EEDA 20 0F EC JSR DELAY 2239 EEDD 28 PLP 2240 EEDE CA DEX 2241 EEDF D0 EA BNE OUTT1 2242 EEE1 A9 04 LDA #$04 ;STOP BIT 2243 EEE3 0D 28 A4 ORA STIY+1 2244 EEE6 8D 00 A8 STA DRB 2245 EEE9 20 0F EC JSR DELAY ;STOP BIT 2246 EEEC 20 AC EB JSR PLXY ;PULL X 2247 EEEF 68 PLA 2248 EEF0 C9 0A CMP #LF 2249 EEF2 F0 07 BEQ OUTT2 2250 EEF4 C9 FF CMP #NULLC 2251 EEF6 F0 03 BEQ OUTT2 2252 EEF8 4C 05 EF JMP OUTDIS ;USE THAT BUFF 2253 EEFB 60 OUTT2 RTS 2254 EEFC 2255 EEFC ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2256 EEFC ;OUTPUT A CHR TO D/P SUBR (SINGLE ENTRY FOR BOTH SUBR) 2257 EEFC ;IF CHAR= CLEAR DISPLAY & PRINTER 2258 EEFC 20 00 F0 OUTDP JSR OUTPRI ;FIRST TO PRI THEN TO DISP 2259 EEFF EA NOP 2260 EF00 EA NOP 2261 EF01 EA NOP 2262 EF02 6C 06 A4 OUTDP1 JMP (DILINK) ;HERE HE COULD ECHO SOMEWHERE ELSE` 2263 EF05 2264 EF05 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2265 EF05 ;OUTPUT ACC TO DISPLAY SUBROUTINE 2266 EF05 ;IF SIGN BIT (MSB)=1 DISP DO NOT CLR TO THE RIGHT 2267 EF05 48 OUTDIS PHA ;SAVE A 2268 EF06 20 9E EB JSR PHXY ;PUSH X 2269 EF09 C9 0D CMP #CR ; ? 2270 EF0B D0 07 BNE OUTD1 2271 EF0D A2 00 LDX #0 ;YES 2272 EF0F 8E 15 A4 STX CURPO2 ;CLEAR DISP POINTER 2273 EF12 F0 42 BEQ OUTD5 ;GO CLEAR DISP 2274 EF14 4C 9C FE OUTD1 JMP PATCH4 2275 EF17 E0 3C OUTD1A CPX #60 ;LAST CHAR FOR DISP? 2276 EF19 90 05 BCC OUTD2 2277 EF1B 20 AC EB JSR PLXY ;GO BACK 2278 EF1E 68 PLA ;DO NOT STORE 2279 EF1F 60 RTS 2280 EF20 9D 38 A4 OUTD2 STA DIBUFF,X ;PUT CHAR IN BUFF 2281 EF23 EE 15 A4 INC CURPO2 ;INC POINTER 2282 EF26 E0 14 CPX #20 ;DISPLAY FULL? 2283 EF28 90 1E BCC OUTD4 2284 EF2A 20 2F EF JSR OUTD2A ;THIS WAY SCROLL IS A SUBR 2285 EF2D 30 47 BMI OUTD7 ;EXIT DISP 2286 EF2F ;YES, SCROLL CHARS TO THE LEFT 2287 EF2F 8A OUTD2A TXA ;X---> Y 2288 EF30 A8 TAY 2289 EF31 A2 13 LDX #19 ;ADDR FOR DISP DO NOT 2290 EF33 8E 27 A4 OUTD3 STX STIY ;DECREM IN BINARY 2291 EF36 B9 38 A4 LDA DIBUFF,Y ;FROM BUFFER TO DISP 2292 EF39 09 80 ORA #$80 ;NO CURSOR 2293 EF3B 20 7B EF JSR OUTDD1 ;CONVERT X INTO REAL ADDR 2294 EF3E 88 DEY 2295 EF3F CE 27 A4 DEC STIY 2296 EF42 AE 27 A4 LDX STIY 2297 EF45 10 EC BPL OUTD3 ;AGAIN UNTIL WHOLE DISP 2298 EF47 60 RTS 2299 EF48 48 OUTD4 PHA 2300 EF49 09 80 ORA #$80 ;NO CURSOR 2301 EF4B 20 7B EF JSR OUTDD1 ;X=<$19 ,CONVRT TO REAL ADDR 2302 EF4E 68 PLA 2303 EF4F 29 80 AND #$80 ;IF MSB=0 CLEAR REST OF DISPLAY 2304 EF51 D0 23 BNE OUTD7 2305 EF53 AE 15 A4 LDX CURPO2 2306 EF56 ;CLEAR DISP TO THE RIGHT 2307 EF56 E0 14 OUTD5 CPX #20 2308 EF58 B0 1C BCS OUTD7 2309 EF5A 8E 27 A4 STX STIY 2310 EF5D A9 A0 LDA #' '+$80 ; 2311 EF5F 20 7B EF JSR OUTDD1 ;CONVRT TO REAL ADDR 2312 EF62 EE 27 A4 INC STIY 2313 EF65 AE 27 A4 LDX STIY 2314 EF68 D0 EC BNE OUTD5 ;GO NEXT 2315 EF6A 4C 76 EF JMP OUTD7 2316 EF6D EA NOP 2317 EF6E EA NOP 2318 EF6F EA NOP 2319 EF70 EA NOP 2320 EF71 EA NOP 2321 EF72 EA NOP 2322 EF73 EA NOP 2323 EF74 EA NOP 2324 EF75 EA NOP 2325 EF76 20 AC EB OUTD7 JSR PLXY ;REST ,SO PRINTR INDEPEN 2326 EF79 68 PLA 2327 EF7A 60 RTS 2328 EF7B 2329 EF7B ;CONVERT X INTO REAL ADDR FOR DISPLAY 2330 EF7B ;AND OUTPUT IT PB=DATA ; PA=W,CE ,A0 A1 (6520) 2331 EF7B 48 OUTDD1 PHA ;SAVE DATA 2332 EF7C 8A TXA 2333 EF7D 48 PHA ;SAVE X 2334 EF7E 4A LSR A ;DIVIDE X BY 4 2335 EF7F 4A LSR A ;TO GET CHIP SELECT 2336 EF80 AA TAX ;BACK TO X 2337 EF81 A9 04 LDA #4 ;FIRST CHIP SELECT 2338 EF83 E0 00 CPX #0 ;FIRST CHIP ? 2339 EF85 F0 04 BEQ OUTDD3 2340 EF87 0A OUTDD2 ASL A 2341 EF88 CA DEX 2342 EF89 D0 FC BNE OUTDD2 ;BACK TILL RIGH CS 2343 EF8B 8D 28 A4 OUTDD3 STA STIY+1 ;SAVE CS TEMPORARILY 2344 EF8E 68 PLA ;GET X AGAIN FOR CHAR 2345 EF8F 29 03 AND #$03 ;IN THAT CHIP 2346 EF91 0D 28 A4 ORA STIY+1 ;OR IN CS AND CHAR 2347 EF94 ;STORE ADDR AND DATA INTO DISPL 2348 EF94 49 FF EOR #$FF ;W=1 , CE=0 & A1,A0 2349 EF96 8D 00 AC STA RA 2350 EF99 AA TAX ;SAVE A IN X 2351 EF9A 68 PLA ;GET DATA 2352 EF9B 48 PHA 2353 EF9C 8D 02 AC STA RB 2354 EF9F 8A TXA 2355 EFA0 49 80 EOR #$80 ;SET W=0 2356 EFA2 8D 00 AC STA RA 2357 EFA5 EA NOP 2358 EFA6 09 7C ORA #$7C ;SET CE=1 2359 EFA8 8D 00 AC STA RA 2360 EFAB A9 FF LDA #$FF ;SET W=1 2361 EFAD 8D 00 AC STA RA 2362 EFB0 68 PLA ;RETURN DATA 2363 EFB1 60 RTS 2364 EFB2 2365 EFF9 *=$EFF9 2366 EFF9 EA .DB $EA 2367 F000 *=$F000 2368 F000 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2369 F000 ;OUTPUT ACC TO PRINTER SUBROUTINE 2370 F000 ;PRINTS ON 21RST CHAR OR WHEN 2371 F000 ;IT WILL PUT IT ON BUBFFER BUT WONT PRINT IF 2372 F000 ;PRIFLG=0 2373 F000 48 OUTPRI PHA ;SAVE CHR TO BE OUTPUT 2374 F001 20 9E EB JSR PHXY ;SAVE X 2375 F004 C9 0D CMP #CR ;SEE IF CR 2376 F006 F0 07 BEQ OUT01 ;YES SO PRINT THE BUFF 2377 F008 AE 16 A4 LDX CURPOS ;PTR TO NEXT POS IN BUFF 2378 F00B E0 14 CPX #20 ;SEE IF BUFF FULL 2379 F00D D0 16 BNE OUT04 ;NOT FULL SO RETURN 2380 F00F ; SO FILL REST OF BUFFER WITH BLANKS 2381 F00F 48 OUT01 PHA 2382 F010 A9 00 LDA #0 ;CURPOS = 0 2383 F012 AE 16 A4 LDX CURPOS ;SEE IF ANYTHING IN BUFFER 2384 F015 8D 16 A4 STA CURPOS 2385 F018 20 38 F0 JSR OUTPR ;CLEAR PRIBUF TO THE RIGHT 2386 F01B ;BUFFER FILLED SO PRINT IT 2387 F01B 20 45 F0 JSR IPST ;START THE PRINT 2388 F01E A2 00 LDX #0 ;STORE CHR IN BUFF (FIRST LOC) 2389 F020 68 PLA ;GET IT 2390 F021 C9 0D CMP #CR ;DONT STORE IF 2391 F023 F0 0E BEQ OUT05 2392 F025 9D 60 A4 OUT04 STA IBUFM,X ;STORE CHR IN BUFF 2393 F028 EE 16 A4 INC CURPOS ;INCR BUFF PNTR 2394 F02B E8 INX 2395 F02C 29 80 AND #$80 2396 F02E D0 03 BNE OUT05 ;DONT CLR IF MSB=1 2397 F030 20 38 F0 JSR OUTPR ;CLEAR PRIBUFF TO THE RIGHT 2398 F033 20 AC EB OUT05 JSR PLXY ;RESTORE REGS 2399 F036 68 PLA 2400 F037 60 RTS 2401 F038 A9 20 OUTPR LDA #' ' ;FILL REST OF BUFF WITH BLANKS 2402 F03A E0 14 OUTPR1 CPX #20 ;SEE IF END OF BUFF 2403 F03C F0 06 BEQ OUTPR2 2404 F03E 9D 60 A4 STA IBUFM,X ;NO SO STORE BLANK 2405 F041 E8 INX ;INCR BUFF PNTR 2406 F042 10 F6 BPL OUTPR1 2407 F044 60 OUTPR2 RTS 2408 F045 2409 F045 ;SUB TO OUTPUT BUFFER, 70 DOTS (10 DOTS AT 2410 F045 ;A TIME BY 7 ROWS) FOR EACH LINE OF PRINTING 2411 F045 2C 11 A4 IPST BIT PRIFLG ;PRINT FLG ON ? 2412 F048 10 2E BPL IPO4 2413 F04A 20 CB F0 IPS0 JSR PINT ;INITIALIZE VALUES 2414 F04D 20 E3 F0 JSR IPSU ;SET UP FIRS OUTPUT PATTERN 2415 F050 A9 C1 IPO0 LDA #PRST+SP12+MON ;TURN MOTOR ON 2416 F052 8D 0C A8 STA PCR 2417 F055 20 A0 FF JSR PAT23 ;TIME OUT ? 2418 F058 D0 0C BNE IPO2 ;NO, START SIGNAL RECEIVED 2419 F05A 20 A0 FF JSR PAT23 ;YES, TRY AGAIN 2420 F05D D0 07 BNE IPO2 ;OK 2421 F05F 4C 79 F0 JMP PRIERR ;TWO TIME OUTS - ERROR 2422 F062 EA NOP 2423 F063 EA NOP 2424 F064 EA NOP 2425 F065 EA NOP 2426 F066 20 87 F0 IPO2 JSR PRNDOT ;STRB P1=1 PRINT DOTS (1.7MSEC) 2427 F069 20 87 F0 JSR PRNDOT ;STRB P2=1 PRINT DOTS (1.7MSEC) 2428 F06C ;CHECK FOR 90, WHEN 70 PRNDOT WILL OUTPUT ZEROS 2429 F06C AD 77 A4 LDA IDOT 2430 F06F C9 5A CMP #90 2431 F071 90 F3 BCC IPO2 ;L.T. 90 THEN GO STROB P1 2432 F073 A9 E1 IPO3 LDA #PRST+SP12+MOFF ;TURN MOTOR OFF 2433 F075 8D 0C A8 STA PCR 2434 F078 60 IPO4 RTS 2435 F079 2436 F079 20 44 EB PRIERR JSR CLR ;CLEAR PRI PNTR 2437 F07C 20 B1 FE JSR PATCH5 ;TURN PRI OFF 2438 F07F A0 3B LDY #M12-M1 2439 F081 20 AF E7 JSR KEP 2440 F084 4C A1 E1 JMP COMIN ;BACK WHERE SUBR WAS CALLED 2441 F087 2442 F087 ;SUBR TO INCR DOT COUNTER,WHEN 2443 F087 ;NEG TRANS OUTPUT CHR FOR 1.7 MSEC 2444 F087 ;CLEAR & SET UP NEXT PATTERN 2445 F087 A9 00 PRNDOT LDA #0 ;CLR INTERRPTS 2446 F089 8D 01 A8 STA DRAH 2447 F08C AD 0D A8 PRDOT0 LDA IFR 2448 F08F 29 02 AND #MSP12 ;ANY STROBES ? 2449 F091 F0 F9 BEQ PRDOT0 2450 F093 AD 0C A8 LDA PCR 2451 F096 49 01 EOR #$01 2452 F098 8D 0C A8 STA PCR 2453 F09B EE 77 A4 INC IDOT 2454 F09E AD 79 A4 LDA IOUTU ;2 LEFT ELEM 2455 F0A1 0D 00 A8 ORA DRB ;DO NOT TURN TTY OUTPUT OFF 2456 F0A4 8D 00 A8 STA DRB 2457 F0A7 AD 78 A4 LDA IOUTL ;7 RIGHT ELEM, CLR CA1 INTER FLG 2458 F0AA 8D 01 A8 STA DRAH 2459 F0AD A9 A4 LDA #PRTIME 2460 F0AF 8D 08 A8 STA T2L 2461 F0B2 A9 06 LDA #PRTIME/256 ;START T2 FOR 1.7 MSEC 2462 F0B4 8D 09 A8 STA T2H 2463 F0B7 20 E3 F0 JSR IPSU ;SET NEXT PATTERN WHILE WAITING 2464 F0BA 20 1B EC JSR DE2 ;WAIT TILL TIME OUT 2465 F0BD A9 00 LDA #0 ;THERMAL ELEM OFF 2466 F0BF 8D 01 A8 STA DRAH 2467 F0C2 AD 00 A8 LDA DRB ;BUT DONT CHANGE TAPE CONTROLS 2468 F0C5 29 FC AND #$FC 2469 F0C7 8D 00 A8 STA DRB 2470 F0CA 60 RTS 2471 F0CB 2472 F0CB ; SUBROUTINE PINT -- INIT VARS FOR PRINTER 2473 F0CB A9 FF PINT LDA #$FF 2474 F0CD 8D 74 A4 STA IDIR ;DIRECTION <= - 2475 F0D0 A9 05 LDA #5 2476 F0D2 8D 75 A4 STA ICOL ;COLUMN <= LEFTMOST +1 2477 F0D5 A9 01 LDA #1 2478 F0D7 8D 76 A4 STA IOFFST ;OFFSET <= LEFT CHARACTER 2479 F0DA 8D 7C A4 STA IMASK 2480 F0DD A9 00 LDA #0 2481 F0DF 8D 77 A4 STA IDOT ;DOT COUNTER <= 0 2482 F0E2 60 RTS 2483 F0E3 2484 F0E3 ;THE VARIABLES FOR THE PRINTER ARE AS FOLLOWS: 2485 F0E3 ; 2486 F0E3 ;IDIR DIRECT HEAD IS CURRENTLY MOVING (0=+, $FF=-) 2487 F0E3 ;ICOL CLMN TO BE PRNTED NEXT (LEFTMOST=0,RIGHTMOST=4) 2488 F0E3 ;IOFFST OFFSET N PRINT BUFF (0=LEFT CHR, 1=RIGHT CHR) 2489 F0E3 ;IDOT COUNT OF NUMBER OF DOTS PRINTED THUS FAR 2490 F0E3 ;IOUTL SOLENOID PATTERN (8 CHRS ON RIGHT) 2491 F0E3 ;IOUTU SOLENOID PATTERN (2 CHRS ON LEFT) 2492 F0E3 ;IBITL 1 BIT MSK USED IN SETTING NEXT SOLENOID VALUE 2493 F0E3 ;IBITU UPPER PART OF MASK 2494 F0E3 ;IBUFM START OF PRINT BUFFER (LEFTMOST CHR FIRST) 2495 F0E3 ;IMASK MASK FOR CURRENT ROW BEING PRINTED 2496 F0E3 ;JUMP ADDRESS OF TABLE FOR CURRENT COLUMN 2497 F0E3 ; 2498 F0E3 ; THE DOT PATTERNS FOR THE CHRS ARE STORED SO THAT... 2499 F0E3 ;EACH BYTE CONTAINS THE DOTS FOR ONE COLUMN OF ONE... 2500 F0E3 ;CHR. SINCE EACH COLUMN CONTAINS SEVEN DOTS , 2501 F0E3 ;THIS MEANS THAT ONE BIT PER BYTE IS UNUSED. 2502 F0E3 ; THE PATTERNS ARE ORGANIZED INTO 5 TABLES OF 64... 2503 F0E3 ;BYTES WHERE EACH TABLE CONTAINS ALL THE DOT... 2504 F0E3 ;PATTERNS FOR A PARTICULAR COLUMN. THE BYTES IN EACH... 2505 F0E3 ;TABLE ARE ORDERED ACCORDING TO THE CHR CODE OF... 2506 F0E3 ;THE CHR BEING REFERENCED. THE CHR CODE CAN... 2507 F0E3 ;THUS BE USED TO DIRECTLY INDEX INTO THE TABLE. 2508 F0E3 2509 F0E3 ;SUBROUTINE IPSU -- SET UP OUTPUT PATTERN FOR PRINTER 2510 F0E3 ; THIS ROUTINE IS CALLED IN ORDER TO 2511 F0E3 ;SET UP THE NEXT GROUP OF SOLENOIDS TO 2512 F0E3 ;BE OUTPUT TO THE PRINTER. 2513 F0E3 ; ON ENTRY THE CONTENTS OF ALL REGISTERS 2514 F0E3 ;ARE ARBITRARY 2515 F0E3 ; ON EXIT THE CONTENTS OF A,X,Y ARE UNDEFINED 2516 F0E3 A2 00 IPSU LDX #0 ;X POINTS TO VAR BLOCK FOR PRNTR 2517 F0E5 20 21 F1 JSR INCP ;ADVANCE PTRS TO NXT DOT POSITION 2518 F0E8 ;X NOW CONTAINS INDEX INTO PRINT BUFFER 2519 F0E8 BD 60 A4 IPS1 LDA IBUFM,X ;LOAD NEXT CHAR FROM BUFFER 2520 F0EB 29 3F AND #$3F 2521 F0ED A8 TAY 2522 F0EE A9 7D LDA #JUMP ;A<= DOT PATTERN FOR CHAR & COL 2523 F0F0 20 58 EB JSR LDAY 2524 F0F3 2C 7C A4 BIT IMASK ;SEE IF DOT IS SET 2525 F0F6 F0 16 BEQ IPS2 ;NO SO GO ON TO NEXT CHAR 2526 F0F8 AD 7A A4 LDA IBITL ;DOT ON SO SET THE CURR SOLENOID 2527 F0FB F0 08 BEQ IPS3 ;LSB OF SOL MASK IS 0 , DO MSB 2528 F0FD 0D 78 A4 ORA IOUTL ;SET THE SOLENOID IN THE PATTERN 2529 F100 8D 78 A4 STA IOUTL 2530 F103 D0 09 BNE IPS2 ;BRANCH ALWAYS 2531 F105 AD 7B A4 IPS3 LDA IBITU ;SOLENOID IS ONE OF THE 2 MSD 2532 F108 0D 79 A4 ORA IOUTU ;SET THE BIT IN THE PATTERN 2533 F10B 8D 79 A4 STA IOUTU 2534 F10E 0E 7A A4 IPS2 ASL IBITL ;SHIFT MSK TO NXT CHR POSITION 2535 F111 2E 7B A4 ROL IBITU 2536 F114 CA DEX ;DECR PTR INTO BUFFER 2537 F115 CA DEX 2538 F116 10 D0 BPL IPS1 ;NOT END YET 2539 F118 ;SOLENOID PATTERN IS SET UP IN IOUTU,IOUTL 2540 F118 AD 79 A4 LDA IOUTU ;LEFTMOST 2 2541 F11B 29 03 AND #$03 ;DISABLE FOR SEGMENTS 2542 F11D 8D 79 A4 STA IOUTU 2543 F120 60 RTS 2544 F121 2545 F121 ; SUBROUTINE INCP 2546 F121 ;THIS SUBROUTINE IS USED TO UPDATE THE PRINTER VARIABLES 2547 F121 ;TO POINT TO THE NEXT DOT POSITION TO BE PRINTED 2548 F121 ;X REG IS USED TO POINT TO THE VARIABLE BLOCK OF 2549 F121 ;BEING UPDATED 2550 F121 ;ON EXIT X CONTAINS THE POINTER TO THE LAST CHARACTER IN 2551 F121 ;THE PRINT BUFFER 2552 F121 ;CONTENTS OF A,Y ON EXIT ARE ARBITRARY 2553 F121 BD 74 A4 INCP LDA IDIR,X ;EXAMINE DIRECTION(+ OR -) 2554 F124 10 1E BPL OP03 ;DIRECTION = + 2555 F126 ;*DIRECTION = - 2556 F126 BD 75 A4 LDA ICOL,X ;SEE WHAT THE COLUMN IS 2557 F129 F0 05 BEQ OP04 ;COLUMN = 0 SO END OF DIGIT 2558 F12B ;**COLUMN # 0 SO JUST DECREMENT COLUMN 2559 F12B DE 75 A4 DEC ICOL,X 2560 F12E 10 33 BPL NEWCOL ;BRANCH ALWAYS 2561 F130 ;**COLUMN = 0 SO SEE IF EVEN OR ODD DIGIT 2562 F130 BD 76 A4 OP04 LDA IOFFST,X 2563 F133 F0 0A BEQ OP07 ;OFFSET = 0 SO DIRECTION CHANGE 2564 F135 ;***OFFSET = 1 SO MOVE TO RIGHT DIGIT 2565 F135 DE 76 A4 DEC IOFFST,X ;OFFSET <= 0 (LEFT CHARACTER) 2566 F138 A9 04 LDA #4 ;COLUMN <= 4 2567 F13A 9D 75 A4 STA ICOL,X 2568 F13D 10 24 BPL NEWCOL ;BRANCH ALWAYS 2569 F13F ;***OFFSET = 0 SO CHANGE DIRECTION TO + 2570 F13F FE 74 A4 OP07 INC IDIR,X ;DIRECTION <= $00 (+) 2571 F142 10 1C BPL NEWROW ;BRANCH ALWAYS 2572 F144 ;*DIRECTION = + 2573 F144 BD 75 A4 OP03 LDA ICOL,X ;SEE IF LAST COLUMN IN DIGIT 2574 F147 C9 04 CMP #4 2575 F149 F0 05 BEQ OP05 ;COLUMN = 4 SO GO TO NEXT DIGIT 2576 F14B FE 75 A4 INC ICOL,X ;JUST INCR COLUMN-NOT END OF DIGIT 2577 F14E 10 13 BPL NEWCOL ;BRANCH ALWAYS 2578 F150 ;**AT COLUMN 4 -- SEE IF LEFT OR RIGHT DIGIT 2579 F150 BD 76 A4 OP05 LDA IOFFST,X 2580 F153 D0 08 BNE OP06 ;OFFSET # 0 SO RIGHT DIGIT 2581 F155 9D 75 A4 STA ICOL,X ;COLUMN <= 0 2582 F158 FE 76 A4 INC IOFFST,X ;OFFSET <= 1 (RIGHT CHARACTER) 2583 F15B 10 06 BPL NEWCOL ;BRANCH ALWAYS 2584 F15D ;***OFFSET = 1 SO DIRECTION CHANGE 2585 F15D DE 74 A4 OP06 DEC IDIR,X ;DIRECTION <= $FF (-) 2586 F160 2587 F160 ;START OF NEW PRINT ROW 2588 F160 1E 7C A4 NEWROW ASL IMASK,X ;UPDATE ROW MASK FOR DOT PATTERNS 2589 F163 ;START OF NEW PRINT COLUMN 2590 F163 A9 00 NEWCOL LDA #0 ;CLEAR OUTPUT PATTERN 2591 F165 9D 78 A4 STA IOUTL,X ;PATTERN FOR 8 RIGHT CHRS 2592 F168 9D 79 A4 STA IOUTU,X ;PATTERN FOR 2 LEFT SOLEN 2593 F16B 9D 7B A4 STA IBITU,X ;OUTPUT MSK FOR LEFTMOST SOLEN 2594 F16E A9 01 LDA #1 2595 F170 9D 7A A4 STA IBITL,X ;OUTPUT MSK FOR RIGHTMOST SOLEN 2596 F173 ;GET ADDRESS OF DOT PATTERN TABLE FOR NEXT COLUMN 2597 F173 BD 75 A4 LDA ICOL,X ;GET COLUMN NUMBER (0-4) 2598 F176 0A ASL A ;*2 ,INDEX INTO TBL OF TBL ADDRS 2599 F177 A8 TAY 2600 F178 B9 D7 F2 LDA MTBL,Y ;LSB OF ADDR OF TABLE 2601 F17B 9D 7D A4 STA JUMP,X ;PTR TO TBL WITH DOT PATTERNS 2602 F17E B9 D8 F2 LDA MTBL+1,Y ;MSB OF TABLE ADDRESS 2603 F181 9D 7E A4 STA JUMP+1,X 2604 F184 A9 12 LDA #18 ;COMPUTE INDEX INTO PRNTR BUFFER 2605 F186 1D 76 A4 ORA IOFFST,X ;+1 IF RIGHT CHR 2606 F189 AA TAX 2607 F18A 60 RTS 2608 F18B 2609 F18B ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 2610 F18B ;OUTPUT ACC TO TAPE BUFFER SUBROUTINE 2611 F18B ; & WHEN FULL OUTPUT BUFF TO TAPE. 2612 F18B ; IF INFLG=OUTFLG= T USE TWO BUFFERS 2613 F18B ;OTHERWISE USE SAME BUFFER FOR INPUT 2614 F18B ;AND OUTPUT (MONIT BUFFER) 2615 F18B 20 9E EB TOBYTE JSR PHXY ;SAVE X 2616 F18E AE 37 A4 LDX TAPTR2 ;TAPE BUFFER POINTER FOR OUTPUT 2617 F191 20 0F F2 JSR BKCK2 ;STORE IN BUFFER 2618 F194 E8 INX 2619 F195 8E 37 A4 STX TAPTR2 ;FOR NEXT 2620 F198 E0 50 CPX #80 ;BUFFER FULL? 2621 F19A D0 32 BNE TABY3 ;NO , GO BACK 2622 F19C ;OUTPUT A BLOCK FROM BUFFER TO TAPE 2623 F19C 20 E7 F1 JSR BKCKSM ;COMPUT BLOCK CHECKSUM 2624 F19F 20 1D F2 JSR TAOSET ;SET TAPE FOR OUTPUT 2625 F1A2 A9 23 LDA #'#' ;CHAR FOR BEGINNING 2626 F1A4 20 4A F2 JSR OUTTAP ;OF BLOCK 2627 F1A7 ;OUTPUT CHRS FROM ACTIVE BUFFER 2628 F1A7 20 D2 F1 TABY2 JSR CKBUFF ;LOAD CHR FROM ACTIVE BUFFER 2629 F1AA 20 4A F2 JSR OUTTAP ; FROM BUFFER 2630 F1AD E8 INX 2631 F1AE E0 53 CPX #83 ;2 BLOCK CKSUM CHR + 1 EXTRA CHR.. 2632 F1B0 D0 F5 BNE TABY2 ;OTHERWISE ERROR 2633 F1B2 AD 00 A8 LDA DRB 2634 F1B5 29 CF AND #$CF ;TURN TAPES OFF PB5,PB4 2635 F1B7 8D 00 A8 STA DRB 2636 F1BA 58 CLI ;ENABLE INTERRUPT 2637 F1BB A9 00 LDA #0 2638 F1BD 8D 37 A4 STA TAPTR2 ;CLR TAPE BUFF PTR 2639 F1C0 A9 00 LDA #T1I ;RESET FREE RUNNING TO 1 SHOT 2640 F1C2 8D 0B A8 STA ACR 2641 F1C5 20 9A FF JSR PAT22 ;ADD 1 TO BLK COUNT & OUTPUT 2642 F1C8 AD 68 01 LDA BLKO ;PUT BLK CNT IN FIRST LOC (TABUFF) 2643 F1CB 20 8B F1 JSR TOBYTE 2644 F1CE 20 AC EB TABY3 JSR PLXY 2645 F1D1 60 RTS 2646 F1D2 2647 F1D2 ;CHCK ACTIVE BUFFER AND LOAD A CHR 2648 F1D2 ;CARRY=0 IF ONLY 1 BUFFER ,C=1 IF 2 BUFFERS 2649 F1D2 AD 12 A4 CKBUFF LDA INFLG 2650 F1D5 CD 13 A4 CMP OUTFLG 2651 F1D8 D0 08 BNE CBUFF1 2652 F1DA C9 54 CMP #'T' ;SEE IF INFLG=OUTFLG = T 2653 F1DC D0 04 BNE CBUFF1 2654 F1DE 38 SEC ;USE PAGE 1 FOR OUTPUT BUFFER 2655 F1DF B5 AD LDA TABUF2,X 2656 F1E1 60 RTS 2657 F1E2 18 CBUFF1 CLC ;USE SAME BUFFER FOR I/O 2658 F1E3 BD 16 01 LDA TABUFF,X 2659 F1E6 60 RTS 2660 F1E7 2661 F1E7 ;COMPUTE BLOCK CHECKSUM & PUT IT 2662 F1E7 ;AT THE END OF ACTIVE BUFFER 2663 F1E7 A9 00 BKCKSM LDA #0 ;CLEAR BLK CKSUM LOCAT 2664 F1E9 8D 66 01 STA TABUFF+80 2665 F1EC 8D 67 01 STA TABUFF+81 2666 F1EF A2 4F LDX #79 2667 F1F1 20 D2 F1 BKCK1 JSR CKBUFF ;GET CHR FROM EITHER BUFFER 2668 F1F4 18 CLC 2669 F1F5 6D 66 01 ADC TABUFF+80 ;ADD TO CKSUM 2670 F1F8 8D 66 01 STA TABUFF+80 2671 F1FB 90 03 BCC *+5 2672 F1FD EE 67 01 INC TABUFF+81 2673 F200 CA DEX 2674 F201 10 EE BPL BKCK1 ;DO THE WHOLE BUFFER 2675 F203 A2 50 LDX #80 2676 F205 AD 66 01 LDA TABUFF+80 ;PUT CKSUM INTO RIGHT BUFFER 2677 F208 20 0F F2 JSR BKCK2 2678 F20B E8 INX 2679 F20C AD 67 01 LDA TABUFF+81 2680 F20F 48 BKCK2 PHA ;OUTPUT A CHAR TO RIGHT BUFFER 2681 F210 20 D2 F1 JSR CKBUFF ;GET WHICH BUFFER 2682 F213 68 PLA 2683 F214 B0 04 BCS BKCK3 ;BRNCH TO SECOND BUFFER 2684 F216 9D 16 01 STA TABUFF,X 2685 F219 60 RTS 2686 F21A 95 AD BKCK3 STA TABUF2,X ;TO PAG 1 2687 F21C 60 RTS 2688 F21D 2689 F21D ;SET TAPE (1 OR 2) FOR OUTPUT 2690 F21D 20 C0 F2 TAOSET JSR SETSPD ;SET UP SPEED (# OF HALF PULSES) 2691 F220 AD 35 A4 LDA TAPOUT ;OUTPUT FLG (TAPE 1 OR 2) 2692 F223 20 1C EE JSR TIOSET ;SET PB4 OR PB5 TO ZERO 2693 F226 A9 EC LDA #DATOUT+MOFF ;SET CA2=0 (DATA OUT) 2694 F228 8D 0C A8 STA PCR 2695 F22B A9 C0 LDA #T1FR ;SET TIMER IN FREE RUNNING 2696 F22D 8D 0B A8 STA ACR 2697 F230 A9 00 LDA #00 2698 F232 8D 05 A8 STA T1CH ;START TIMER T1 2699 F235 AE 09 A4 LDX GAP ;OUTPUT 4*GAP SYN BYTES 2700 F238 A9 16 TAOS1 LDA #$16 ;SYN CHAR 2701 F23A 20 4A F2 JSR OUTTAP ;TO TAPE 2702 F23D 20 4A F2 JSR OUTTAP 2703 F240 20 4A F2 JSR OUTTAP 2704 F243 20 4A F2 JSR OUTTAP 2705 F246 CA DEX 2706 F247 D0 EF BNE TAOS1 2707 F249 60 RTS 2708 F24A 2709 F24A ;OUTPUT ACC TO TAPE 2710 F24A 8E 2D A4 OUTTAP STX CPIY+3 ;SAVE X 2711 F24D A0 07 LDY #$07 ;FOR THE 8 BITS 2712 F24F 8C 27 A4 STY STIY 2713 F252 AE 08 A4 LDX TSPEED 2714 F255 30 39 BMI OUTTA1 ;IF ONE IS SUPER HIPER 2715 F257 48 PHA 2716 F258 A0 02 TRY LDY #2 ;SEND 3 UNITS 2717 F25A 8C 28 A4 STY STIY+1 ;STARTING AT 3700 HZ 2718 F25D BE 0A A4 ZON LDX NPUL,Y ;#OF HALF CYCLES 2719 F260 48 PHA 2720 F261 B9 0B A4 ZON1 LDA TIMG,Y ;SET UP LACTH FOR NEXT 2721 F264 8D 06 A8 STA T1LL ;PULSE (80 OR CA) (FREC) 2722 F267 A9 00 LDA #0 2723 F269 8D 07 A8 STA T1LH 2724 F26C 2C 0D A8 ZON2 BIT IFR ;WAIT FOR PREVIOUS 2725 F26F 50 FB BVC ZON2 ;CYCLE (T1 INT FLG) 2726 F271 AD 04 A8 LDA T1L ;CLR INTERR FLG 2727 F274 CA DEX 2728 F275 D0 EA BNE ZON1 ;SEND ALL CYCLES 2729 F277 68 PLA 2730 F278 CE 28 A4 DEC STIY+1 2731 F27B F0 05 BEQ SETZ ;BRCH IF LAST ONE 2732 F27D 30 07 BMI ROUT ;BRCH IF NO MORE 2733 F27F 4A LSR A ;TAKE NEXT BIT 2734 F280 90 DB BCC ZON ;...IF IT'S A ONE... 2735 F282 A0 00 SETZ LDY #0 ;SWITCH TO 2400 HZ 2736 F284 F0 D7 BEQ ZON ;UNCONDITIONAL BRCH 2737 F286 CE 27 A4 ROUT DEC STIY ;ONE LESS BIT 2738 F289 10 CD BPL TRY ;ANY MORE? GO BACK 2739 F28B 68 ROUT1 PLA ;RECOVER CHR 2740 F28C AE 2D A4 LDX CPIY+3 ;RESTORE X 2741 F28F 60 RTS 2742 F290 2743 F290 ;OUTPUT HALF PULSE FOR 0 (1200 HZ) & 2744 F290 ;TWO HALF PULSES FOR 1 (2400 HZ) (00 TSPEED) 2745 F290 48 OUTTA1 PHA 2746 F291 8D 28 A4 STA STIY+1 ;STORE ACC 2747 F294 A2 02 OUTTA2 LDX #2 ;# OF HALF PULSES 2748 F296 A9 D0 LDA #$D0 ;1/2 PULSE OF 2400 2749 F298 8D 06 A8 STA T1LL 2750 F29B A9 00 LDA #00 2751 F29D 8D 07 A8 STA T1LH 2752 F2A0 20 BC FF JSR PATC25 ;WAIT TILL COMPLETED 2753 F2A3 4E 28 A4 LSR STIY+1 ;GET BITS FROM CHR 2754 F2A6 B0 0A BCS OUTTA3 2755 F2A8 A9 A0 LDA #$A0 ;BIT=0 ,OUTPUT 1200 HZ 2756 F2AA 8D 06 A8 STA T1LL 2757 F2AD A9 01 LDA #$01 2758 F2AF 8D 07 A8 STA T1LH 2759 F2B2 20 BC FF OUTTA3 JSR PATC25 2760 F2B5 CA DEX 2761 F2B6 10 FA BPL OUTTA3 ;OUTPUT 3 HALF PULSES 2762 F2B8 88 DEY 2763 F2B9 10 D9 BPL OUTTA2 ;ALL BITS ? 2764 F2BB 4C 8B F2 JMP ROUT1 ;RESTORE REGS 2765 F2BE EA NOP 2766 F2BF EA NOP 2767 F2C0 2768 F2C0 ;SET SPEED FROM NORMAL TO 3 TIMES NORMAL 2769 F2C0 AD 08 A4 SETSPD LDA TSPEED ;SPEED FLG 2770 F2C3 6A ROR A ;NORMAL OR 3* NORM 2771 F2C4 A9 0C LDA #12 2772 F2C6 90 02 BCC SETSP1 2773 F2C8 A9 04 LDA #4 2774 F2CA 8D 0A A4 SETSP1 STA NPUL 2775 F2CD A9 12 LDA #18 2776 F2CF 90 02 BCC SETSP2 2777 F2D1 A9 06 LDA #6 2778 F2D3 8D 0C A4 SETSP2 STA TIMG+1 2779 F2D6 60 RTS 2780 F2D7 ;.FILE A3/2 2781 F2D7 2782 F2D7 ; ADDRESS TABLE FOR EACH PRINT COLUMN 2783 F2D7 ; EACH TBL CONTAINS DOT PATTERNS FOR 1 OF THE 5 COLUMNS. 2784 F2D7 ; DATA ARE STORED WITH EACH BYTE DEFINING ONE COLUMN... 2785 F2D7 ; OF A CHARACTER, WITH THE TOP DOT CORRESPONDING TO THE.. 2786 F2D7 ; LSB IN THE BYTE 2787 F2D7 E1F221F361F3MTBL .DW COL0,COL1,COL2,COL3,COL4 2787 F2DD A1F3E1F3 2788 F2E1 2789 F2E1 ;DOT PATTERNS FOR COLUMN ZERO (LEFTMOST COLUMN) 2790 F2E1 3E7E7F3E7F7FCOL0 .DB $3E,$7E,$7F,$3E,$7F,$7F,$7F,$3E ;@ -- G 2790 F2E7 7F3E 2791 F2E9 7F00207F7F7F .DB $7F,$00,$20,$7F,$7F,$7F,$7F,$3E ;H -- O 2791 F2EF 7F3E 2792 F2F1 7F3E7F46013F .DB $7F,$3E,$7F,$46,$01,$3F,$07,$7F ;P -- W 2792 F2F7 077F 2793 F2F9 6307617F0300 .DB $63,$07,$61,$7F,$03,$00,$02,$40 ;X -- ( 2793 F2FF 0240 2794 F301 000000142463 .DB $00,$00,$00,$14,$24,$63,$60,$00 ; -- ' 2794 F307 6000 2795 F309 000014084008 .DB $00,$00,$14,$08,$40,$08,$40,$60 ;( -- / 2795 F30F 4060 2796 F311 3E4462411827 .DB $3E,$44,$62,$41,$18,$27,$3C,$01 ;0 -- 7 2796 F317 3C01 2797 F319 364600400814 .DB $36,$46,$00,$40,$08,$14,$41,$02 ;8 -- ? 2797 F31F 4102 2798 F321 2799 F321 ;DOT PATTERNS FOR COLUMN 1 2800 F321 410949414149COL1 .DB $41,$09,$49,$41,$41,$49,$09,$41 ;@ -- G 2800 F327 0941 2801 F329 084140084002 .DB $08,$41,$40,$08,$40,$02,$06,$41 ;H -- O 2801 F32F 0641 2802 F331 094109490140 .DB $09,$41,$09,$49,$01,$40,$18,$20 ;P -- W 2802 F337 1820 2803 F339 140851410400 .DB $14,$08,$51,$41,$04,$00,$01,$40 ;X -- ( 2803 F33F 0140 2804 F341 0000077F2A13 .DB $00,$00,$07,$7F,$2A,$13,$4E,$04 ; -- ' 2804 F347 4E04 2805 F349 1C4108083008 .DB $1C,$41,$08,$08,$30,$08,$00,$10 ;( -- / 2805 F34F 0010 2806 F351 514251411445 .DB $51,$42,$51,$41,$14,$45,$4A,$71 ;0 -- 7 2806 F357 4A71 2807 F359 494900341414 .DB $49,$49,$00,$34,$14,$14,$41,$01 ;8 -- ? 2807 F35F 4101 2808 F361 2809 F361 ;DOT PATTERNS FOR COLUMN 2 2810 F361 5D0949414149COL2 .DB $5D,$09,$49,$41,$41,$49,$09,$41 ;@ -- G 2810 F367 0941 2811 F369 087F4114400C .DB $08,$7F,$41,$14,$40,$0C,$08,$41 ;H -- O 2811 F36F 0841 2812 F371 095119497F40 .DB $09,$51,$19,$49,$7F,$40,$60,$18 ;P -- W 2812 F377 6018 2813 F379 087849410841 .DB $08,$78,$49,$41,$08,$41,$01,$40 ;X -- ( 2813 F37F 0140 2814 F381 004F00147F08 .DB $00,$4F,$00,$14,$7F,$08,$59,$02 ; -- ' 2814 F387 5902 2815 F389 22223E3E0008 .DB $22,$22,$3E,$3E,$00,$08,$00,$08 ;( -- / 2815 F38F 0008 2816 F391 497F51491245 .DB $49,$7F,$51,$49,$12,$45,$49,$09 ;0 -- 7 2816 F397 4909 2817 F399 494944002214 .DB $49,$49,$44,$00,$22,$14,$22,$51 ;8 -- ? 2817 F39F 2251 2818 F3A1 2819 F3A1 ;DOT PATTERNS FOR COLUMN 3 2820 F3A1 550949412249COL3 .DB $55,$09,$49,$41,$22,$49,$09,$49 ;@ -- G 2820 F3A7 0949 2821 F3A9 08413F224002 .DB $08,$41,$3F,$22,$40,$02,$30,$41 ;H -- O 2821 F3AF 3041 2822 F3B1 092129490140 .DB $09,$21,$29,$49,$01,$40,$18,$20 ;P -- W 2822 F3B7 1820 2823 F3B9 140845001041 .DB $14,$08,$45,$00,$10,$41,$01,$40 ;X -- ( 2823 F3BF 0140 2824 F3C1 0000077F2A64 .DB $00,$00,$07,$7F,$2A,$64,$26,$01 ; -- ' 2824 F3C7 2601 2825 F3C9 411C08080008 .DB $41,$1C,$08,$08,$00,$08,$00,$04 ;( -- / 2825 F3CF 0004 2826 F3D1 454049557F45 .DB $45,$40,$49,$55,$7F,$45,$49,$05 ;0 -- 7 2826 F3D7 4905 2827 F3D9 492900004114 .DB $49,$29,$00,$00,$41,$14,$14,$09 ;8 -- ? 2827 F3DF 1409 2828 F3E1 ;DOT PATTERNS FOR COLUMN 4 2829 F3E1 1E7E36221C41COL4 .DB $1E,$7E,$36,$22,$1C,$41,$01,$7A ;@ -- G 2829 F3E7 017A 2830 F3E9 7F000141407F .DB $7F,$00,$01,$41,$40,$7F,$7F,$3E ;H -- O 2830 F3EF 7F3E 2831 F3F1 065E4631013F .DB $06,$5E,$46,$31,$01,$3F,$07,$7F ;P -- W 2831 F3F7 077F 2832 F3F9 63074300607F .DB $63,$07,$43,$00,$60,$7F,$02,$40 ;X -- ( 2832 F3FF 0240 2833 F401 000000141263 .DB $00,$00,$00,$14,$12,$63,$50,$00 ; -- ' 2833 F407 5000 2834 F409 000014080008 .DB $00,$00,$14,$08,$00,$08,$00,$03 ;( -- / 2834 F40F 0003 2835 F411 3E4046221039 .DB $3E,$40,$46,$22,$10,$39,$31,$03 ;0 -- 7 2835 F417 3103 2836 F419 361E00004114 .DB $36,$1E,$00,$00,$41,$14,$08,$06 ;8 -- ? 2836 F41F 0806 2837 F421 2838 F421 ;ASCII CHARACTERS FOR KB 2839 F421 2008000D0000ROW1 .DB $20,$08,$00,$0D,$00,$00,$00,$00 2839 F427 0000 2840 F429 00605C000000ROW2 .DB $00,$60,'\',$00,$00,$00,$7F,$00 2840 F42F 7F00 2841 F431 2E4C502D3A30ROW3 .DB ".LP-:0;/" 2841 F437 3B2F 2842 F439 4D4A494F3938ROW4 .DB "MJIO98K," 2842 F43F 4B2C 2843 F441 424759553736ROW5 .DB "BGYU76HN" 2843 F447 484E 2844 F449 434452543534ROW6 .DB "CDRT54FV" 2844 F44F 4656 2845 F451 5A4157453332ROW7 .DB "ZAWE32SX" 2845 F457 5358 2846 F459 00001B51315EROW8 .DB $00,$00,$1B,"Q1",$5E,"][" 2846 F45F 5D5B 2847 F461 2848 F461 ;DISASSEMBLE INSTRUCTIONS AND SHOW REGS IS REGF SET 2849 F461 AD 0E A4 REGQ LDA REGF ;GET FLAG 2850 F464 F0 06 BEQ DISASM 2851 F466 20 32 E2 JSR REG1 ;SHOW THE SIX REGS 2852 F469 20 24 EA JSR CRCK ; 2853 F46C 2854 F46C 20 45 F5 DISASM JSR PRBL2 2855 F46F 20 3C F5 JSR PRPC ;OUTPUT PROG COUNTR 2856 F472 A0 00 LDY #0 2857 F474 20 56 EB JSR PCLLD 2858 F477 A8 TAY 2859 F478 4A LSR A 2860 F479 90 0B BCC IEVEN 2861 F47B 4A LSR A 2862 F47C B0 17 BCS ERR 2863 F47E C9 22 CMP #$22 2864 F480 F0 13 BEQ ERR 2865 F482 29 07 AND #7 2866 F484 09 80 ORA #$80 2867 F486 4A IEVEN LSR A 2868 F487 AA TAX 2869 F488 BD 5B F5 LDA MODE,X 2870 F48B B0 04 BCS RTMODE 2871 F48D 4A LSR A 2872 F48E 4A LSR A 2873 F48F 4A LSR A 2874 F490 4A LSR A 2875 F491 29 0F RTMODE AND #$F 2876 F493 D0 04 BNE GETFMT 2877 F495 A0 80 ERR LDY #$80 2878 F497 A9 00 LDA #0 2879 F499 AA GETFMT TAX 2880 F49A BD 9F F5 LDA MODE2,X 2881 F49D 8D 16 01 STA FORMA 2882 F4A0 29 03 AND #3 2883 F4A2 85 EA STA LENGTH 2884 F4A4 98 TYA ;OPCODE 2885 F4A5 29 8F AND #$8F 2886 F4A7 AA TAX 2887 F4A8 98 TYA ;OPCODE IN A AGAIN 2888 F4A9 A0 03 LDY #3 2889 F4AB E0 8A CPX #$8A 2890 F4AD F0 0B BEQ MNNDX3 2891 F4AF 4A MNNDX1 LSR A 2892 F4B0 90 08 BCC MNNDX3 2893 F4B2 4A LSR A 2894 F4B3 4A MNNDX2 LSR A 2895 F4B4 09 20 ORA #$20 2896 F4B6 88 DEY 2897 F4B7 D0 FA BNE MNNDX2 2898 F4B9 C8 INY 2899 F4BA 88 MNNDX3 DEY 2900 F4BB D0 F2 BNE MNNDX1 2901 F4BD 48 PHA ;SAVE MNEMONIC TABLE INDEX 2902 F4BE 20 56 EB JSR PCLLD 2903 F4C1 20 46 EA JSR NUMA 2904 F4C4 20 45 F5 JSR PRBL2 ;PRINT LAST BLANK 2905 F4C7 68 PLA 2906 F4C8 A8 TAY 2907 F4C9 B9 B9 F5 LDA MNEML,Y 2908 F4CC 8D 17 01 STA LMNEM 2909 F4CF B9 F9 F5 LDA MNEMR,Y 2910 F4D2 8D 18 01 STA RMNEM 2911 F4D5 A2 03 LDX #3 ;MUST BE 2912 F4D7 A9 00 PRMN1 LDA #0 2913 F4D9 A0 05 LDY #5 2914 F4DB 0E 18 01 PRMN2 ASL RMNEM 2915 F4DE 2E 17 01 ROL LMNEM 2916 F4E1 2A ROL A 2917 F4E2 88 DEY 2918 F4E3 D0 F6 BNE PRMN2 2919 F4E5 69 BF ADC #'?'+$80 ;ADD "?" OFFSET 2920 F4E7 20 BC E9 JSR OUTALL 2921 F4EA CA DEX 2922 F4EB D0 EA BNE PRMN1 2923 F4ED 20 45 F5 JSR PRBL2 2924 F4F0 A2 06 LDX #6 2925 F4F2 A9 00 LDA #0 2926 F4F4 8D 29 A4 STA STIY+2 ;FLAG 2927 F4F7 E0 03 PRADR1 CPX #3 2928 F4F9 D0 1E BNE PRADR3 ;IF X=3 PRINT ADDR VALUE 2929 F4FB A4 EA LDY LENGTH 2930 F4FD F0 1A BEQ PRADR3 ;1 BYTE INSTR 2931 F4FF AD 16 01 PRADR2 LDA FORMA 2932 F502 C9 E8 CMP #$E8 ;RELATIVE ADDRESSING 2933 F504 20 56 EB JSR PCLLD 2934 F507 B0 27 BCS RELADR 2935 F509 ;SE IF SYMBOL 2936 F509 48 PHA 2937 F50A AD 29 A4 LDA STIY+2 2938 F50D D0 03 BNE MR11A 2939 F50F EE 29 A4 INC STIY+2 ;SHOW WE WERE HERE 2940 F512 2941 F512 68 MR11A PLA 2942 F513 20 46 EA JSR NUMA 2943 F516 88 DEY 2944 F517 D0 E6 BNE PRADR2 2945 F519 0E 16 01 PRADR3 ASL FORMA 2946 F51C 90 0E BCC PRADR4 2947 F51E BD AC F5 LDA CHAR1-1,X 2948 F521 20 BC E9 JSR OUTALL 2949 F524 BD B2 F5 LDA CHAR2-1,X 2950 F527 F0 03 BEQ PRADR4 2951 F529 20 BC E9 JSR OUTALL 2952 F52C CA PRADR4 DEX 2953 F52D D0 C8 BNE PRADR1 2954 F52F 60 RTS 2955 F530 20 4D F5 RELADR JSR PCADJ3 2956 F533 AA TAX 2957 F534 E8 INX 2958 F535 D0 01 BNE PRNTXY 2959 F537 C8 INY 2960 F538 98 PRNTXY TYA 2961 F539 4C 42 EA JMP WRAX ;PRINT A &X 2962 F53C AD 26 A4 PRPC LDA SAVPC+1 ;PRINT PC 2963 F53F AE 25 A4 LDX SAVPC 2964 F542 20 42 EA JSR WRAX 2965 F545 A9 20 PRBL2 LDA #' ' 2966 F547 4C BC E9 JMP OUTALL 2967 F54A A5 EA LDA LENGTH 2968 F54C 38 SEC 2969 F54D AC 26 A4 PCADJ3 LDY SAVPC+1 ;PRG CNTR HIGH 2970 F550 AA TAX 2971 F551 10 01 BPL PCADJ4 2972 F553 88 DEY 2973 F554 6D 25 A4 PCADJ4 ADC SAVPC ;PROG CNTR LOW 2974 F557 90 01 BCC RTS1 2975 F559 C8 INY 2976 F55A 60 RTS1 RTS 2977 F55B 2978 F55B 40024503D008MODE .DB $40,2,$45,3,$D0,8,$40,9 2978 F561 4009 2979 F563 30224533D008 .DB $30,$22,$45,$33,$D0,8,$40,9 2979 F569 4009 2980 F56B 40024533D008 .DB $40,2,$45,$33,$D0,8,$40,9 2980 F571 4009 2981 F573 400245B3D008 .DB $40,2,$45,$B3,$D0,8,$40,9 2981 F579 4009 2982 F57B 00224433D08C .DB 0,$22,$44,$33,$D0,$8C,$44,0 2982 F581 4400 2983 F583 11224433D08C .DB $11,$22,$44,$33,$D0,$8C,$44,$9A 2983 F589 449A 2984 F58B 10 22 44 33 .DB $10,$22,$44,$33 2985 F58F D0 08 40 09 .DB $D0,8,$40,9 2986 F593 10224433D008 .DB $10,$22,$44,$33,$D0,8,$40,9 2986 F599 4009 2987 F59B 62 13 78 A9 .DB $62,$13,$78,$A9 2988 F59F 2989 F59F 002101020080MODE2 .DB 0,$21,1,2,0,$80,$59,$4D 2989 F5A5 594D 2990 F5A7 1112064A051D .DB $11,$12,6,$4A,5,$1D 2991 F5AD 2992 F5AD 2C292C23282ECHAR1 .DB ",",$29,",#(","." 2993 F5B3 590058000041CHAR2 .DB "Y",0,"X",0,0,"A" 2994 F5B9 2995 F5B9 1C8A1C235D8BMNEML .DB $1C,$8A,$1C,$23,$5D,$8B,$1B 2995 F5BF 1B 2996 F5C0 A1 .DB $A1 2997 F5C1 9D8A1D239D8B .DB $9D,$8A,$1D,$23,$9D,$8B,$1D,$A1 2997 F5C7 1DA1 2998 F5C9 002919AE69A8 .DB 0,$29,$19,$AE,$69,$A8,$19,$23 2998 F5CF 1923 2999 F5D1 24531B232453 .DB $24,$53,$1B,$23,$24,$53,$19,$A1 2999 F5D7 19A1 3000 F5D9 001A5B5BA569 .DB 0,$1A,$5B,$5B,$A5,$69,$24,$24 3000 F5DF 2424 3001 F5E1 AEAEA8AD2900 .DB $AE,$AE,$A8,$AD,$29,0,$7C,0 3001 F5E7 7C00 3002 F5E9 159C6D9CA569 .DB $15,$9C,$6D,$9C,$A5,$69,$29,$53 3002 F5EF 2953 3003 F5F1 84133411A569 .DB $84,$13,$34,$11,$A5,$69,$23,$A0 3003 F5F7 23A0 3004 F5F9 3005 F5F9 D8625A482662MNEMR .DB $D8,$62,$5A,$48,$26,$62,$94 3005 F5FF 94 3006 F600 88 .DB $88 3007 F601 5444C8546844 .DB $54,$44,$C8,$54,$68,$44,$E8,$94 3007 F607 E894 3008 F609 00B4088474B4 .DB 0,$B4,8,$84,$74,$B4,$28,$6E 3008 F60F 286E 3009 F611 74F4CC4A72F2 .DB $74,$F4,$CC,$4A,$72,$F2,$A4,$8A 3009 F617 A48A 3010 F619 00AAA2A27474 .DB 0,$AA,$A2,$A2,$74,$74,$74,$72 3010 F61F 7472 3011 F621 4468B232B200 .DB $44,$68,$B2,$32,$B2,0,$22,0 3011 F627 2200 3012 F629 1A1A26267272 .DB $1A,$1A,$26,$26,$72,$72,$88,$C8 3012 F62F 88C8 3013 F631 C4CA26484444 .DB $C4,$CA,$26,$48,$44,$44,$A2,$C8 3013 F637 A2C8 3014 F639 3015 F639 ;******************************* 3016 F639 ;*** AIM TEXT EDITOR *** 3017 F639 ;*** 05/01/78 *** 3018 F639 ;******************************* 3019 F639 3020 F639 ; R=READ FROM ANY INPUT DEVICE 3021 F639 ; I=INSERT A LINE FROM INPUT DEV 3022 F639 ; K=DELETE A LINE 3023 F639 ; U-GO UP ONE LINE 3024 F639 ; D=GO DOWN ONE LINE 3025 F639 ; L=LIST LINES TO OUTPUT DEV 3026 F639 ; T=GO TO TOP OF TEXT 3027 F639 ; B=GO TO BOTTOM OF TEXT 3028 F639 ; F=FIND STRING 3029 F639 ; C=CHANGE STRING TO NEW STRING 3030 F639 ; Q=QUIT EDITOR 3031 F639 ; =DISPLAY CURRENT LINE 3032 F639 3033 F639 ;***** E COMMAND-EDITOR ENTRY (FROM MONITOR) ***** 3034 F639 20 13 EA EDIT JSR CRLOW 3035 F63C A0 6C LDY #EMSG1-M1 3036 F63E 20 AF E7 JSR KEP ;START UP MSG 3037 F641 20 13 EA JSR CRLOW 3038 F644 20 A3 E7 EDI0 JSR FROM 3039 F647 B0 FB BCS EDI0 3040 F649 AD 1E A4 LDA CKSUM ;IS CLR IF ADDR WAS INPUTTED 3041 F64C F0 03 BEQ *+5 3042 F64E 20 DB E2 JSR WRITAZ ;OUTPUT DEFAULT ADDR (0200) 3043 F651 A2 01 LDX #1 3044 F653 BD 1C A4 EDI1 LDA ADDR,X 3045 F656 95 E3 STA TEXT,X 3046 F658 95 E1 STA BOTLN,X 3047 F65A 9D 1A A4 STA S1,X ;FOR MEMORY TEST 3048 F65D CA DEX 3049 F65E 10 F3 BPL EDI1 3050 F660 20 3B E8 JSR BLANK2 3051 F663 20 A7 E7 EDI2 JSR TO ;END 3052 F666 B0 FB BCS EDI2 3053 F668 20 BC F8 JSR TOPNO ;TRANSF TEXT TO ADDR FOR RAM CHECK 3054 F66B AD 1E A4 LDA CKSUM ;IS CLR IF ADDR WAS INPUTTED 3055 F66E F0 10 BEQ EDI4 ;BRNCH IF NOT DEFAULT VALUE 3056 F670 20 34 F9 JSR SAVNOW 3057 F673 20 B6 F6 EDI3 JSR EDI ;CARRY IS SET IF NO RAM THERE 3058 F676 90 FB BCC EDI3 3059 F678 A9 00 LDA #0 ;SET UPPER LIMIT TO BEGINNING... 3060 F67A 8D 1C A4 STA ADDR ;OF PAGE 3061 F67D 20 DB E2 JSR WRITAZ ;OUTPUT DEFAULT VALUE ,UPPER LIMIT 3062 F680 AD 1C A4 EDI4 LDA ADDR 3063 F683 85 E5 STA END 3064 F685 AD 1D A4 LDA ADDR+1 3065 F688 85 E6 STA END+1 3066 F68A 20 34 F9 JSR SAVNOW 3067 F68D ;NOW SEE IF MEMORY IS THERE 3068 F68D 20 B6 F6 EDI5 JSR EDI 3069 F690 90 FB BCC EDI5 3070 F692 A5 E6 LDA END+1 ;CMP WITH END 3071 F694 CD 1D A4 CMP ADDR+1 3072 F697 F0 11 BEQ EDI7 3073 F699 B0 13 BCS EDI8 3074 F69B 20 BC F8 EDI6 JSR TOPNO ;RESTORE NOWLN 3075 F69E A9 00 LDA #0 3076 F6A0 91 DF STA (NOWLN),Y ;END OF TEXT MARKER 3077 F6A2 20 13 EA JSR CRLOW 3078 F6A5 A9 52 LDA #'R' ;FORCE READ COMMAND 3079 F6A7 4C 8D FA JMP ENTRY 3080 F6AA A5 E5 EDI7 LDA END ;IF ZERO MEM IS OKAY 3081 F6AC F0 ED BEQ EDI6 3082 F6AE A9 00 EDI8 LDA #0 3083 F6B0 8D 1C A4 STA ADDR 3084 F6B3 4C 33 EB JMP MEMERR ;NO MEMORY FOR THOSE LIMITS 3085 F6B6 3086 F6B6 A0 00 EDI LDY #0 ;CHCK IF MEMORY WRITES 3087 F6B8 20 B7 FE JSR PATCH6 ;GET BYTE ADDR BY ADDR,ADDR+1 3088 F6BB 48 PHA ;SAVE IT 3089 F6BC A9 AA LDA #$AA ;SET THIS PATTERN 3090 F6BE 20 78 EB JSR SADDR ;CHCK IT 3091 F6C1 D0 09 BNE EDI2B 3092 F6C3 68 PLA 3093 F6C4 20 78 EB JSR SADDR ;RESTORE CHR 3094 F6C7 EE 1D A4 INC ADDR+1 ;NEXT PAG 3095 F6CA 18 CLC ;IT WROTE 3096 F6CB 60 RTS 3097 F6CC 38 EDI2B SEC ;DIDNT WRITE 3098 F6CD 68 PLA 3099 F6CE 60 RTS 3100 F6CF 3101 F6CF ;***** T COMMAND-REENTRY EDITOR ***** 3102 F6CF ;RE-ENTRY POINT,TEXT ALREADY THERE 3103 F6CF 20 24 EA REENTR JSR CRCK ; IF PRI ON 3104 F6D2 20 BC F8 TP JSR TOPNO ;GO TO TOP 3105 F6D5 4C B9 F7 JMP IN03A ;DISPLAY LINE 3106 F6D8 3107 F6D8 ;***** U COMMAND-UP LINE ***** 3108 F6D8 ;GO UP ONE LINE BUT... 3109 F6D8 ;DOWN IN ADDRESSING MEMORY 3110 F6D8 20 DB F8 DNNO JSR ATTOP ;THIS RTN DOESNT PRINT 3111 F6DB 90 06 BCC DOW1 ;NOT TOP 3112 F6DD 20 27 F7 JSR PLNE ;ARE AT TOP 3113 F6E0 4C 78 FA JMP ERR0 3114 F6E3 A0 00 DOW1 LDY #0 3115 F6E5 20 1D F9 JSR SUB ;DECREMENT NOWLN PAST 3116 F6E8 20 1D F9 DOW2 JSR SUB 3117 F6EB 20 DB F8 JSR ATTOP 3118 F6EE B0 30 BCS UP4 3119 F6F0 B1 DF LDA (NOWLN),Y 3120 F6F2 C9 0D CMP #CR 3121 F6F4 D0 F2 BNE DOW2 3122 F6F6 4C 28 F9 JMP AD1 3123 F6F9 3124 F6F9 ;***** D COMMAND-DOWN LINE ***** 3125 F6F9 ;GO DOWN ONE LINE BUT... 3126 F6F9 ;UP IN ADDRESSING MEMORY 3127 F6F9 20 09 F7 UP JSR UPNO 3128 F6FC 20 27 F7 JSR PLNE ;DISPLAY LINE & CHCK BOTTOM 3129 F6FF 20 E9 F8 JSR ATBOT 3130 F702 90 1C BCC UP4 3131 F704 A0 72 LDY #EMSG2-M1 ;PRINT "END" 3132 F706 4C AF E7 JMP KEP 3133 F709 A0 00 UPNO LDY #0 3134 F70B 20 E9 F8 JSR ATBOT 3135 F70E 90 03 BCC UP1 3136 F710 4C 5C FA JMP ENDERR 3137 F713 B1 DF UP1 LDA (NOWLN),Y 3138 F715 F0 09 BEQ UP4 3139 F717 C8 INY 3140 F718 C9 0D CMP #CR 3141 F71A D0 F7 BNE UP1 3142 F71C 98 TYA 3143 F71D 20 2A F9 JSR ADDA ;ADD LENGTH TO CURRENT LINE 3144 F720 60 UP4 RTS 3145 F721 3146 F721 ;***** B COMMAND-GO TO BOTTOM ***** 3147 F721 20 C5 F8 BT JSR SETBOT 3148 F724 ;START U-COMMAND HERE 3149 F724 20 D8 F6 DOWN JSR DNNO ;U COMMAND 3150 F727 3151 F727 ;***** COMMAND-DISPLAY CURRENT LINE ***** 3152 F727 A0 00 PLNE LDY #0 ;PRINT CURRENT LINE 3153 F729 B1 DF P02 LDA (NOWLN),Y 3154 F72B F0 0E BEQ P01 ;PAST END ? 3155 F72D C9 0D CMP #CR ;DONE? 3156 F72F F0 0A BEQ P01 3157 F731 20 BC E9 JSR OUTALL ;PUT IT SOMEWHERE 3158 F734 99 38 A4 STA DIBUFF,Y 3159 F737 C8 INY 3160 F738 4C 29 F7 JMP P02 3161 F73B 84 EA P01 STY LENGTH 3162 F73D 84 E9 STY OLDLEN 3163 F73F AC 13 A4 P03 LDY OUTFLG ;ONE MORE FOR TAPE 3164 F742 C0 0D CPY #CR 3165 F744 F0 03 BEQ P00 3166 F746 4C F0 E9 JMP CRLF ;TO OUTPUT DEV 3167 F749 4C 24 EA P00 JMP CRCK ;, & DONT CLR DISPL 3168 F74C 3169 F74C ;***** K COMMAND-KILL LINE ***** 3170 F74C ;DELETE CURRENT LINE 3171 F74C 20 B6 F8 DLNE JSR KIFLG ;CLR K OR I COMM FLG 3172 F74F EA NOP 3173 F750 EA NOP 3174 F751 EA NOP 3175 F752 20 27 F7 JSR PLNE 3176 F755 20 E9 F8 JSR ATBOT 3177 F758 B0 CD BCS PLNE ;AT END OF TEXT 3178 F75A A0 00 LDY #0 3179 F75C 84 EA STY LENGTH 3180 F75E 20 3F F9 JSR REPLAC ;KILL LINE 3181 F761 4C 27 F7 JMP PLNE 3182 F764 3183 F764 ;***** I COMMAND-INSERT LINE ***** 3184 F764 20 6D F7 IN JSR INL 3185 F767 20 F9 F6 JSR UP ;DISPLAY NEXT LINE DOWN 3186 F76A 4C 78 FA JMP ERR0 ;IF AT BOTTOM PRINT "END" 3187 F76D 20 B6 F8 INL JSR KIFLG ;CLR K OR I COMM FLG 3188 F770 A0 00 LDY #0 ;GET LINE INTO DIBUFF 3189 F772 84 E9 STY OLDLEN 3190 F774 20 BD E7 JSR PROMPT 3191 F777 20 44 EB JSR CLR 3192 F77A 20 93 E9 IN02 JSR INALL 3193 F77D 20 F8 FE JSR PATC12 ;CLR, SO WE CAN OUTPUT TO PRI 3194 F780 C9 7F CMP #$7F ;RUB 3195 F782 4C 2A FF JMP PATC17 ;NO ZEROS IN CASE OF PAPER TAPE 3196 F785 C9 0A IN02A CMP #LF 3197 F787 F0 F1 BEQ IN02 3198 F789 C9 0D CMP #CR 3199 F78B F0 1B BEQ IN03 3200 F78D C0 3C CPY #60 ;DO NOT INCR Y IF 60 3201 F78F B0 08 BCS IN03B 3202 F791 99 38 A4 STA DIBUFF,Y 3203 F794 C8 INY 3204 F795 C0 3C CPY #60 3205 F797 D0 E1 BNE IN02 ;CONTIN , DISP WONT ALLOW > 60 CHR` 3206 F799 A0 3C IN03B LDY #60 ;SET Y TO MAX OF 60 3207 F79B A9 01 LDA #$01 3208 F79D 0D 11 A4 ORA PRIFLG ;DO NOT OUTPUT TO PRI ANY MORE 3209 F7A0 8D 11 A4 STA PRIFLG ;OTHERWISE CLOBBERS THE BUFFER 3210 F7A3 8C 15 A4 STY CURPO2 3211 F7A6 D0 D2 BNE IN02 ;GO BACK 3212 F7A8 84 EA IN03 STY LENGTH 3213 F7AA C0 00 CPY #0 ;FIRST CHAR? 3214 F7AC D0 17 BNE IN05 3215 F7AE AD 19 A4 LDA COUNT ;K OR I COMM FLG ? 3216 F7B1 D0 12 BNE IN05 ;BRANCH IF C COMMAND 3217 F7B3 20 24 EA JSR CRCK ; IF PRI PNTR DIFF FROM 0 3218 F7B6 20 03 FF JSR PATC13 ;TURN ON TAPES & SET DEFAULT DEV 3219 F7B9 20 27 F7 IN03A JSR PLNE ;DISPLAY NEXT LINE DOWN 3220 F7BC 20 09 F7 JSR UPNO ;PRINT "END" IF BOTTOM 3221 F7BF 20 D8 F6 JSR DNNO 3222 F7C2 4C 78 FA JMP ERR0 3223 F7C5 20 3F F9 IN05 JSR REPLAC ;INSERT THE LINE 3224 F7C8 4C 24 EA JMP CRCK ; IF PRI PTR NOT 0 3225 F7CB 3226 F7CB ;***** R COMMAND-READ LINE ***** 3227 F7CB ;READ TEXT FROM ANY INPUT DEVICE UNTIL 3228 F7CB ;TWO CONSECUTIVE ARE ENCOUNTER. 3229 F7CB 20 48 E8 INPU JSR WHEREI 3230 F7CE AC 12 A4 LDY INFLG ;IF TAPE DO NOT ERRASE BUFFER 3231 F7D1 C0 54 CPY #'T' 3232 F7D3 F0 03 BEQ INPU1 3233 F7D5 20 13 EA JSR CRLOW 3234 F7D8 20 6D F7 INPU1 JSR INL 3235 F7DB 20 09 F7 JSR UPNO ;NEXT LINE 3236 F7DE 4C D8 F7 JMP INPU1 3237 F7E1 3238 F7E1 ;***** L COMMAND-LIST LINES ***** 3239 F7E1 ;PRINT FROM HERE N LINES TO ACTIVE OUTPUT DEV 3240 F7E1 20 37 E8 LST JSR PSL1 ;PRINT "/" 3241 F7E4 20 85 E7 JSR GCNT ;GET LINES COUNT 3242 F7E7 20 13 EA JSR CRLOW 3243 F7EA 20 71 E8 JSR WHEREO ;WHERE TO 3244 F7ED 4C F8 F7 JMP LST02 ;ONE MORE LINE 3245 F7F0 20 07 E9 LST01 JSR RCHEK 3246 F7F3 20 90 E7 JSR DONE 3247 F7F6 F0 0B BEQ LST3 3248 F7F8 20 27 F7 LST02 JSR PLNE 3249 F7FB 20 09 F7 JSR UPNO ;NEXT LINE 3250 F7FE 20 E9 F8 JSR ATBOT 3251 F801 90 ED BCC LST01 ;NO 3252 F803 20 3F F7 LST3 JSR P03 ;ONE MORE CRLF FOR TAPE 3253 F806 20 0D FF JSR PATC14 ;CLOSE TAPE IF NEEDED 3254 F809 4C 5C FA JMP ENDERR 3255 F80C 3256 F80C ;***** F COMMAND-FIND STRING ***** 3257 F80C ;FIND STRING AND PRINT LINE TO TERMINAL 3258 F80C 20 1E F8 FCHAR JSR FCH 3259 F80F AD 15 A4 FCHA1 LDA CURPO2 ;SAVE BUFFER PNTR 3260 F812 48 PHA 3261 F813 20 44 EB JSR CLR ;CLEAR DISP PNTR 3262 F816 20 27 F7 JSR PLNE 3263 F819 68 PLA 3264 F81A 8D 15 A4 STA CURPO2 3265 F81D 60 RTS 3266 F81E ;FIND A CHARACTER STRING 3267 F81E A0 00 FCH LDY #0 3268 F820 20 BD E7 JSR PROMPT 3269 F823 20 5F E9 FC1 JSR RDRUP ;GET THE CHARACTER 3270 F826 C9 0D CMP #CR ;REUSE OLD ARGUMENT?? 3271 F828 D0 0A BNE FC3 3272 F82A C0 00 CPY #0 ;FIRST CHAR? 3273 F82C D0 06 BNE FC3 3274 F82E 20 09 F7 FC2 JSR UPNO ;NEXT LINE DOWN 3275 F831 4C 49 F8 JMP FC5 3276 F834 C9 0D FC3 CMP #CR ;DONE 3277 F836 F0 0B BEQ FC4 3278 F838 99 EB 00 STA STRING,Y 3279 F83B C8 INY 3280 F83C C0 14 CPY #20 ;MAX LENGTH 3281 F83E D0 E3 BNE FC1 3282 F840 4C 72 FA JMP ERROR 3283 F843 20 24 EA FC4 JSR CRCK ;CLEAR DISPLAY 3284 F846 8C 29 A4 STY STIY+2 ;COUNT OF CHARACTERS 3285 F849 A0 00 FC5 LDY #0 3286 F84B 8C 15 A4 STY CURPO2 ;START AT BEGINNING OF LINENTR IS 3287 F84E AC 15 A4 FC6 LDY CURPO2 ;CLOBBER 3288 F851 A2 00 LDX #0 3289 F853 B1 DF FC7 LDA (NOWLN),Y ;GET THE CHARACTER 3290 F855 D0 03 BNE FC8 ;NOT AT END 3291 F857 4C 5C FA JMP ENDERR 3292 F85A C9 0D FC8 CMP #CR ;END OF LINE 3293 F85C F0 D0 BEQ FC2 3294 F85E D5 EB CMP STRING,X 3295 F860 F0 06 BEQ FC9 3296 F862 EE 15 A4 INC CURPO2 3297 F865 4C 4E F8 JMP FC6 3298 F868 C8 FC9 INY 3299 F869 E8 INX 3300 F86A EC 29 A4 CPX STIY+2 ;DONE? 3301 F86D D0 E4 BNE FC7 3302 F86F 60 RTS 3303 F870 3304 F870 ;***** Q COMMAND-EXIT EDITOR ***** 3305 F870 ; EXIT THE TEXT EDITOR NEATLY 3306 F870 20 13 EA STOP JSR CRLOW 3307 F873 4C A1 E1 JMP COMIN 3308 F876 3309 F876 ;***** C COMMAND-CHANGE STRING ***** 3310 F876 ;CHANGE STRING TO ANOTHER STRING IN A LINE 3311 F876 20 B2 F8 CHNG JSR CFLG ;SET C COMMAND FLG 3312 F879 20 0C F8 JSR FCHAR ;FIND CORRECT LINE 3313 F87C 20 3C E9 CHN1 JSR READ ;IS IF OK 3314 F87F C9 0D CMP #CR 3315 F881 F0 09 BEQ CHN2 3316 F883 20 2E F8 JSR FC2 ;TRY NEXT ONE 3317 F886 20 0F F8 JSR FCHA1 ; SHOW LINE 3318 F889 4C 7C F8 JMP CHN1 3319 F88C AD 29 A4 CHN2 LDA STIY+2 ;GET CHAR COUNT 3320 F88F 85 E9 STA OLDLEN ;GET READY FOR REPLAC 3321 F891 AD 15 A4 LDA CURPO2 ;PNTR TO BEGINNING OF STRING 3322 F894 48 PHA ;SAVE IT 3323 F895 20 2A F9 JSR ADDA ;ADD TO NOWLN (LINE PNTR) 3324 F898 20 44 EB JSR CLR ;CLEAR DISP 3325 F89B A0 05 LDY #M3-M1 ;PRINT "TO" 3326 F89D 20 AF E7 JSR KEP 3327 F8A0 A0 00 LDY #0 3328 F8A2 20 7A F7 JSR IN02 ;GET NEW STRING & REPLAC 3329 F8A5 68 PLA 3330 F8A6 AA TAX 3331 F8A7 F0 06 BEQ CHN4 3332 F8A9 20 1D F9 CHN3 JSR SUB ;RESTORE NOWLN WHERE IT WAS 3333 F8AC CA DEX 3334 F8AD D0 FA BNE CHN3 3335 F8AF 4C 27 F7 CHN4 JMP PLNE ;DISPLAY THE CHANGED LINE 3336 F8B2 3337 F8B2 ;THE FOLLOWING ARE SUBROUTINES USED BY COMMANDS 3338 F8B2 A9 01 CFLG LDA #1 ;SET FLG FOR C COMMAND 3339 F8B4 D0 02 BNE KI2 3340 F8B6 A9 00 KIFLG LDA #0 ;CLR K OR I COMMAND FLG 3341 F8B8 8D 19 A4 KI2 STA COUNT 3342 F8BB 60 RTS 3343 F8BC 3344 F8BC A5 E3 TOPNO LDA TEXT ;SET CURRENT LINE TO TOP 3345 F8BE A6 E4 LDX TEXT+1 3346 F8C0 85 DF TPO1 STA NOWLN 3347 F8C2 86 E0 STX NOWLN+1 3348 F8C4 60 RTS 3349 F8C5 3350 F8C5 A5 E1 SETBOT LDA BOTLN ;SET CURRENT LINE TO BOTTOM 3351 F8C7 A6 E2 LDX BOTLN+1 3352 F8C9 85 E7 STA SAVE 3353 F8CB 86 E8 STX SAVE+1 3354 F8CD 4C C0 F8 JMP TPO1 3355 F8D0 3356 F8D0 AD 1C A4 RESNOW LDA ADDR ;RESTORE CURRENT LINE ADDRESS 3357 F8D3 85 DF STA NOWLN 3358 F8D5 AD 1D A4 LDA ADDR+1 3359 F8D8 85 E0 STA NOWLN+1 3360 F8DA 60 RTS 3361 F8DB 3362 F8DB ; SEE IF CURRENT LINE AT TOP (C SET IF SO) 3363 F8DB A5 DF ATTOP LDA NOWLN 3364 F8DD C5 E3 CMP TEXT 3365 F8DF D0 16 BNE AT01 3366 F8E1 A5 E0 LDA NOWLN+1 3367 F8E3 C5 E4 CMP TEXT+1 3368 F8E5 D0 10 BNE AT01 3369 F8E7 38 SEC 3370 F8E8 60 RTS 3371 F8E9 3372 F8E9 ; SEE IF CURRENT LINE AT BOTTOM (C SET IF SO) 3373 F8E9 A5 DF ATBOT LDA NOWLN 3374 F8EB A6 E0 LDX NOWLN+1 3375 F8ED C5 E1 CMP BOTLN 3376 F8EF D0 06 BNE AT01 3377 F8F1 E4 E2 CPX BOTLN+1 3378 F8F3 D0 02 BNE AT01 3379 F8F5 38 AT02 SEC 3380 F8F6 60 RTS 3381 F8F7 18 AT01 CLC 3382 F8F8 60 RTS 3383 F8F9 3384 F8F9 ;SEE IF WE RAN PAST END OF BUFFER LIMIT 3385 F8F9 A5 E1 ATEND LDA BOTLN 3386 F8FB A6 E2 LDX BOTLN+1 3387 F8FD E4 E6 CPX END+1 ;HIGH BYTE > OR = ? 3388 F8FF 90 F6 BCC AT01 3389 F901 D0 F2 BNE AT02 3390 F903 C5 E5 CMP END ;LOW BYTE > OR = ? 3391 F905 90 F0 BCC AT01 3392 F907 B0 EC BCS AT02 3393 F909 3394 F909 ; SAVE CURRENT LINE (NEWLN) IN S1 3395 F909 A5 DF NOWS1 LDA NOWLN 3396 F90B A6 E0 LDX NOWLN+1 3397 F90D 4C 16 F9 JMP ADDS1A 3398 F910 3399 F910 ; MOVE ADDR INTO S1 3400 F910 AD 1C A4 ADDRS1 LDA ADDR 3401 F913 AE 1D A4 LDX ADDR+1 3402 F916 8D 1A A4 ADDS1A STA S1 3403 F919 8E 1B A4 STX S1+1 3404 F91C 60 RTS 3405 F91D 3406 F91D ; SUBTRACT ONE FROM CURRENT LINE (NOWLN) 3407 F91D C6 DF SUB DEC NOWLN 3408 F91F A5 DF LDA NOWLN 3409 F921 C9 FF CMP #$FF 3410 F923 D0 02 BNE SUB1 3411 F925 C6 E0 DEC NOWLN+1 3412 F927 60 SUB1 RTS 3413 F928 3414 F928 ; ADD ACC TO CURRENT LINE (NOWLN) 3415 F928 A9 01 AD1 LDA #1 3416 F92A 18 ADDA CLC 3417 F92B 65 DF ADC NOWLN 3418 F92D 85 DF STA NOWLN 3419 F92F 90 02 BCC ADDA1 3420 F931 E6 E0 INC NOWLN+1 3421 F933 60 ADDA1 RTS 3422 F934 3423 F934 A5 DF SAVNOW LDA NOWLN ;SAVE CURRENT LINE INTO ADDR 3424 F936 8D 1C A4 STA ADDR 3425 F939 A5 E0 LDA NOWLN+1 3426 F93B 8D 1D A4 STA ADDR+1 3427 F93E 60 REP2 RTS 3428 F93F 3429 F93F ;MOVE CURRENT TEXT AROUND TO HAVE 3430 F93F ;SPACE TO PUT IN THE NEW BUFFER 3431 F93F A4 EA REPLAC LDY LENGTH 3432 F941 C4 E9 CPY OLDLEN ;COMPARE OLD AND NEW LENGTHS 3433 F943 D0 1A BNE R2W ;BRANCH IF DIFF 3434 F945 F0 07 BEQ R87 ;LENGTHS ARE EQUAL. JUST REPLACE 3435 F947 A9 0D R8 LDA #CR 3436 F949 91 DF STA (NOWLN),Y 3437 F94B 20 4A FA JSR GOGO 3438 F94E 3439 F94E ;LENGTH = OLDLEN 3440 F94E 88 R87 DEY 3441 F94F C0 FF CPY #$FF 3442 F951 F0 EB BEQ REP2 3443 F953 B9 38 A4 R88 LDA DIBUFF,Y 3444 F956 91 DF STA (NOWLN),Y 3445 F958 20 4A FA JSR GOGO 3446 F95B 88 DEY 3447 F95C 10 F5 BPL R88 3448 F95E 60 RTS 3449 F95F B0 6E R2W BCS R100 ;LENGTH > OLDLEN 3450 F961 3451 F961 ;LENGTH < OLDLEN 3452 F961 20 34 F9 JSR SAVNOW ;PUT NOWLN INTO ADDR 3453 F964 20 10 F9 JSR ADDRS1 ;PUT IT IN S1 ALSO 3454 F967 A5 E9 LDA OLDLEN 3455 F969 38 SEC 3456 F96A E5 EA SBC LENGTH ;GET DIFFERENCE IN LENGTHS 3457 F96C A4 EA LDY LENGTH 3458 F96E D0 07 BNE RQP 3459 F970 AE 19 A4 LDX COUNT ;C-COMM ? 3460 F973 D0 02 BNE RQP ;YES, JUMP 3461 F975 69 00 ADC #0 ;INCLUDE 3462 F977 48 RQP PHA 3463 F978 18 CLC 3464 F979 6D 1A A4 ADC S1 3465 F97C 8D 1A A4 STA S1 3466 F97F 90 03 BCC R6 3467 F981 EE 1B A4 INC S1+1 3468 F984 A9 1A R6 LDA #S1 3469 F986 20 58 EB JSR LDAY 3470 F989 91 DF STA (NOWLN),Y ;...AND NOVE IT UP (DOWN IN ADDR) 3471 F98B 20 4A FA JSR GOGO 3472 F98E AA TAX 3473 F98F AD 1A A4 LDA S1 3474 F992 C5 E1 CMP BOTLN ;DONE ?? 3475 F994 D0 07 BNE R5 3476 F996 AD 1B A4 LDA S1+1 3477 F999 C5 E2 CMP BOTLN+1 3478 F99B F0 0E BEQ R7 3479 F99D 20 28 F9 R5 JSR AD1 3480 F9A0 EE 1A A4 INC S1 3481 F9A3 D0 03 BNE R55 3482 F9A5 EE 1B A4 INC S1+1 3483 F9A8 4C 84 F9 R55 JMP R6 3484 F9AB 20 D0 F8 R7 JSR RESNOW ;RESTORE NOWLN 3485 F9AE 68 PLA ;RESTORE DIFFERENCE 3486 F9AF 8D 2A A4 STA CPIY ;SAVE IT 3487 F9B2 A5 E1 LDA BOTLN 3488 F9B4 38 SEC 3489 F9B5 ED 2A A4 SBC CPIY ;AND SUBTRACT IT FROM BOTTOM 3490 F9B8 85 E1 STA BOTLN 3491 F9BA B0 02 BCS R9 3492 F9BC C6 E2 DEC BOTLN+1 3493 F9BE AD 19 A4 R9 LDA COUNT ;C COMM OR K ,I COMM ? 3494 F9C1 D0 04 BNE R10 3495 F9C3 A4 EA LDY LENGTH 3496 F9C5 D0 05 BNE R11 3497 F9C7 A4 EA R10 LDY LENGTH 3498 F9C9 D0 83 BNE R87 3499 F9CB 60 RTS 3500 F9CC 4C 47 F9 R11 JMP R8 3501 F9CF 3502 F9CF ;LENGTH > OLDLEN 3503 F9CF A5 EA R100 LDA LENGTH ;NEW LINE IS LONGER 3504 F9D1 38 SEC 3505 F9D2 E5 E9 SBC OLDLEN 3506 F9D4 A4 E9 LDY OLDLEN 3507 F9D6 D0 02 BNE R101 ;ALREADY HAVE ROOM FOR CR 3508 F9D8 69 00 ADC #0 ;ADD ONE TO DIFFERENCE 3509 F9DA 48 R101 PHA 3510 F9DB 20 34 F9 JSR SAVNOW ;NOWLN INTO S1 3511 F9DE 20 C5 F8 JSR SETBOT 3512 F9E1 A0 00 LDY #0 3513 F9E3 B1 DF R102 LDA (NOWLN),Y 3514 F9E5 C9 00 CMP #0 3515 F9E7 F0 06 BEQ R108 3516 F9E9 20 28 F9 JSR AD1 3517 F9EC 4C E3 F9 JMP R102 3518 F9EF 68 R108 PLA 3519 F9F0 48 PHA 3520 F9F1 18 CLC 3521 F9F2 65 E1 ADC BOTLN ;ADD DIFFERENCE TO END 3522 F9F4 85 E1 STA BOTLN ;STORE NEW END 3523 F9F6 90 02 BCC R103 3524 F9F8 E6 E2 INC BOTLN+1 3525 F9FA 20 F9 F8 R103 JSR ATEND 3526 F9FD 90 0B BCC R107 3527 F9FF A5 E7 LDA SAVE ;RESTORE OLD BOTTOM 3528 FA01 85 E1 STA BOTLN 3529 FA03 A5 E8 LDA SAVE+1 3530 FA05 85 E2 STA BOTLN+1 3531 FA07 4C 5C FA JMP ENDERR ;RAN PAST BUFFER END 3532 FA0A 20 09 F9 R107 JSR NOWS1 ;SAVE CURRENT END 3533 FA0D 68 PLA 3534 FA0E 18 CLC 3535 FA0F 65 DF ADC NOWLN 3536 FA11 85 DF STA NOWLN 3537 FA13 90 02 BCC R104 3538 FA15 E6 E0 INC NOWLN+1 3539 FA17 A9 1A R104 LDA #S1 3540 FA19 20 58 EB JSR LDAY 3541 FA1C 91 DF STA (NOWLN),Y 3542 FA1E 20 4A FA JSR GOGO 3543 FA21 AD 1A A4 LDA S1 3544 FA24 CD 1C A4 CMP ADDR 3545 FA27 D0 08 BNE R105 3546 FA29 AD 1B A4 LDA S1+1 3547 FA2C CD 1D A4 CMP ADDR+1 ;BACK WHERE WE STARTED ?? 3548 FA2F F0 13 BEQ R106 ;BRANCH IF DONE 3549 FA31 20 1D F9 R105 JSR SUB 3550 FA34 CE 1A A4 DEC S1 3551 FA37 AD 1A A4 LDA S1 3552 FA3A C9 FF CMP #$FF 3553 FA3C D0 03 BNE R1051 3554 FA3E CE 1B A4 DEC S1+1 3555 FA41 4C 17 FA R1051 JMP R104 3556 FA44 20 D0 F8 R106 JSR RESNOW 3557 FA47 4C BE F9 JMP R9 3558 FA4A 3559 FA4A ;SEE IF IT WROTE INTO MEMORY 3560 FA4A D1 DF GOGO CMP (NOWLN),Y 3561 FA4C F0 0D BEQ GOGO1 3562 FA4E ;MOVE ADDRESS 3563 FA4E A5 DF LDA NOWLN 3564 FA50 8D 1C A4 STA ADDR 3565 FA53 A5 E0 LDA NOWLN+1 3566 FA55 8D 1D A4 STA ADDR+1 3567 FA58 4C 33 EB JMP MEMERR 3568 FA5B 60 GOGO1 RTS ;OK 3569 FA5C 3570 FA5C 20 44 EB ENDERR JSR CLR ;CLEAR PNTR 3571 FA5F A0 72 LDY #EMSG2-M1 ;PRINT "END" 3572 FA61 20 AF E7 JSR KEP 3573 FA64 20 D8 F6 JSR DNNO ;BACK UP TO LAST LINE 3574 FA67 20 42 E8 JSR TTYTST ;IF TTY 3575 FA6A D0 03 BNE ENDE2 3576 FA6C 20 13 EA JSR CRLOW 3577 FA6F 4C 78 FA ENDE2 JMP ERR0 3578 FA72 20 FE E8 ERROR JSR LL 3579 FA75 20 D4 E7 JSR QM 3580 FA78 20 44 EB ERR0 JSR CLR 3581 FA7B A2 FF LDX #$FF 3582 FA7D COM =ERR0 3583 FA7D 9A TXS 3584 FA7E 20 FE E8 JSR LL ;I/O TO TERMINAL (KB,D/P OR TTY) 3585 FA81 D8 CLD 3586 FA82 20 88 FA JSR COMM 3587 FA85 4C 78 FA JMP ERR0 3588 FA88 3589 FA88 ;GET EDITOR COMMANDS & DECODE 3590 FA88 A2 00 COMM LDX #0 3591 FA8A 20 BC FE JSR PATCH8 ;READ A CHAR WITH "=< >" 3592 FA8D A2 0B ENTRY LDX #COMCN1 3593 FA8F DD AC FA CD02 CMP COMTBL,X ;COMPARE WITH ALLOWABLE COMMANDS 3594 FA92 F0 0C BEQ CFND1 ;MATCH ,SO PROCESS COMMAND 3595 FA94 CA DEX 3596 FA95 10 F8 BPL CD02 3597 FA97 20 D4 E7 JSR QM ;NOT IN LIST ,SO NOT LEGAL COMMAND 3598 FA9A 20 24 EA JSR CRCK 3599 FA9D 4C 78 FA JMP ERR0 3600 FAA0 20 17 FF CFND1 JSR PATC15 ; & START DECODING COMMAND 3601 FAA3 BD B9 FA LDA JTBL+1,X 3602 FAA6 8D 1B A4 STA S1+1 3603 FAA9 6C 1A A4 JMP (S1) 3604 FAAC 3605 FAAC COMCN1 =11 3606 FAAC ;COMMAND TABLE 3607 FAAC 4B2052495544COMTBL .DB "K RIUDLTBFQC" 3607 FAB2 4C5442465143 3608 FAB8 4CF727F7CBF7JTBL .DW DLNE,PLNE,INPU,IN,DOWN,UP 3608 FABE 64F724F7F9F6 3609 FAC4 E1F7D2F621F7 .DW LST,TP,BT,FCHAR,STOP,CHNG 3609 FACA 0CF870F876F8 3610 FAD0 3611 FAD0 ;READ FROM MEMORY FOR ASSEMBLER 3612 FAD0 98 MREAD TYA 3613 FAD1 48 PHA 3614 FAD2 A0 00 LDY #0 3615 FAD4 B1 DF LDA (NOWLN),Y 3616 FAD6 8D 2A A4 STA CPIY 3617 FAD9 20 28 F9 JSR AD1 3618 FADC 68 PLA 3619 FADD A8 TAY 3620 FADE AD 2A A4 LDA CPIY 3621 FAE1 60 RTS 3622 FAE2 3623 FAE2 ;THIS PROGRAM CONVERS MNEMONIC INSTRUCTIONS INTO MACHINE 3624 FAE2 ;CODE AND STORES IT IN THE DESIGNATED MEMORY AREA 3625 FAE2 3626 FAE2 ;ROM TABLE LOCATIONS: 3627 FAE2 00020008F2FFTYPTR1 .DB 00,02,00,08,$F2,$FF,$80,01 3627 FAE8 8001 3628 FAEA C0E2C0C0FF00 .DB $C0,$E2,$C0,$C0,$FF,00,00 3628 FAF0 00 3629 FAF1 0800108040C0TYPTR2 .DB 08,00,$10,$80,$40,$C0,00,$C0 3629 FAF7 00C0 3630 FAF9 00400000E420 .DB $00,$40,00,00,$E4,$20,$80 3630 FAFF 80 3631 FB00 00FC000808F8CORR .DB 00,$FC,00,08,08,$F8,$FC,$F4 3631 FB06 FCF4 3632 FB08 0C1004F40020 .DB $0C,$10,04,$F4,00,$20,$10 3632 FB0E 10 3633 FB0F 00000F010101SIZEM .DB 00,00,$0F,01,01,01,$11,$11 3633 FB15 1111 3634 FB17 020211110212 .DB 02,02,$11,$11,02,$12,00 3634 FB1D 00 3635 FB1E 3636 FB1E 000810182028STCODE .DB $00,$08,$10,$18,$20,$28,$30,$38 3636 FB24 3038 3637 FB26 404850586068 .DB $40,$48,$50,$58,$60,$68,$70,$78 3637 FB2C 7078 3638 FB2E 80889098ACA8 .DB $80,$88,$90,$98,$AC,$A8,$B0,$B8 3638 FB34 B0B8 3639 FB36 CCC8D0D8ECE8 .DB $CC,$C8,$D0,$D8,$EC,$E8,$F0,$F8 3639 FB3C F0F8 3640 FB3E 0C2C4C4C8CAC .DB $0C,$2C,$4C,$4C,$8C,$AC,$CC,$EC 3640 FB44 CCEC 3641 FB46 8A9AAABACADA .DB $8A,$9A,$AA,$BA,$CA,$DA,$EA,$FA 3641 FB4C EAFA 3642 FB4E 0E2E4E6E8EAE .DB $0E,$2E,$4E,$6E,$8E,$AE,$CE,$EE 3642 FB54 CEEE 3643 FB56 0D2D4D6D8DAD .DB $0D,$2D,$4D,$6D,$8D,$AD,$CD,$ED 3643 FB5C CDED 3644 FB5E 0D0D0C0D0E0DTYPTB .DB 13,13,12,13,14,13,12,13 3644 FB64 0C0D 3645 FB66 0D0D0C0D0D0D .DB 13,13,12,13,13,13,12,13 3645 FB6C 0C0D 3646 FB6E 0F0D0C0D090D .DB 15,13,12,13,9,13,12,13 3646 FB74 0C0D 3647 FB76 080D0C0D080D .DB 8,13,12,13,8,13,12,13 3647 FB7C 0C0D 3648 FB7E 0F060B0B040A .DB 15,6,11,11,4,10,8,8 3648 FB84 0808 3649 FB86 0D0D0D0D0D0F .DB 13,13,13,13,13,15,13,15 3649 FB8C 0D0F 3650 FB8E 070707070509 .DB 7,7,7,7,5,9,3,3 3650 FB94 0303 3651 FB96 010101010201 .DB 1,1,1,1,2,1,1,1 3651 FB9C 0101 3652 FB9E 3653 FB9E ;PROGRAM STARTS HERE 3654 FB9E AD 25 A4 MNEENT LDA SAVPC ;TRANSF PC TO ADDR 3655 FBA1 8D 1C A4 STA ADDR 3656 FBA4 AD 26 A4 LDA SAVPC+1 3657 FBA7 8D 1D A4 STA ADDR+1 3658 FBAA 20 24 EA STARTM JSR CRCK ; IF PRI PTR DIFF FROM 0 3659 FBAD A9 00 LDA #0 3660 FBAF 8D 37 A4 STA CODFLG 3661 FBB2 20 3E E8 JSR BLANK 3662 FBB5 20 DB E2 JSR WRITAZ ;WRITE ADDRESS 3663 FBB8 20 3B E8 JSR BLANK2 3664 FBBB 20 3B E8 JSR BLANK2 3665 FBBE 4C 06 FE JMP MNEM ;JUMP TO INPUT MNEMONIC OPCODE 3666 FBC1 A9 00 MODEM LDA #00 ;SET UP TO FORM MODE MATCH 3667 FBC3 8D 26 01 STA TMASK1 3668 FBC6 8D 27 01 STA TMASK2 3669 FBC9 20 3E E8 JSR BLANK 3670 FBCC AC 2E 01 LDY TYPE 3671 FBCF 38 SEC 3672 FBD0 6E 26 01 PNTLUP ROR TMASK1 ;SHIFT POINTER TO INSTRUCTION TYPE 3673 FBD3 6E 27 01 ROR TMASK2 3674 FBD6 88 DEY 3675 FBD7 D0 F7 BNE PNTLUP 3676 FBD9 3677 FBD9 ;TEST FOR ONE BYTE INSTRUCTION 3678 FBD9 AC 2E 01 LDY TYPE 3679 FBDC C0 0D CPY #$0D 3680 FBDE D0 05 BNE RDADDR 3681 FBE0 A2 00 LDX #00 3682 FBE2 3683 FBE2 ;INPUT ADRESS FIELD 3684 FBE2 4C CB FC JMP OPCOMP 3685 FBE5 A0 06 RDADDR LDY #06 ;CLEAR ADDRESS FIELD (NON HEX) 3686 FBE7 A9 51 LDA #'Q' 3687 FBE9 99 32 01 CLRLUP STA ADFLD-1,Y 3688 FBEC 88 DEY 3689 FBED D0 FA BNE CLRLUP ;(LEAVES Y = 0 FOR NEXT PHASE) 3690 FBEF 20 5F E9 JSR RDRUP ;WITH RUBOUT 3691 FBF2 C9 20 CMP #' ' ;IGNORE SPACE CHARACTERS 3692 FBF4 F0 EF BEQ RDADDR 3693 FBF6 99 33 01 STORCH STA ADFLD,Y ;STORE ADDRESS CHARACTER 3694 FBF9 C8 INY 3695 FBFA C0 07 CPY #07 3696 FBFC B0 5C BCS TRY56 3697 FBFE 20 5F E9 JSR RDRUP ;READ REMAINDER OF ADDRESS CHARS 3698 FC01 C9 20 CMP #' ' ;THRU WHEN OR 3699 FC03 D0 05 BNE STOR1 3700 FC05 EE 37 A4 INC CODFLG ;SET CODE FLG 3701 FC08 D0 04 BNE EVAL 3702 FC0A C9 0D STOR1 CMP #CR ;CHECK FOR 3703 FC0C D0 E8 BNE STORCH 3704 FC0E 3705 FC0E ;SEPARATE ADDRESS MODE FROM ADDRESS FIELD 3706 FC0E 8C 31 A4 EVAL STY TEMPX ;TEMPX NOW HAS NUMBER OF CHAR 3707 FC11 AD 33 01 LDA ADFLD ;CHECK FIRST CHAR FOR # OR ( 3708 FC14 C9 23 CMP #'#' 3709 FC16 F0 25 BEQ HATCJ 3710 FC18 C9 28 CMP #'(' 3711 FC1A F0 5A BEQ PAREN 3712 FC1C AD 31 A4 LDA TEMPX ;CHECK FOR ACCUMULATOR MODE 3713 FC1F C9 01 CMP #01 3714 FC21 D0 05 BNE TRYZP 3715 FC23 A2 01 ACCUM LDX #01 3716 FC25 4C CB FC JMP OPCOMP 3717 FC28 C9 02 TRYZP CMP #02 ;CHECK FOR ZERO PAGE MODE 3718 FC2A D0 14 BNE TRY34 3719 FC2C AD 2E 01 LDA TYPE ;CHCK FOR BRNCH WITH RELATIVE ADDR` 3720 FC2F C9 0C CMP #$0C 3721 FC31 D0 05 BNE ZPAGE 3722 FC33 A2 02 LDX #02 3723 FC35 4C CB FC JMP OPCOMP 3724 FC38 A2 05 ZPAGE LDX #05 3725 FC3A 4C CB FC JMP OPCOMP 3726 FC3D 4C B6 FC HATCJ JMP HATCH 3727 FC40 A9 04 TRY34 LDA #04 ;CHECK FOR ABSOLUTE OR ZP,X ORZP,` 3728 FC42 CD 31 A4 CMP TEMPX 3729 FC45 90 15 BCC ABSIND 3730 FC47 A2 02 LDX #02 3731 FC49 20 F1 FD JSR XORYZ ;CC = X, CS = Y, NE = ABSOLUTE 3732 FC4C D0 58 BNE ABSOL 3733 FC4E 90 05 BCC ZPX 3734 FC50 A2 03 ZPY LDX #03 ;CARRY SET SO ZP,Y MODE 3735 FC52 4C CB FC JMP OPCOMP 3736 FC55 A2 04 ZPX LDX #04 ;CARRY CLEAR SO ZP,X MODE 3737 FC57 4C CB FC JMP OPCOMP 3738 FC5A B0 69 TRY56 BCS ERRORM 3739 FC5C 20 EF FD ABSIND JSR XORY ;CC=ABS,X CS=ABS,Y NE=ERROR 3740 FC5F D0 64 BNE ERRORM 3741 FC61 90 0F BCC ABSX 3742 FC63 A9 09 ABSY LDA #09 3743 FC65 CD 2E 01 CMP TYPE 3744 FC68 D0 04 BNE ABSY1 3745 FC6A A2 0E LDX #$0E 3746 FC6C D0 5D BNE OPCOMP 3747 FC6E A2 08 ABSY1 LDX #$08 3748 FC70 D0 59 BNE OPCOMP 3749 FC72 A2 09 ABSX LDX #09 ;CARRY CLEAR SO ABS,X MODE 3750 FC74 D0 55 BNE OPCOMP 3751 FC76 AD 36 01 PAREN LDA ADFLD+3 ;SEE IF (HH,X),(HH)Y OR (HHHH) 3752 FC79 C9 2C CMP #',' ;(HHX) (HH),Y ARE OK TOO 3753 FC7B F0 04 BEQ INDX ;COMMA IN 4TH POSITION = (HH,X) 3754 FC7D C9 58 CMP #'X' ;X IN 4TH POSITION = (HHX) 3755 FC7F D0 04 BNE TRYINY 3756 FC81 A2 0B INDX LDX #$0B 3757 FC83 D0 46 BNE OPCOMP 3758 FC85 C9 29 TRYINY CMP #')' ;")" IN 4TH POS = (HH)Y OR (HH),Y 3759 FC87 D0 0B BNE TRYJMP 3760 FC89 20 EF FD JSR XORY ;CHCK TO SEE IF Y INDEX REG DESIRE 3761 FC8C D0 37 BNE ERRORM 3762 FC8E 90 35 BCC ERRORM 3763 FC90 A2 0A LDX #$0A 3764 FC92 D0 37 BNE OPCOMP 3765 FC94 AD 38 01 TRYJMP LDA ADFLD+5 ;CHECK FOR FINAL PAREN 3766 FC97 C9 29 CMP #')' 3767 FC99 D0 2A BNE ERRORM 3768 FC9B AD 2E 01 LDA TYPE ;CONFIRM CORRECT ADDRESS TYPE 3769 FC9E C9 0B CMP #$0B 3770 FCA0 D0 23 BNE ERRORM 3771 FCA2 A2 0D LDX #$0D ;OK, FORM IS JMP (HHHH) 3772 FCA4 D0 25 BNE OPCOMP 3773 FCA6 AD 2E 01 ABSOL LDA TYPE ;CHECK FOR BRANCH TO ABSOLUTE LOC 3774 FCA9 C9 0C CMP #$0C 3775 FCAB D0 05 BNE ABSOL1 3776 FCAD A2 02 LDX #02 3777 FCAF 4C CB FC JMP OPCOMP 3778 FCB2 A2 0C ABSOL1 LDX #$0C 3779 FCB4 D0 15 BNE OPCOMP 3780 FCB6 ;SELECT IMMEDIATE ADDRESSING TYPE 3781 FCB6 AD 2E 01 HATCH LDA TYPE 3782 FCB9 C9 01 CMP #01 3783 FCBB F0 04 BEQ IMMED1 3784 FCBD A2 07 LDX #07 3785 FCBF D0 0A BNE OPCOMP 3786 FCC1 A2 06 IMMED1 LDX #06 3787 FCC3 D0 06 BNE OPCOMP 3788 FCC5 20 94 E3 ERRORM JSR CKER00 ;OUTPUT ERROR MESSAGE 3789 FCC8 4C AA FB JMP STARTM 3790 FCCB 3791 FCCB ;COMPUTE FINAL OP CODE FOR DEFINED ADDRESING MODE 3792 FCCB BD E2 FA OPCOMP LDA TYPTR1,X ;MATCH TYPE MASK WITH VALID MODE 3793 FCCE F0 05 BEQ OPCMP1 ;PATTERNS & SKIP 1ST WORD TEST IF 3794 FCD0 2D 26 01 AND TMASK1 ;ALREADY ZERO 3795 FCD3 D0 08 BNE VALID 3796 FCD5 BD F1 FA OPCMP1 LDA TYPTR2,X ;TEST 2ND PART 3797 FCD8 2D 27 01 AND TMASK2 ;INST DOES NOT HAVE SPECIFIED MODE 3798 FCDB F0 E8 BEQ ERRORM 3799 FCDD 18 VALID CLC ;FORM FINAL OP CODE 3800 FCDE BD 00 FB LDA CORR,X 3801 FCE1 6D 34 A4 ADC OPCODE 3802 FCE4 8D 34 A4 STA OPCODE 3803 FCE7 3804 FCE7 ;PROCESS ADRESSES TO FINAL FORMAT 3805 FCE7 BD 0F FB LDA SIZEM,X ;OBTAIN ADDRESS FORMAT FROM TABLE 3806 FCEA C9 00 CMP #00 3807 FCEC F0 50 BEQ ONEBYT 3808 FCEE C9 0F CMP #$0F ;NEED BRANCH COMPUTATION? 3809 FCF0 F0 1D BEQ BRNCHC 3810 FCF2 8D 33 A4 STA TEMPA ;SAVE START POINT & CHAR COUNT 3811 FCF5 29 0F AND #$0F ;SEPARATE CHARACTER COUNT 3812 FCF7 A8 TAY ;LOAD ADDR BYTES INTO Y (0,1,OR 2) 3813 FCF8 8D 2F A4 STA BYTESM ;SAVE IN BYTES 3814 FCFB EE 2F A4 INC BYTESM ;TO INSTR LENGTH (1,2,OR 3 BYTES) 3815 FCFE AD 33 A4 LDA TEMPA ;SEPARATE STARTING POINT 3816 FD01 29 F0 AND #$F0 3817 FD03 4A LSR A 3818 FD04 4A LSR A 3819 FD05 4A LSR A 3820 FD06 4A LSR A 3821 FD07 AA TAX ;AND PUT IT IN X 3822 FD08 20 12 FD JSR CONVRT ;CONVERT ASCII ADDRESS TO HEX 3823 FD0B B0 B8 BCS ERRORM ;SKIP OUT IF ERROR IN INPUT 3824 FD0D 90 1D BCC STASH 3825 FD0F 4C 86 FD BRNCHC JMP BRCOMP 3826 FD12 3827 FD12 ;############ SUBROUTINE ############### 3828 FD12 ;CONVERT FORMATTED ADDRESS INTO PROPER HEX ADDRESS 3829 FD12 BD 33 01 CONVRT LDA ADFLD,X ;PICK UP 1ST ADDRES CHARACTER 3830 FD15 20 7D EA JSR HEX ;CONVERT TO MOST SIG HEX 3831 FD18 B0 11 BCS ERRFLG 3832 FD1A E8 INX ;GET NEXT ASCII CHARACTER 3833 FD1B BD 33 01 LDA ADFLD,X 3834 FD1E E8 INX ;POINT TO NEXT CHARACTER, IF ANY 3835 FD1F 20 84 EA JSR PACK 3836 FD22 B0 07 BCS ERRFLG 3837 FD24 99 34 A4 STA OPCODE,Y ;SAVE IN MOST SIG. BYTE LOCATION 3838 FD27 88 DEY ;SET UP FOR NEXT ADDR BYTE, IF ANY 3839 FD28 D0 E8 BNE CONVRT ;IF NECESSARY, FORM NEXT ADDR BYTE 3840 FD2A 18 CLC 3841 FD2B 60 ERRFLG RTS ;NON HEX CLEARED CARRY 3842 FD2C ;############# 3843 FD2C 3844 FD2C AC 2F A4 STASH LDY BYTESM ;SET UP TO STORE COMMAND 3845 FD2F 88 DEY 3846 FD30 B9 34 A4 STSHLP LDA OPCODE,Y 3847 FD33 20 78 EB JSR SADDR ;STORE ONE BYTE OF COMMAND 3848 FD36 C0 00 CPY #00 3849 FD38 F0 0B BEQ FORMDS 3850 FD3A 88 DEY 3851 FD3B B8 CLV 3852 FD3C 50 F2 BVC STSHLP ;REPEAT TILL THRU 3853 FD3E 3854 FD3E A9 01 ONEBYT LDA #01 ;SET BYTES = 1 3855 FD40 8D 2F A4 STA BYTESM 3856 FD43 D0 E7 BNE STASH 3857 FD45 3858 FD45 ;FORMAT FOR SYSTEM 65 DISPLAY (REFORMAT FOR AIM) 3859 FD45 20 44 EB FORMDS JSR CLR 3860 FD48 20 DD E5 JSR CGPC1 ;ADDR TO SAVPC FOR DISASSEMBLY 3861 FD4B 20 42 E8 JSR TTYTST ;IF TTY DO NOT GO TO DISASS 3862 FD4E D0 08 BNE FORMD1 3863 FD50 20 3B E8 JSR BLANK2 ;IT IS TTY 3864 FD53 20 3B E8 JSR BLANK2 3865 FD56 D0 11 BNE FORMD2 ;OUTPUT OPCODE 3866 FD58 20 6C F4 FORMD1 JSR DISASM 3867 FD5B 20 24 EA JSR CRCK ; IF PRI PTR DIFF FROM 0 3868 FD5E AD 37 A4 LDA CODFLG ;SEE IF HE WANTS CODE ALSO 3869 FD61 F0 1A BEQ FORM1 3870 FD63 20 3E E8 JSR BLANK 3871 FD66 20 3C F5 JSR PRPC ;PROG CNTR 3872 FD69 ;OUTPUT OPCODE 3873 FD69 AE 2F A4 FORMD2 LDX BYTESM 3874 FD6C A0 00 LDY #00 3875 FD6E A9 1C DISPLY LDA #ADDR ;DO LDA (ADDR),Y ,WHITOUT PAG 0 3876 FD70 20 58 EB JSR LDAY 3877 FD73 20 46 EA JSR NUMA 3878 FD76 20 3E E8 JSR BLANK 3879 FD79 C8 INY 3880 FD7A CA DEX 3881 FD7B D0 F1 BNE DISPLY 3882 FD7D 3883 FD7D ;POINT TO NEXT INSTRUCTION LOCATION 3884 FD7D AC 2F A4 FORM1 LDY BYTESM ;ADD BYTESM TO ADDR 3885 FD80 20 CD E2 JSR NXTADD 3886 FD83 4C 24 FF JMP PATC16 ;UPDATE PC 3887 FD86 3888 FD86 ;RELATIVE BRANCH ADDRESS COMPUTATION 3889 FD86 AD 31 A4 BRCOMP LDA TEMPX 3890 FD89 C9 02 CMP #02 ;IF REL BRANCH INPUT, USE IT 3891 FD8B D0 11 BNE COMPBR 3892 FD8D A2 00 LDX #00 3893 FD8F A0 01 LDY #01 3894 FD91 20 12 FD JSR CONVRT 3895 FD94 B0 40 BCS ERRJMP 3896 FD96 A9 02 LDA #02 3897 FD98 8D 2F A4 STA BYTESM ;SET PROPER BYTES 3898 FD9B 4C 2C FD JMP STASH 3899 FD9E A2 00 COMPBR LDX #00 3900 FDA0 A0 02 LDY #02 3901 FDA2 20 12 FD JSR CONVRT 3902 FDA5 B0 2F BCS ERRJMP 3903 FDA7 AD 1D A4 LDA ADDR+1 ;ADD BRANCH OFFSET 3904 FDAA 8D 27 01 STA MOVAD+1 3905 FDAD AD 1C A4 LDA ADDR 3906 FDB0 18 CLC 3907 FDB1 69 02 ADC #02 3908 FDB3 8D 26 01 STA MOVAD 3909 FDB6 90 03 BCC CMPBR1 3910 FDB8 EE 27 01 INC MOVAD+1 3911 FDBB 38 CMPBR1 SEC ;COMPUTE BRANCH RELATIVE ADDRESS 3912 FDBC AD 35 A4 LDA OPCODE+1 3913 FDBF ED 26 01 SBC MOVAD 3914 FDC2 8D 35 A4 STA OPCODE+1 3915 FDC5 AD 36 A4 LDA OPCODE+2 3916 FDC8 ED 27 01 SBC MOVAD+1 3917 FDCB 8D 36 A4 STA OPCODE+2 3918 FDCE C9 00 CMP #00 3919 FDD0 F0 0E BEQ FORWRD 3920 FDD2 C9 FF CMP #$FF 3921 FDD4 F0 03 BEQ BACKWD 3922 FDD6 4C C5 FC ERRJMP JMP ERRORM 3923 FDD9 AD 35 A4 BACKWD LDA OPCODE+1 ;CHECK IN RANGE 3924 FDDC 30 09 BMI OK 3925 FDDE 10 F6 BPL ERRJMP 3926 FDE0 AD 35 A4 FORWRD LDA OPCODE+1 3927 FDE3 10 02 BPL OK 3928 FDE5 30 EF BMI ERRJMP 3929 FDE7 A9 02 OK LDA #02 ;SET UP FOR STASH 3930 FDE9 8D 2F A4 STA BYTESM 3931 FDEC 4C 2C FD JMP STASH 3932 FDEF 3933 FDEF ;###### SUBROUTINE ######## 3934 FDEF ;SUBROUTINE FOR DETERMINING X OR Y OR NEITHER 3935 FDEF A2 04 XORY LDX #04 3936 FDF1 BD 33 01 XORYZ LDA ADFLD,X 3937 FDF4 C9 2C CMP #',' 3938 FDF6 D0 04 BNE XORY1 3939 FDF8 E8 INX 3940 FDF9 BD 33 01 LDA ADFLD,X 3941 FDFC C9 58 XORY1 CMP #'X' 3942 FDFE F0 03 BEQ ISX 3943 FE00 C9 59 CMP #'Y' 3944 FE02 XORYRT 3945 FE02 60 RTS ;NOT ZERO IS NOT X OR NOT Y 3946 FE03 18 ISX CLC ;CARRY SET IS Y 3947 FE04 90 FC BCC XORYRT ; CARRY CLEAR IS X 3948 FE06 ;####### END OF SUB ######## 3949 FE06 3950 FE06 ; INPUT FOR MNEMONIC CODE 3951 FE06 A0 00 MNEM LDY #00 3952 FE08 8C 34 A4 STY OPCODE 3953 FE0B 8C 35 A4 STY OPCODE+1 3954 FE0E 8C 36 A4 STY OPCODE+2 ;CLEARS OPCODE FOR NEW INPUT 3955 FE11 8C 26 01 STY MOVAD ;CLEARS UNUSED BIT IN FINAL FORMAT 3956 FE14 20 5F E9 RDLUP JSR RDRUP 3957 FE17 C9 2A CMP #'*' ;COMMAND TO LOAD POINTER 3958 FE19 F0 58 BEQ STLOAD ;GO TO SET CURRENT ADDRESS POINTER 3959 FE1B C9 20 CMP #' ' ;IGNORE SPACE BAR INPUT 3960 FE1D F0 F5 BEQ RDLUP 3961 FE1F 29 1F AND #$1F ;MASK OFF UPPER 3 BITS 3962 FE21 99 30 01 STA CH,Y 3963 FE24 98 TYA 3964 FE25 AA TAX ;Y----> X 3965 FE26 FE 30 01 INC CH,X ;FORMAT TO MATCH DISASSEMBLER TBL 3966 FE29 C8 INY 3967 FE2A C0 03 CPY #03 ;REPEAT FOR EACH OF 3 CHARACTERS 3968 FE2C D0 E6 BNE RDLUP 3969 FE2E 3970 FE2E ;COMPRESS 3 FORMATED CHARACTERS TO MOVAD & MOVAD+1 3971 FE2E A0 03 LDY #03 ;SET UP OUTER LOOP 3972 FE30 B9 2F 01 OUTLUP LDA CH-1,Y ;COMPRESS 3 CHARACTERS 3973 FE33 A2 05 LDX #05 ;SET UP INNER LOOP 3974 FE35 4A INLUP LSR A ;SHIFT 5 BITS ACC TO MOVAD,MOVAD+1 3975 FE36 6E 26 01 ROR MOVAD 3976 FE39 6E 27 01 ROR MOVAD+1 3977 FE3C CA DEX 3978 FE3D D0 F6 BNE INLUP 3979 FE3F 88 DEY 3980 FE40 D0 EE BNE OUTLUP 3981 FE42 3982 FE42 ;SEARCH FOR MATCHING COMPRESSED CODE 3983 FE42 A2 40 LDX #$40 3984 FE44 AD 26 01 SRCHLP LDA MOVAD 3985 FE47 DD B8 F5 SRCHM CMP MNEML-1,X ;MATCH LEFT HALF 3986 FE4A F0 05 BEQ MATCH 3987 FE4C CA DEX 3988 FE4D D0 F8 BNE SRCHM ;IF NO - TRY AGAIN 3989 FE4F F0 0B BEQ MATCH1 3990 FE51 AD 27 01 MATCH LDA MOVAD+1 ;ALSO MATCH RIGHT HALF 3991 FE54 DD F8 F5 CMP MNEMR-1,X 3992 FE57 F0 06 BEQ GOTIT 3993 FE59 CA DEX 3994 FE5A D0 E8 BNE SRCHLP 3995 FE5C 4C C5 FC MATCH1 JMP ERRORM 3996 FE5F 3997 FE5F ;GET INSTRUCTION TYPE FROM TYPE TABLE 3998 FE5F BD 5D FB GOTIT LDA TYPTB-1,X 3999 FE62 8D 2E 01 STA TYPE 4000 FE65 4001 FE65 ;GET OPCODE FROM OP CODE UE 4002 FE65 BD 1D FB LDA STCODE-1,X 4003 FE68 8D 34 A4 STA OPCODE 4004 FE6B 4C C1 FB JMP MODEM 4005 FE6E 4006 FE6E ;THIS SECTION SETS THE CURRENT ADDRESS POINTER 4007 FE6E A9 2A STLO LDA #'*' 4008 FE70 20 7A E9 JSR OUTPUT 4009 FE73 20 AE EA STLOAD JSR ADDIN ;GET ADDR 4010 FE76 B0 F6 BCS STLO ;IN CASE OF ERROR 4011 FE78 4C 24 FF JMP PATC16 ;ADDR TO PC THEN TO STARTM 4012 FE7B 4013 FE7B ;PATCHES TO CORRECT PROBLEMS WITHOUT 4014 FE7B ;CHANGING ENTRY POINTS TO THE ROUTINES 4015 FE7B 41 .DB "A" 4016 FE7C 38 PATCH1 SEC ;ADJUST BAUD 4017 FE7D E9 2C SBC #44 4018 FE7F 8D 18 A4 STA CNTL30 4019 FE82 60 RTS 4020 FE83 4021 FE83 8A CUREAD TXA ;SAVE X , OUTPUT CUR 4022 FE84 48 PHA 4023 FE85 AE 15 A4 LDX CURPO2 4024 FE88 E0 14 CPX #20 ;ONLY IF < 20 4025 FE8A B0 05 BCS PAT2A 4026 FE8C A9 DE LDA #$DE 4027 FE8E 20 7B EF JSR OUTDD1 4028 FE91 68 PAT2A PLA 4029 FE92 AA TAX 4030 FE93 4C 3C E9 JMP READ ;CONTINUE 4031 FE96 4032 FE96 20 3C E9 RED1 JSR READ ;READ & ECHO WITHOUT CURSOR 4033 FE99 4C 76 E9 JMP RED2 4034 FE9C 4035 FE9C AE 15 A4 PATCH4 LDX CURPO2 ;DONT DO ANYTHING IF "8D" 4036 FE9F C9 8D CMP #CR+$80 ;SO FOR TV & NOT FOR DISP 4037 FEA1 D0 0B BNE PAT4A 4038 FEA3 A9 A0 LDA #' '+$80 ;CLR CURSOR 4039 FEA5 20 7B EF JSR OUTDD1 4040 FEA8 20 44 EB JSR CLR ;CLR PNTRS 4041 FEAB 4C 76 EF JMP OUTD7 ;EXIT 4042 FEAE 4C 17 EF PAT4A JMP OUTD1A ;CONTINUE 4043 FEB1 4044 FEB1 8D 11 A4 PATCH5 STA PRIFLG ;TURN PRI OFF 4045 FEB4 4C 73 F0 JMP IPO3 4046 FEB7 4047 FEB7 A9 1C PATCH6 LDA #ADDR ;SIMULATE LDA (ADDR),Y 4048 FEB9 4C 58 EB JMP LDAY 4049 FEBC 4050 FEBC 20 3C E9 PATCH8 JSR READ ;READ & ECHO WITH CARROTS 4051 FEBF 48 PHA 4052 FEC0 20 D8 E7 JSR EQUAL 4053 FEC3 A9 3C LDA #'<' 4054 FEC5 20 7A E9 JSR OUTPUT 4055 FEC8 68 PLA 4056 FEC9 48 PHA 4057 FECA C9 0D CMP #CR 4058 FECC F0 03 BEQ PATC8C 4059 FECE 20 7A E9 JSR OUTPUT 4060 FED1 A9 3E PATC8C LDA #'>' 4061 FED3 20 7A E9 JSR OUTPUT 4062 FED6 68 PLA 4063 FED7 60 RTS 4064 FED8 4065 FED8 C9 F7 PATCH9 CMP #$F7 ;CHCK LOWER TRANSITION OF TIMER 4066 FEDA B0 06 BCS PAT9A 4067 FEDC CD 08 A4 CMP TSPEED 4068 FEDF 4C 9D EE JMP CKF3A 4069 FEE2 CD 08 A4 PAT9A CMP TSPEED 4070 FEE5 68 PLA 4071 FEE6 C9 FF CMP #$FF 4072 FEE8 60 PAT9B RTS 4073 FEE9 4074 FEE9 20 F0 E9 PATC10 JSR CRLF ;CLR DISP (ONLY 1 ) 4075 FEEC 4C 85 E1 JMP STA1 4076 FEEF 4077 FEEF F0 F7 PATC11 BEQ PAT9B ;GO OUTPUT PROMPT 4078 FEF1 C9 4C CMP #'L' ;NO PROMPT FOR "T" OR "L" 4079 FEF3 F0 F3 BEQ PAT9B 4080 FEF5 4C C5 E7 JMP PROMP1 4081 FEF8 4082 FEF8 48 PATC12 PHA ;CLEAR PRIFLG SO WE CAN OUTPUT 4083 FEF9 AD 11 A4 LDA PRIFLG ;TO PRINTER IF FLG WAS ON (MSB) 4084 FEFC 29 F0 AND #$F0 4085 FEFE 8D 11 A4 STA PRIFLG 4086 FF01 68 PLA 4087 FF02 60 RTS 4088 FF03 4089 FF03 AD 12 A4 PATC13 LDA INFLG ;TURN TAPES ON ONLY IF TAPES 4090 FF06 C9 54 CMP #'T' 4091 FF08 D0 DE BNE PAT9B 4092 FF0A 4C 29 E5 JMP DU14 ;TURN ON TAPES & SET DEF DEV 4093 FF0D 4094 FF0D AD 13 A4 PATC14 LDA OUTFLG ;TURN ON TAPES ONLY IF TAPES 4095 FF10 C9 54 CMP #'T' 4096 FF12 D0 D4 BNE PAT9B 4097 FF14 4C 0A E5 JMP DU11 4098 FF17 4099 FF17 20 F0 E9 PATC15 JSR CRLF ;DECODE COMMAND 4100 FF1A 8A TXA ;SAVE INDEX 4101 FF1B 0A ASL A 4102 FF1C AA TAX 4103 FF1D BD B8 FA LDA JTBL,X ;PART OF ENTRY 4104 FF20 8D 1A A4 STA S1 4105 FF23 60 RTS 4106 FF24 4107 FF24 20 DD E5 PATC16 JSR CGPC1 ;ADDR TO PC 4108 FF27 4C AA FB JMP STARTM ;BACK TO MNEMONIC START 4109 FF2A 4110 FF2A F0 0E PATC17 BEQ PAT17B ;RUB, SO READ ANOTHER 4111 FF2C C9 00 CMP #0 4112 FF2E F0 03 BEQ PAT17A 4113 FF30 4C 85 F7 JMP IN02A ;NEITHER ,CONTINUE 4114 FF33 20 93 E9 PAT17A JSR INALL ;SKIP ON ZEROS 4115 FF36 C9 7F CMP #$7F ;UNTILL RUB 4116 FF38 D0 F9 BNE PAT17A 4117 FF3A 4C 7A F7 PAT17B JMP IN02 ;GO BACK 4118 FF3D 4119 FF3D 20 F8 FE PATC18 JSR PATC12 ;RESET PRIFLG 4120 FF40 48 PHA 4121 FF41 20 42 E8 JSR TTYTST ;IF TTY JUST RTN 4122 FF44 D0 02 BNE PAT18A 4123 FF46 68 PLA 4124 FF47 60 RTS 4125 FF48 20 FE E8 PAT18A JSR LL ;SET TO LOW SPEED 4126 FF4B 20 45 F0 JSR IPST ;PRINT WHAT IS IN BUFFER 4127 FF4E 20 44 EB JSR CLR ;CLR PRINTER BUFFER BY OUTPUTTING 4128 FF51 20 3E E8 JSR BLANK ;AN SPACE 4129 FF54 20 44 EB JSR CLR 4130 FF57 68 PLA ;RTN ACC 4131 FF58 60 RTS 4132 FF59 4133 FF59 D8 PAT19 CLD 4134 FF5A 20 24 EA JSR CRCK 4135 FF5D 4C 85 E1 JMP STA1 4136 FF60 4137 FF60 F0 0D PAT20 BEQ VECK4 ;END (DATA BYTES=0) 4138 FF62 18 CLC 4139 FF63 69 04 ADC #4 4140 FF65 AA TAX 4141 FF66 20 93 E9 VECK5 JSR INALL ;SKIP OVER DATA 4142 FF69 CA DEX 4143 FF6A D0 FA BNE VECK5 4144 FF6C 4C 9E E6 JMP VECK1 ;PROCESS NEXT RCD 4145 FF6F 4C 20 E5 VECK4 JMP DU13 4146 FF72 4147 FF72 A0 00 PAT21 LDY #0 4148 FF74 B9 88 FF PAT21A LDA POMSG,Y ;RESET MSG 4149 FF77 F0 06 BEQ PAT21B 4150 FF79 20 7A E9 JSR OUTPUT 4151 FF7C C8 INY 4152 FF7D D0 F5 BNE PAT21A 4153 FF7F 20 F0 E9 PAT21B JSR CRLF 4154 FF82 20 F0 E9 JSR CRLF 4155 FF85 4C 82 E1 JMP START 4156 FF88 4157 FF88 2020524F434BPOMSG .DB " ROCKWELL AIM 65" 4157 FF8E 57454C4C2041494D203635 4158 FF99 00 .DB 0 4159 FF9A 4160 FF9A EE 68 01 PAT22 INC BLKO 4161 FF9D 4C BD ED JMP ADDBK1 4162 FFA0 4163 FFA0 A9 FF PAT23 LDA #$FF ;START TIMER 4164 FFA2 8D 97 A4 STA DI1024 4165 FFA5 AD 85 A4 PAT23A LDA RINT ;TIME OUT? 4166 FFA8 30 08 BMI PAT23B ;YES 4167 FFAA AD 0D A8 LDA IFR ;START SIGNAL? 4168 FFAD 29 10 AND #MPRST 4169 FFAF F0 F4 BEQ PAT23A ;NO 4170 FFB1 60 RTS ;YES 4171 FFB2 A9 00 PAT23B LDA #0 ;TIME OUT RETURN 4172 FFB4 60 RTS 4173 FFB5 4174 FFB5 20 75 EE PATC24 JSR CKFREQ ;READ BIT FROM FOURTH HALF PULSE 4175 FFB8 6A ROR A 4176 FFB9 29 80 AND #$80 4177 FFBB 60 RTS 4178 FFBC 4179 FFBC 2C 0D A8 PATC25 BIT IFR ;WAIT TILL TIMES OUT 4180 FFBF 50 FB BVC PATC25 4181 FFC1 AD 04 A8 LDA T1L ;CLR INTERRUPT FLG 4182 FFC4 60 RTS 4183 FFC5 4184 FFF9 *=$FFF9 4185 FFF9 ;INTERRUPT VECTORS 4186 FFF9 FA .DB $FA 4187 FFFA 75E0BFE078E0 .DW NMIV1,RSET,IRQV1 ;SET UP VECTORS 4188 10000 ;.END A0/1 4189 10000 SEMICOLON =$3B 4190 10000 BACKSLASH =$5C 4191 10000 .END M1 Label Value Label Value Label Value ------------------ ------------------ ------------------ ASSEM D000 ADFLD 0133 ADDR A41C ACR A80B ADDS1 E55D ADD1 E565 ADDIN EAAE ADDNE EAB1 ADDN1 EAB7 ADDN2 EAC7 ADDN3 EADC ADDN4 EAE8 ADDN5 EAF7 ADDN6 EAFD ADDN7 EB0D ADDN8 EB2B ADDBLK EDBA ADDBK1 EDBD ATTOP F8DB ATBOT F8E9 AT02 F8F5 AT01 F8F7 ATEND F8F9 ADDRS1 F910 ADDS1A F916 AD1 F928 ADDA F92A ADDA1 F933 ACCUM FC23 ABSIND FC5C ABSY FC63 ABSY1 FC6E ABSX FC72 ABSOL FCA6 ABSOL1 FCB2 BASIEN B000 BASIRE B003 BOTLN 00E1 BKS 0100 BYTESM A42F BKFLG A410 BLK 0115 BLKO 0168 BRKA E61B BRK1 E620 BKERR E62F BKOK E634 BKO2 E64C BRKK E6E5 BRK3 E6F1 BRK2 E6F3 BRK4 E6FA BLANK2 E83B BLANK E83E BKCKSM F1E7 BKCK1 F1F1 BKCK2 F20F BKCK3 F21A BT F721 BRNCHC FD0F BRCOMP FD86 BACKWD FDD9 BACKSLASH 005C CH 0130 CODFLG A437 CURPO2 A415 CURPOS A416 CNTH30 A417 CNTL30 A418 COUNT A419 CKSUM A41E CPIY A42A CRA AC01 CRB AC03 CR 000D COMIN E1A1 COMB E1C4 CHNGG E2A0 CHNG1 E2A6 CH2 E2B8 CH4 E2C0 CH3 E2C5 CKERR E385 CKER0 E38E CKER00 E394 CKER1 E396 CKER2 E3A3 CHEKAR E54B CHEKA E54E CGPC E5D4 CGPC0 E5D7 CGPC1 E5DD CGPS E5EA CGA E5EE CGX E5F2 CGY E5F6 CGS E5FA CGALL E5FC CLRBK E6FE CKB E76B CKB2 E76D CKB1 E780 CRLF E9F0 CRLOW EA13 CR2J EA23 CRCK EA24 CRCK1 EA2C CRCK2 EA3B CLR EB44 CLRCK EB4D CKFREQ EE75 CKF1 EE7A CKF2 EE81 CKF3 EE99 CKF3A EE9D CKF4 EEA1 CKBUFF F1D2 CBUFF1 F1E2 COL0 F2E1 COL1 F321 COL2 F361 COL3 F3A1 COL4 F3E1 CHAR1 F5AD CHAR2 F5B3 CHNG F876 CHN1 F87C CHN2 F88C CHN3 F8A9 CHN4 F8AF CFLG F8B2 COM FA78 COMM FA88 CD02 FA8F CFND1 FAA0 COMCN1 000B COMTBL FAAC CORR FB00 CLRLUP FBE9 CONVRT FD12 COMPBR FD9E CMPBR1 FDBB CUREAD FE83 DILINK A406 DISFLG A40F DIBUFF A438 DRA2 A480 DDRA2 A481 DRB2 A482 DDRB2 A483 DNPA7 A484 DPPA7 A485 DIV1 A494 DIV8 A495 DIV64 A496 DI1024 A497 DRB A800 DRAH A801 DDRB A802 DDRA A803 DRA A80F DATIN 000E DATOUT 000C DEBTIM 1388 DUMP E43B DU1 E444 DU0 E447 DU1B E452 DU1A E46D DU2 E47D DU6 E49F DU7 E4A0 DU8 E4A2 DU9 E4B9 DU10 E4DB DU10A E4F8 DU11 E50A DU12 E511 DU13 E520 DU14 E529 DUMPTA E56F DUMPT1 E57B DUMPKI E587 DUK2 E5A4 DONE E790 DON1 E7A0 DELAY EC0F DE1 EC18 DE2 EC1B DEHALF EC23 DEBKEY ED2A DEBK1 ED2C DISASM F46C DNNO F6D8 DOW1 F6E3 DOW2 F6E8 DOWN F724 DLNE F74C DISPLY FD6E END 00E5 ENPA7 A486 EPPA7 A487 ESCAPE 001B EQS 00BD EMSG1 E06C EMSG2 E072 EQUAL E7D8 ERR F495 EDIT F639 EDI0 F644 EDI1 F653 EDI2 F663 EDI3 F673 EDI4 F680 EDI5 F68D EDI6 F69B EDI7 F6AA EDI8 F6AE EDI F6B6 EDI2B F6CC ENDERR FA5C ENDE2 FA6F ERROR FA72 ERR0 FA78 ENTRY FA8D EVAL FC0E ERRORM FCC5 ERRFLG FD2B ERRJMP FDD6 FORMA 0116 FROM E7A3 FNAM E8A2 FCHAR F80C FCHA1 F80F FCH F81E FC1 F823 FC2 F82E FC3 F834 FC4 F843 FC5 F849 FC6 F84E FC7 F853 FC8 F85A FC9 F868 FORMDS FD45 FORMD1 FD58 FORMD2 FD69 FORM1 FD7D FORWRD FDE0 GAP A409 GO E261 GOBK E26D GOBK0 E278 GOBK1 E286 GETID E425 GID1 E427 GOERR E608 GCNT E785 GCN1 E78C GETTTY EBDB GET1 EBE2 GET3 EBED GETKD0 EC38 GETKEY EC40 GETKY EC43 GETK0 EC55 GETK00 EC67 GETK1 EC71 GETK1B EC80 GETK2 EC82 GETK3 EC8D GETK4 EC93 GETK5 ECA4 GETK6 ECB9 GETK7 ECBE GETK8 ECBF GETK11 ECC9 GETK12 ECD2 GETK13 ECE1 GETK14 ECEB GETK10 ECEC GETTAP EE29 GETA1 EE2B GETFMT F499 GOGO FA4A GOGO1 FA5B GOTIT FE5F HISTM A42E HISTP A414 HIST A42E HEX EA7D HATCJ FC3D HATCH FCB6 IRQV4 A400 IRQV2 A404 INFLG A412 IBUFM A460 IDIR A474 ICOL A475 IOFFST A476 IDOT A477 IOUTL A478 IOUTU A479 IBITL A47A IBITU A47B IMASK A47C IFR A80D IER A80E IRQV1 E078 IRQV3 E154 IRQ1 E163 IRQ2 E17F INCS2 E566 INTAB1 E743 INTAB2 E752 INTAB3 E756 INLOW E8F8 INALL E993 IPST F045 IPS0 F04A IPO0 F050 IPO2 F066 IPO3 F073 IPO4 F078 IPSU F0E3 IPS1 F0E8 IPS3 F105 IPS2 F10E INCP F121 IEVEN F486 IN F764 INL F76D IN02 F77A IN02A F785 IN03B F799 IN03 F7A8 IN03A F7B9 IN05 F7C5 INPU F7CB INPU1 F7D8 INDX FC81 IMMED1 FCC1 ISX FE03 INLUP FE35 JUMP A47D JMPR E1C1 JD1 E723 JD2 E72B JD3 E73C JD4 E742 JTBL FAB8 KEYF1 010C KEYF2 010F KEYF3 0112 KMASK A42A KDISA E70A KEP E7AF KEPR E970 KIFLG F8B6 KI2 F8B8 LENGTH 00EA LMNEM 0117 LDIY A42A LF 000A LOAD E2E6 LOAD1 E2E9 LOAD2 E306 LOAD4 E321 LOAD5 E323 LOADTA E32F LOAD1A E349 LOADT2 E364 LOADKI E3A4 LOADK1 E3A7 LOADK2 E3AA LOADK3 E3B7 LOADK5 E3D1 LOADK6 E3D3 LOADK7 E3E8 LL E8FE LT10 EA5A LDAY EB58 LST F7E1 LST01 F7F0 LST02 F7F8 LST3 F803 MOVAD 0126 MONRAM A400 MON 00C0 MOFF 00E0 MPRST 0010 MSP12 0002 MT2 0020 M1 E000 M3 E005 M4 E008 M5 E01C M6 E021 M7 E024 M8 E027 M9 E02A M10 E02D M11 E031 M12 E03B MCM2 E196 MCM3 E1AC MCNT 0020 MONCOM E1E5 MEM E248 MEIN E24D MEM1 E24F MEM2 E251 MEM3 E260 MEMERR EB33 MTBL F2D7 MNNDX1 F4AF MNNDX2 F4B3 MNNDX3 F4BA MR11A F512 MODE F55B MODE2 F59F MNEML F5B9 MNEMR F5F9 MREAD FAD0 MNEENT FB9E MODEM FBC1 MNEM FE06 MATCH FE51 MATCH1 FE5C NOWLN 00DF NMIV2 A402 NPUL A40A NAME A42E NULLC 00FF NMIV1 E075 NMIV3 E07B NMI4 E0B1 NMI5 E0B4 NXTADD E2CD NXTA1 E2DA NXT5 E60D NHIS E688 NH1 E690 NAMO E8CF NAMO1 E8D6 NAMO2 E8E9 NAMO3 E8EB NAMO4 E8F5 NUMA EA46 NOUT EA51 NEWROW F160 NEWCOL F163 NOWS1 F909 OLDLEN 00E9 OPCODE A434 OUTFLG A413 OUTCKS E531 OUTCK E538 OUTCK1 E53B OUTCK2 E547 OUTLOW E901 OUTL1 E906 OUTPUT E97A OUT1 E97B OUT1A E986 OUT2 E98F OUTALL E9BC OUTA1 E9C8 OUTA2 E9D0 OUTA3 E9E2 OUTA4 E9EA ONEKEY ED05 ONEK1 ED09 ONEK2 ED0B ONEK3 ED1C ONEK4 ED29 OUTTTY EEA8 OUTT1 EECB OUTT2 EEFB OUTDP EEFC OUTDP1 EF02 OUTDIS EF05 OUTD1 EF14 OUTD1A EF17 OUTD2 EF20 OUTD2A EF2F OUTD3 EF33 OUTD4 EF48 OUTD5 EF56 OUTD7 EF76 OUTDD1 EF7B OUTDD2 EF87 OUTDD3 EF8B OUTPRI F000 OUT01 F00F OUT04 F025 OUT05 F033 OUTPR F038 OUTPR1 F03A OUTPR2 F044 OP04 F130 OP07 F13F OP03 F144 OP05 F150 OP06 F15D OUTTAP F24A OUTTA1 F290 OUTTA2 F294 OUTTA3 F2B2 OPCOMP FCCB OPCMP1 FCD5 ONEBYT FD3E OK FDE7 OUTLUP FE30 PRIFLG A411 PCR A80C PRST 0000 PRTIME 06A4 PRITR E6E1 PROMPT E7BD PROMP1 E7C5 PR1 E7CC PR2 E7CF PSLS E7DC PSL0 E7FB PSL00 E802 PSL0A E814 PSL0B E81C PSL0C E81E PSL0D E823 PSL1 E837 PACK EA84 PAK1 EA96 PAK2 EA9F PCLLD EB56 PHXY EB9E PLXY EBAC PRIERR F079 PRNDOT F087 PRDOT0 F08C PINT F0CB PRMN1 F4D7 PRMN2 F4DB PRADR1 F4F7 PRADR2 F4FF PRADR3 F519 PRADR4 F52C PRNTXY F538 PRPC F53C PRBL2 F545 PCADJ3 F54D PCADJ4 F554 PLNE F727 P02 F729 P01 F73B P03 F73F P00 F749 PNTLUP FBD0 PAREN FC76 PATCH1 FE7C PAT2A FE91 PATCH4 FE9C PAT4A FEAE PATCH5 FEB1 PATCH6 FEB7 PATCH8 FEBC PATC8C FED1 PATCH9 FED8 PAT9A FEE2 PAT9B FEE8 PATC10 FEE9 PATC11 FEEF PATC12 FEF8 PATC13 FF03 PATC14 FF0D PATC15 FF17 PATC16 FF24 PATC17 FF2A PAT17A FF33 PAT17B FF3A PATC18 FF3D PAT18A FF48 PAT19 FF59 PAT20 FF60 PAT21 FF72 PAT21A FF74 PAT21B FF7F POMSG FF88 PAT22 FF9A PAT23 FFA0 PAT23A FFA5 PAT23B FFB2 PATC24 FFB5 PATC25 FFBC QM E7D4 RMNEM 0118 REGF A40E ROLLFL A47F RINT A485 RA AC00 RB AC02 RUB 0008 RSET E0BF RS1 E0C9 RS2 E0D4 RS3A E0F1 RS3 E0F3 RS3B E11A RS4 E11D RS5 E129 RS6 E13E RS7 E144 RS8 E146 REG E227 REG1 E232 RBYTE E3FD RBYT1 E407 REGT E6D9 RS20 E702 RCHEK E907 RCH2 E91F RCH3 E925 RCHTTY E926 RCHT2 E928 RCHT1 E93B READ E93C READ1 E94A READ2 E94D REA1 E956 RB2 E95C RDRUP E95F RDR1 E96A REDOUT E973 RED2 E976 RD2 EA5D RD1 EA70 RSPAC EA7B ROONEK ECEF ROO1 ED00 RDBIT EE3B RDBIT1 EE43 RDBIT2 EE51 RDBIT4 EE67 ROUT F286 ROUT1 F28B ROW1 F421 ROW2 F429 ROW3 F431 ROW4 F439 ROW5 F441 ROW6 F449 ROW7 F451 ROW8 F459 REGQ F461 RTMODE F491 RELADR F530 RTS1 F55A REENTR F6CF RESNOW F8D0 REP2 F93E REPLAC F93F R8 F947 R87 F94E R88 F953 R2W F95F RQP F977 R6 F984 R5 F99D R55 F9A8 R7 F9AB R9 F9BE R10 F9C7 R11 F9CC R100 F9CF R101 F9DA R102 F9E3 R108 F9EF R103 F9FA R107 FA0A R104 FA17 R105 FA31 R1051 FA41 R106 FA44 RDADDR FBE5 RDLUP FE14 RED1 FE96 SAVE 00E7 STRING 00EB S1 A41A S2 0106 SAVPS A420 SAVA A421 SAVX A422 SAVY A423 SAVS A424 SAVPC A425 STIY A427 STBKEY A42B SR A80A SP12 0001 SETREG E113 START E182 STA1 E185 STBYTE E413 SHOW E64D SH1 E652 SHIS E665 SH11 E66A SEMI E9BA SADDR EB78 SWSTAK EBBA SWST1 EBBD SYNC EDFF SYNC1 EE11 SETZ F282 SETSPD F2C0 SETSP1 F2CA SETSP2 F2D3 STOP F870 SETBOT F8C5 SUB F91D SUB1 F927 SAVNOW F934 SIZEM FB0F STCODE FB1E STARTM FBAA STORCH FBF6 STOR1 FC0A STASH FD2C STSHLP FD30 SRCHLP FE44 SRCHM FE47 STLO FE6E STLOAD FE73 SEMICOLON 003B TEXT 00E3 TYPE 012E TMASK1 0126 TMASK2 0127 TEMPX A431 TEMPA A433 TSPEED A408 TIMG A40B TAPIN A434 TAPOUT A435 TAPTR A436 TAPTR2 A437 TABUFF 0116 TABUF2 00AD T1L A804 T1CH A805 T1LL A806 T1LH A807 T2L A808 T2H A809 T2I 0000 T1I 0000 T1FR 00C0 TMSG0 E048 TMSG1 E04D TMSG2 E050 TMSG3 E052 TMSG5 E05F TMSG6 E061 TMSG7 E066 TOGTA1 E6BD TOGTA2 E6CB TRACE E6DD TOGL E6E7 TOGL1 E6F6 TO E7A7 TO1 E7A9 TTYTST E842 TAP1 E8B3 TAP2 E8BC TAP3 E8C2 TIBYTE ED3B TIB1 ED48 TIBY1 ED53 TIBY3 ED56 TIBY4 ED63 TIBY5 ED65 TIBY5A ED88 TIBY6 EDAF TIBY7 EDB0 TAISET EDEA TIOSET EE1C TIOS1 EE22 TIOS2 EE24 TOBYTE F18B TABY2 F1A7 TABY3 F1CE TAOSET F21D TAOS1 F238 TRY F258 TP F6D2 TOPNO F8BC TPO1 F8C0 TYPTR1 FAE2 TYPTR2 FAF1 TYPTB FB5E TRYZP FC28 TRY34 FC40 TRY56 FC5A TRYINY FC85 TRYJMP FC94 UDRB A000 UDRAH A001 UDDRB A002 UDDRA A003 UT1L A004 UT1CH A005 UT1LL A006 UT1LH A007 UT2L A008 UT2H A009 USR A00A UACR A00B UPCR A00C UIFR A00D UIER A00E UDRA A00F UIN 0108 UOUT 010A UP F6F9 UPNO F709 UP1 F713 UP4 F720 VECKSM E694 VECK1 E69E VECK2 E6AC VALID FCDD VECK5 FF66 VECK4 FF6F WRITAZ E2DB WRITAD E2DD WHEREI E848 WHE1 E85C WHE2 E868 WHE3 E870 WHEREO E871 WHRO1 E885 WHRO2 E88E WHRO3 E897 WHRO4 E89F WHICHT E8A8 WRAX EA42 XORY FDEF XORYZ FDF1 XORY1 FDFC XORYRT FE02 ZON F25D ZON1 F261 ZON2 F26C ZPAGE FC38 ZPY FC50 ZPX FC55 tasm: Number of errors = 0 AIM 65 MICROCOMPUTER MONITOR PROGRAM LISTING Rockwell International Document No. 29650 N36L Rev. 1, April 1979 I used the Telemark Cross Assembler v3.1 (TASM) to re-create the source code. See http://www.halcyon.com/squakvly/ I tried to exactly duplicate the original source but some errors may exist. The exceptions are when the original had a hexadecimal constant instead of an ASCII constant or ASCII equate (especially CR) in some immediate mode instructions; I changed them to ASCII constants or an equate. For example, line 468 in the printed listing is: 0468 E185 A9 BC STA1 LDA #$BC ;"<" CHR WITH MSB=1 FOR DISP My version is: 0468 E185 A9 BC STA1 LDA #'<'+$80 ;"<" CHR WITH MSB=1 FOR DISP The TASM assembler is not the same one that Rockwell used to write the code, so some assembler directives and opcode formats are different. However, the ASM file uses the same line numbering as the printed listing. That is, line 1000 in the printed listing corresponds to line 1000 in the ASM file and line 1000 in the LST file. I could not fully read eight lines in the program listing because I was looking at a scanned copy, not the original. The rightmost characters were lost in the binding. These are the lines: 0149 HIST =NAME ;FOUR LAST ADDR + NEXT (SINGL STEP) 1796 JSR SWSTAK ;SWAP X , Y WITH RTRN ADDR FROM S 1804 JSR SWSTAK ;SWAP X , Y WITH RTRN ADDR FROM 2159 RDBIT LDA TSPEED ;ARE WE IN C7 OR 5B,5A FREQUENC 2262 OUTDP1 JMP (DILINK) ;HERE HE COULD ECHO SOMEWHERE ELSE 3205 BNE IN02 ;CONTIN , DISP WONT ALLOW > 60 CHR 3719 LDA TYPE ;CHCK FOR BRNCH WITH RELATIVE ADDR 3727 TRY34 LDA #04 ;CHECK FOR ABSOLUTE OR ZP,X ORZP, NOTE: I have since been told that the cut-off lines above exist in the original manual.