PAGE 1 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow 0000 10 .OPT LIST,ERR,CLIST,NO MLIST,NUM,XREF 0100 ; .TAB 14,20,33 0101 ; .SET 0,4 byte format 0102 .SET 1,4 left margin 0103 .SET 2,120 right margin 0104 .SET 3,$0C top of form char 0105 .SET 4,80 page size 0106 .SET 5,0 comment padding =0000 0107 .SET 6,0 object offset 0108 *********************************************** 0109 ** ** 0110 ** MAC XE (c) 1984, 1986, 1987, 1988 ** 0111 ** by Stephen D. Lawrow ** 0112 ** DDT (c) 1984 Jim Dunion ** 0113 ** ** 0114 *********************************************** 0115 ; =0000 0116 CBUG = 0 CARTRIDGE DEBUG (Banks are 0117 ; @ $C000 for Mosaic Card) =0000 0118 RAM = 0 for RAM cart assembly =0001 0119 EPROM = 1 for EPROM burning 0120 ; =0001 0121 DDT? = 1 DDT assembly (Include DDT package) =0001 0122 SPLIT = 1 selective symbols =3000 0123 @@BASE = $3000 Ram assembly addr =0001 0124 SORCIM = 1 Sorcim locals =0000 0125 PSEUDE = 0 Drive #3 =0000 0126 TOGGLE = 0 toggle list dev =0000 0127 DOLOCAL = 0 ASM only locals =0001 0128 SSAVE = 1 for SAVE =0001 0129 WILD = 1 for FIND/REP wild card =0001 0130 XE130 = 1 for X-Ref on an 130 XE 0131 ; 0132 ;For Rom Assembly (CBUG=0 and @@BASE=$3000) 0133 ; 0134 ; ______________________________ 0135 ;Object addr | $3000 $4000 | $5000 $6000 | 0136 ;Actual addr | $A000 $B000 | $A000 $A000 | 0137 ;Group/bank | BankC Main | BankA BankB | 0138 ; | - - - - - - | - - - - - - | 0139 ; | MASTER CHIP | SLAVE CHIP | 0140 ; ______________________________ 0141 ; 0142 ; 0143 ; Improvments: Wild cards in FIND/REP 0144 ; Second double qoute not needed 0145 ; SAVE [EOL] saves to previously LOADed filespec 0146 ; Uses extended memory for X-Ref file 0147 ; (can X-Ref only on an 130 XE) 0148 ; Faster Pass1 ASM for Branches, 0149 ; Immediates, & Jsr/Jmp instrs. 0150 ; =0001 0151 __PRT = 1 02JAN88 Modified PRINT 0152 ; to convert to ST format 0153 ; type of File (TABS & CR/LF) 0154 ; 0155 .SET 5,16 comment padding 0156 .PAGE "ASSEMBLY MACROS" PAGE 2 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow ASSEMBLY MACROS 0157 .MACRO @ 0158 :BR0 .= *+%1 0159 .ENDM 0160 ; 0161 .MACRO BANK 0162 .IF CBUG .OR RAM 0163 *= %1 load select bank 0164 .BYTE -1 0165 .ENDIF 0166 *= ROMF 0167 .ENDM 0168 ; 0169 .INCLUDE #D:EQUATE.INC 0170 .PAGE "MASTER EQUATES" PAGE 3 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MASTER EQUATES D:EQUATE.INC 0171 ; 0172 ; Master & Key Equates 0173 ; =0001 0174 ATARI = 1 machine flag =0000 0175 APPLE = .NOT ATARI =0001 0176 OSS = 1 in house version 0177 ; =B000 0178 ROM = $B000 =0000 0179 .IF CBUG 0180 ROMF = $C000 0181 BANK1 = $FFC0 0182 BANK2 = $FFC1 0183 BANK3 = $FFC2 0184 .ELSE =A000 0185 ROMF = $A000 =D500 0186 BANK1 = $D500 =D504 0187 BANK2 = $D504 =D503 0188 BANK3 = $D503 =D508 0189 RAMALL = $D508 0190 .ENDIF 0191 ; =00D4 0192 FR0 = $D4 =00E0 0193 FR1 = $E0 =0080 0194 RAZ1 = $80 =00FB 0195 RAZ3 = $FB =00D2 0196 ZFP = $D2 =00F2 0197 CIX = $F2 input text index =00F3 0198 INBUFF = $F3 indirect to LBUFF =00F7 0199 ZTEMP4 = $F7 syntax hex temp +2 =00F9 0200 ZTEMP3 = $F9 used ASCII to F.P. =00F9 0201 XREFSZ = ZTEMP3 asm X-Ref total size 0202 ; =0001 0203 .IF OSS =0600 0204 TPOBUF = $0600 asm obj buf +128 0205 ; & syntax text use 0206 .ENDIF =0001 0207 .IF SSAVE =0001 0208 SFLAG = $01 file LOADed flag =0134 0209 SFILE = $0134 filespec buffer =0018 0210 SLENG = 24 filespec size 0211 .ENDIF =0480 0212 RAM2 = $0480 non-zpage usage =0500 0213 RAM3 = $0500 secondary non-zpage =0580 0214 LBUFF = $0580 0215 ; 0216 ; Syntax stack +128 0217 ; =0500 0218 SIX = RAM3 syn save cix =0501 0219 SOX = SIX+1 syn save cox =0502 0220 SPC = SIX+2 syn save PC +2 0221 ; 0222 ; Assembler Buffer Allocitation 0223 ; Buffer size must be in 0224 ; multiples of pages. 0225 ; =0600 0226 BUFSIZE = 6*256 set 1.25K 0227 .PAGE "MEMORY MANAGEMENT EQUATES" PAGE 4 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MEMORY MANAGEMENT EQUATES D:EQUATE.INC 0228 ; 0229 ; Z-Page Memory Management Ptrs 0230 ; 0000 0231 *= RAZ1 0080 0232 LOMEM ; token buff 0080 0233 EXBUF ; execution buff 0080 0234 .DS 2 0082 0235 OBJBUF ; asm obj buff 0082 0236 REPBUF ; rep string buff 0082 0237 .DS 2 0084 0238 TXTTAB ; start of txt 0084 0239 .DS 2 0086 0240 STMCUR ; cur line ptr 0086 0241 .DS 2 0088 0242 TXTEND ; text end 0088 0243 ASMRAM ; assembly buffers 0088 0244 .DS 2 008A 0245 STACK ; parameter stack 008A 0246 .DS 2 008C 0247 MACSTRT ; macro def 008C 0248 .DS 2 008E 0249 MACEND ; macro end 008E 0250 SMBLTP ; symbol tab start 008E 0251 .DS 2 0090 0252 SMBLEND ; symbol tab end 0090 0253 MEMTOP ; top of used mem 0090 0254 .DS 2 0255 ; 0256 .PAGE "ROUTINE/POINTER EQUATES" PAGE 5 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow ROUTINE/POINTER EQUATES D:EQUATE.INC 0257 ; 0258 ; Routine & Table Pointers 0259 ; 0092 0260 COX ; cur exec buf indx 0092 0261 .DS 1 0093 0262 SRCADR ; search adr 0093 0263 MSGADR ; pr string adr 0093 0264 .DS 2 0095 0265 SVESA ; mangr sv strt adr 0095 0266 .DS 2 0097 0267 LABPT ; asm ptr: = & list 0097 0268 SAXPC ; syntax PC 0097 0269 RFPGN ; X-Ref page # count 0097 0270 .DS 2 0099 0271 OBJIX ; asm temp obj ptr 0099 0272 SAXTX ; syntax valid ptr 0099 0273 .DS 1 009A 0274 USADR ; utility adr ptr 009A 0275 SRLNUM ; sv line # for srch 009A 0276 LABOF ; lab handler use 009A 0277 .DS 1 009B 0278 AUGX ; macrox argument temp 009B 0279 .DS 1 009C 0280 MVSIZ ; mangr move size 009C 0281 SLSZ ; save/load file sz 009C 0282 .DS 2 0283 ; 0284 .PAGE "WORKING EQUATES" PAGE 6 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow WORKING EQUATES D:EQUATE.INC 0285 ; 0286 ; Working variables 0287 ; 009E 0288 STKLVL ; stntax stack ptr 009E 0289 MCRSK ; macrox stack ptr 009E 0290 .DS 1 009F 0291 SKIPFC ; search skip indx 009F 0292 MODFYBYT ; byte modifier value 009F 0293 SVERR ; save error code 009F 0294 .DS 1 00A0 0295 LELNM ; list end line# +2 00A0 0296 UEADR ; utility end adr +2 00A0 0297 LINK ; X-Ref test link +2 00A0 0298 RES ; asm exp resolved 00A0 0299 .DS 1 00A1 0300 CURAUG ; macrox para ptr 0301 ; 0302 .PAGE PAGE 7 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow WORKING EQUATES D:EQUATE.INC 0303 ; 0304 ; NEXT GROUP MUST STAY TOGETHER 0305 ; * - these locations are poison 0306 ; 00A1 0307 .DS 1 00A2 0308 EAF ; edit/pass # flg* 00A2 0309 .DS 1 00A3 0310 NMFG ; auto flg 00A3 0311 .DS 1 00A4 0312 EPF ; edit/rep flg* 00A4 0313 RFPAGF ; X-Ref flags (bits) 00A4 0314 .DS 1 00A5 0315 EIX ; err indx 00A5 0316 .DS 1 00A6 0317 ENTDV ; enter dev 00A6 0318 .DS 1 00A7 0319 LSTDV ; list dev 00A7 0320 .DS 1 00A8 0321 REFDV ; X-ref dev 00A8 0322 .DS 1 00A9 0323 SUPR ; supres list l. # 00A9 0324 .DS 1 0325 ; =0007 0326 GROUP = *-EAF-1 locs in group 0327 ; 00AA 0328 TXTFLAG ; text mode flag 00AA 0329 .DS 1 0330 .PAGE "MISC EQUATES" PAGE 8 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MISC EQUATES D:EQUATE.INC 0331 ; 0332 ; Misc locations 0333 ; 00AB 0334 BCODE ; asm base code 00AB 0335 DIRFG ; asm which directve 00AB 0336 NUMI ; auto inc +2 00AB 0337 .DS 1 00AC 0338 BFLD ; asm fld ofset 00AC 0339 TEM ; macro def temp 00AC 0340 TEM0 ; macrox temp 00AC 0341 .DS 1 00AD 0342 ASMPC ; asm PC +2 00AD 0343 CONDPTR ; syn cond text 00AD 0344 .DS 1 00AE 0345 ACTPTR ; syn actual text 00AE 0346 HDCIX ; temp for cix 00AE 0347 .DS 1 00AF 0348 ZT1 ; asm object list 00AF 0349 MODE ; asm multi adr typ 00AF 0350 MAXSORT ; sort largest len 00AF 0351 TEMP ; local temp 00AF 0352 .DS 1 00B0 0353 CURTOKE ; syn cur tst toke 00B0 0354 LTEMP ; asm lab process 00B0 0355 CMDLG ; internal line len 0356 ; 00B0 0357 .DS 1 00B1 0358 RPS1 ; rep 1st str len 00B1 0359 RSTK ; conditional stk ptr 00B1 0360 .DS 1 00B2 0361 RPSP ; rep str ptr, list 00B2 0362 .DS 1 00B3 0363 RPLL ; rep inbuf str len 00B3 0364 SVOP ; ex exp sv opertor 00B3 0365 TORG ; disasm test origin +2 00B3 0366 .DS 1 00B4 0367 RPOP ; rep old line ptr 00B4 0368 SVNP ; ex exp sv on prec 00B4 0369 .DS 1 00B5 0370 RPCL ; rep cur line ptr 00B5 0371 INMAC ; macrox in-process 00B5 0372 .DS 1 00B6 0373 ZTAB1 ; z-page tab list* 00B6 0374 .DS 1 00B7 0375 ZTAB2 ; z-page tab list* 00B7 0376 .DS 1 0377 .PAGE PAGE 9 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MISC EQUATES D:EQUATE.INC 0378 ; 0379 ; Do Not Relocate The Next Three Pointers!!! 0380 ; 0381 ; Bload header +4 00B8 0382 BUFFER ; asm sliding buffer pointer 00B8 0383 .DS 2 00BA 0384 BYTCNT ; asm byte counter for this read 00BA 0385 .DS 2 00BC 0386 FILESIZE ; asm source file size 00BC 0387 .DS 2 0388 ; 00BE 0389 OBJPTR ; asm obj buf indx 00BE 0390 .DS 1 00BF 0391 XREFBUFI ; X-Ref pointer 00BF 0392 .DS 2 00C1 0393 REAL ; asm master pass # 00C1 0394 .DS 1 00C2 0395 SXREF ; save X-Ref option 00C2 0396 .DS 1 00C3 0397 XRINDX ; 'Xrefbuf' index 00C3 0398 RPOC ; rep occurance 00C3 0399 .DS 1 00C4 0400 IONUM ; save IOCB # 00C4 0401 .DS 1 00C5 0402 CIOCMD ; save CIO command 00C5 0403 .DS 1 00C6 0404 ASMLINO ; asm current lineo +2 00C6 0405 .DS 2 00C8 0406 RPSE ; rep 1st str end 00C8 0407 LOCALIX ; local label counter 00C8 0408 .DS 1 00C9 0409 RPFD ; rep or find flg 00C9 0410 PCDEF ; asm PC def flg 00C9 0411 .DS 1 00CA 0412 EOFFLAG ; asm eof flag 00CA 0413 .DS 1 00CB 0414 RPIF ; rep inbuff flag 00CB 0415 LINECNT ; lines/page cntr 00CB 0416 .DS 1 00CC 0417 COLUMN ; list column count 00CC 0418 .DS 1 00CD 0419 PAGENUM ; page cntr +2 00CD 0420 .DS 2 00CF 0421 SYSTEM ; Internal SYS flags 0422 ; Bit 7: FIND/REP start at label 0423 ; colunm (=0) or at first colunm 0424 ; after line #. 0425 ; Bit 6: REP re-list of line 0426 ; after Replace (=0) is list. 0427 ; Bit 5: Local labels won't 0428 ; appear in symbol table printout. (=1) 0429 ; NOTE: Bit 4 not implimented 0430 ; Bit 4: Set if XE machine & 0431 ; so that X-Ref can use the 0432 ; extended memory instead of disk. 00CF 0433 .DS 1 0434 .PAGE PAGE 10 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MISC EQUATES D:EQUATE.INC 0435 ; 00D0 0436 *= ZFP-2 00D0 0437 SVN2 ; syntax use 00D0 0438 .DS 1 00D1 0439 SVF2 ; syntax use 00D1 0440 .DS 1 00D2 0441 RPS2 ; rep 2nd str len 00D2 0442 MPF ; asm pass 2/3 flag 00D2 0443 .DS 1 00D3 0444 OBJDV ; object device 00D3 0445 .DS 1 0446 ; 00D4 0447 *= FR0 00D4 0448 MANY ; asm CIO byte cnt+1 00D4 0449 .DS 2 00D6 0450 FWDPTR ; sort foward ptr 00D6 0451 LABLST ; list label start 00D6 0452 .DS 1 00D7 0453 LABLCH ; list label index 00D7 0454 .DS 1 00D8 0455 BCKPTR ; sort back ptr 00D8 0456 .DS 2 0457 ; 0458 ; *** Start of "FRE" 0459 ; 00DA 0460 .DS 1 unused- not safe 00DB 0461 SVCPC ; pass 3 sv PC +2 00DB 0462 XRFCHAR ; X-Ref list char =00DC 0463 XRFRDO = *+1 X-Ref single ref flag 00DB 0464 .DS 2 00DD 0465 SVSTM ; pass 3 sv stmt 00DD 0466 LASTL ; X-Ref last line # 00DD 0467 .DS 2 00DF 0468 ERRORS ; asm error count 00DF 0469 .DS 1 0470 ; 0471 .PAGE PAGE 11 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow MISC EQUATES D:EQUATE.INC 0472 ; 00E0 0473 *= FR1 00E0 0474 SWAPSORT ; sort exc flg 00E0 0475 LABLSZ ; list label size 00E0 0476 .DS 1 00E1 0477 HILOSORT ; sort len flg 00E1 0478 LABLCC ; list label column 00E1 0479 .DS 1 00E2 0480 SINDEX ; sort/list char index 00E2 0481 .DS 1 00E3 0482 TOPSTK ; ex exp push flag 00E3 0483 .DS 1 00E4 0484 LABELPTR ; sort/list lab ptr +2 00E4 0485 APTR ; ex exp oper ptr 00E4 0486 .DS 1 00E5 0487 OPTR ; ex exp argument ptr 00E5 0488 .DS 1 0489 ; 0490 ; *** Start of "FR2" 0491 ; 00E6 0492 MVFA ; mem mgr mv fr 00E6 0493 SLTMP ; save/load temp 00E6 0494 .DS 2 00E8 0495 MVTA ; mem mgr mv to 00E8 0496 KTMP ; "pdum" iocb indx +1 00E8 0497 .DS 2 =0000 0498 .IF MVTA<>[MVFA+2] 0499 .ERROR "MVTA, MVFA BAD" 0500 .ENDIF 00EA 0501 MVLGN ; mangr move len 00EA 0502 AMVTA ; asm IO move to addr (temp) 00EA 0503 ZTE4 ; list decimal # temp 00EA 0504 .DS 2 0505 ; 0506 ; *** Start of "FRX" 0507 ; 00EC 0508 BUFFERS ; asm IO buffers ptr 00EC 0509 .DS 2 00EE 0510 STRINGS ; asm string space ptr 00EE 0511 .DS 2 00F0 0512 BUFFERX ; X-Ref buffer ptr 00F0 0513 .DS 2 0514 ; 00F2 0515 *= RAZ3 00FB 0516 KLIST ; device master list 00FB 0517 .DS 1 00FC 0518 OPTFLAG ; asm option flg 00FC 0519 .DS 1 00FD 0520 TTIX ; list exbuf index 00FD 0521 .DS 1 00FE 0522 TOBJDEX ; asm byte list 00FE 0523 MNINDX ; disasm mnemonic index 00FE 0524 .DS 1 00FF 0525 COMMODE ; asm temp (.byte) 00FF 0526 .DS 1 0527 ; 0528 .PAGE "NON-ZERO PAGE EQUATES" PAGE 12 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow NON-ZERO PAGE EQUATES D:EQUATE.INC 0529 ; 0100 0530 *= RAM2 0480 0531 XCII *= *+2 OS/A+ system use 0532 ; Note: next four together (DFLTS) 0482 0533 HCNTRLC ; Control-C abort char 0482 0534 .DS 1 0483 0535 COLORS ; save system color 0483 0536 .DS 2 =0001 0537 .IF SPLIT 0485 0538 SPLO ; symbol char, lo 0485 0539 .DS 1 0486 0540 SPHI ; symbol char, hi 0486 0541 .DS 2 and X-ref hi 0542 .ENDIF 0543 ; =0000 0544 .IF .NOT ATARI 0545 ERRSTACK ; error stack +3 0546 .DS 3 0547 .ELSE =0060 0548 ERRSTACK = $60 newrow/drawto 0549 .ENDIF 0488 0550 SVLOMEM ; save lomem 0488 0551 .DS 2 048A 0552 TAB1 ; list TAB setings 048A 0553 .DS 1 048B 0554 TAB2 ; x 048B 0555 .DS 1 048C 0556 TAB3 ; x 048C 0557 .DS 1 =0001 0558 .IF XE130 048D 0559 XEBANK ; list X-Ref save bank 048D 0560 .DS 1 0561 .ENDIF 048E 0562 POINTER ; asm 'point' +3 048E 0563 .DS 3 0491 0564 OLDENTDV ; .include save device 0491 0565 .DS 1 0492 0566 BUFFTAB ; asm buffer table 0492 0567 .DS 6 0568 ; 0569 ; System ".SET" Storage 0570 ; There are 6 Sets 0571 ; 0498 0572 SYSSET ; 0498 0573 SETBYTE .DS 1 .byte & .sbyte format 0499 0574 LEFTMAR .DS 1 left margin 049A 0575 RIGHTMAR .DS 1 right margin 049B 0576 TOPFC .DS 1 top of form char 049C 0577 FORMSZ .DS 1 physical page size 049D 0578 CPAD .DS 1 comment space padding 049E 0579 OFFSET .DS 2 offset to object =0007 0580 SYSMAX = *-SYSSET-1 number of Sets 0581 ; 04A0 0582 RUNSTK ; conditional stack 04A0 0583 .DS 18 =0012 0584 SKMX = *-RUNSTK run stk top 0585 ; 0586 ; Macro stack 0587 ; =04B2 0588 SVCUR = * macrox sv stmcur =04B4 0589 SVAUG = *+2 sv param ptr =04B5 0590 SVEDV = *+3 sv enter dev 04B2 0591 .DS 68 stack size =0044 0592 TOPSK = *-SVCUR macro stk top 0593 ; 04F6 0594 SAVDEVI ; asm save pointers +6 04F6 0595 .DS 6 04FC 0596 SPOINTER ; label pointers +56 04FC 0597 .DS 56 0534 0598 XREFBUF ; X-ref line buffer 0534 0599 .DS 32 =0020 0600 XRMAX = *-XREFBUF top of buffer PAGE 13 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow NON-ZERO PAGE EQUATES D:EQUATE.INC =0014 0601 FZ = 20 filespec buffer size 0554 0602 ASMFM ; main filespec for list 0554 0603 .DS FZ 0568 0604 ASMFI ; include filespec 0568 0605 .DS FZ 057C 0606 .DS 0 where we are... 0607 ; 0608 .PAGE "VARIABLE TYPE EQUATES" PAGE 14 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow VARIABLE TYPE EQUATES D:EQUATE.INC 0609 ; 0610 ; Misc Working Equates 0611 ; =00C8 0612 TOSA = $C8 exexpr set stack =0037 0613 TOSE = $FF-TOSA exexpr TOS =01C8 0614 ARGOPS = $0100+TOSA ex exp stack =0050 0615 STRMAX = 80 reserve string space =00FE 0616 CKBYT = $FE save/load ck byte =0082 0617 @@SX = $82 instr stx =0080 0618 @@SY = $80 instr sty =00C0 0619 @ = $C0 for syntax tables =0009 0620 CH = 9 syntax change =0005 0621 THW = CH-4 token hex word =0006 0622 THB = CH-3 token hex byte =0007 0623 TDW = CH-2 token dec word =0008 0624 TDB = CH-1 token dec byte =0077 0625 RMODE = $77 rep on mode =0001 0626 .IF DDT? =0000 0627 DMODE = $00 DDt swap flag 0628 .ENDIF 0629 ; =0088 0630 EOF = $88 atari eof =009B 0631 EOL = $9B atari EOL =00FD 0632 BELL = $FD atari bell =007F 0633 TAB = $7F atari Tab 0634 ; =0003 0635 CNTRLC = 3 Control-C auto abort =000A 0636 LINEFEED = $0A line feed =000C 0637 TOPFORM = $0C top of form 0638 ; =0000 0639 QDUMY = 0 nested null =0001 0640 QELSE = 1 search endif/else =0002 0641 QSELSE = 2 else found =0003 0642 QENDIF = 3 search else =FF87 0643 RFNUM = -121 X-Ref word type =FF86 0644 RFNUB = -122 X-Ref relative =FF85 0645 RFPAG = -123 X-Ref page number =FF84 0646 RFLAB = -124 X-Ref label flag =FF83 0647 RFEOF = -125 X-Ref eof 0648 ; 0649 ; *** ERROR NUMBERS =0009 0650 NTPE = 9 nesting =000B 0651 SOFE = 11 conditional stk =000C 0652 NESR = 12 macro nest =0010 0653 DUPM = 16 dup macro name =0012 0654 LMR = 18 linked macro def =001C 0655 XRERR = 28 too many X-Refs =001D 0656 HLOCER = 29 too many Local fields =001E 0657 UDFM = 30 undef macro =001F 0658 NESM = 31 macrox nesting =0021 0659 NFPR = 33 Floating point # 0660 .PAGE "ATARI SYSTEM EQUATES" PAGE 15 MAC XL CARTRIDGE (C) 1985 Stephen D. Lawrow ATARI SYSTEM EQUATES D:EQUATE.INC 0661 ; *** CIO EQUATES =000E 0662 APHM = $0E =0008 0663 WARMFLG = $08 warm start? =0341 0664 ICDNO = $0341 =0342 0665 ICCOM = $0342 =0343 0666 ICSTA = $0343 =0344 0667 ICBUFA = $0344 =0346 0668 ICPUT = $0346 =0348 0669 ICBUFL = $0348 =034A 0670 ICAUX1 = $034A =034B 0671 ICAUX2 = $034B =034C 0672 ICSEC = $034C =034E 0673 ICBYT = $034E =E456 0674 XCIO = $E456 =4000 0675 XRAM = $4000 =D301 0676 D301 = $D301 =E471 0677 ATARIBYE = $E471 memo pad =002A 0678 ICAX1Z = $2A Z-page iocbs =002B 0679 ICAX2Z = $2B 0680 ; 0681 ; Routines in Floating Point Roms 0682 ; =DA5A 0683 ILSHIFT = $DA5A =DBA1 0684 SKPSPACE = $DBA1 =DA51 0685 INTLBF = $DA51 =D800 0686 AFP = $D800 =D9AA 0687 IFP = $D9AA =D9D2 0688 FPI = $D9D2 =D8E6 0689 FASCC = $D8E6 0690 ; =000A 0691 DOSVEC = $0A =0011 0692 BRKKEY = $11 =0244 0693 COLDST = $0244 =02A3 0694 TABMAP = $02A3 =02C5 0695 COLOR1 = $02C5 =02C6 0696 COLOR2 = $02C6 =02E5 0697 MTP = $02E5 highest available =02E7 0698 MEMLOW = $02E7 =02FC 0699 CHR = $02FC =02FE 0700 DSPFLG = $02FE =02FF 0701 SSFLAG = $02FF 0702 ; =D01F 0703 CONSOL = $D01F =D200 0704 POKEY = $D200 =D20F 0705 SKCTL = $D20F 0706 ; =0001 0707 .IF DDT? 0708 ; 0709 .INCLUDE #D2:DDTEQU.INC 0710 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow DUNION'S DDT EQUATES" 0711 .PAGE "DDT EQUATES" PAGE 16 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow DUNION'S DDT EQUATES DDT EQUATES D2:DDTEQU.INC 0712 ; 0713 ; WARM START LOCATION IS DDTWRM 0714 ; 0715 ; Zero Page Definitions 0716 ; =0010 0717 POKMSK = $10 =0014 0718 RTCLOK = $14 0719 ; 0720 ; Page 2 Definitions 0721 ; =0206 0722 VBREAK = $0206 =0208 0723 VKEYBD = $0208 =0222 0724 VVBLKI = $0222 =0223 0725 VVBKIH = $0223 =0224 0726 VVBLKD = $0224 =0225 0727 VVBKDH = $0225 =022F 0728 SDMCTL = $022F =0230 0729 SDLSTL = $0230 =0231 0730 SDLSTH = $0231 =026F 0731 GPRIOR = $026F =02C8 0732 COLOR4 = $02C8 =02F0 0733 CRSINH = $02F0 =02F3 0734 CHACT = $02F3 =02F4 0735 CHBAS = $02F4 0736 * ******************************* 0737 * 0738 * Hardware Registers 0739 * 0740 * ******************************* =D00D 0741 GRAFP0 = $D00D =D01D 0742 GRACTL = $D01D =D209 0743 KBCODE = $D209 =D20E 0744 IRQEN = $D20E =D400 0745 DMACTL = $D400 =D402 0746 DLISTL = $D402 =D40B 0747 VCOUNT = $D40B =D40E 0748 NMIEN = $D40E 0749 * ******************************* 0750 * 0751 * OS Addresses 0752 * 0753 * ******************************* =E002 0754 KCHACT = $E002 ;NOTE - THIS WILL LOAD CHACT & CHBAS =E45F 0755 KVVBKI = $E45F ;STANDARD VECTOR =E462 0756 KVVBKD = $E462 ;STANDARD VECTOR 0757 * ******************************* 0758 * 0759 * Other Definitions 0760 * 0761 ; =0004 0762 BORDR = $04 ;BORDER COLOR =0000 0763 BKGND = $00 ;BACKGROUND COLOR =000A 0764 TEXT = $0A ;TEXT LUMINANCE =009C 0765 DBCHR = $9C ;FLASH CHARACTER (CONTROL ESC NOW) 0766 ; 057C 0767 .ORG LOMEM+2 0082 0768 WINDF .DS 1 ;INIT 0 0083 0769 ZPSFLG .DS 1 ;ZERO PAGE SWAPPED FLAG FOR RESET 0084 0770 UNDFF .DS 1 0085 0771 ASAV .DS 1 0086 0772 XSAV .DS 1 0087 0773 YSAV .DS 1 0088 0774 SPSAV .DS 1 0089 0775 PSAV .DS 1 008A 0776 PCSAV .DS 2 008C 0777 POKSAV .DS 1 008D 0778 DINDIR .DS 2 008F 0779 DNDR2 .DS 2 0091 0780 DSCNFL .DS 1 0092 0781 BTEMP .DS 2 0094 0782 ITEMP .DS 1 0095 0783 CHCOL .DS 1 PAGE 17 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow DUNION'S DDT EQUATES DDT EQUATES D2:DDTEQU.INC 0096 0784 EXAMWI .DS 2 0098 0785 CC .DS 1 0099 0786 FSIZE .DS 1 009A 0787 HEXVAL .DS 2 009C 0788 MPROT .DS 1 009D 0789 TBYTE .DS 1 009E 0790 STEMP .DS 2 00A0 0791 ITBYTE .DS 1 00A1 0792 SSSIZ .DS 1 00A2 0793 SSTR .DS 6 0794 ; 0795 ; 00A8 0796 .ORG $03FD ;START OF CASSETTE BUFFER 03FD 0797 GRSAV .DS 13 040A 0798 BRKOR .DS 1 040B 0799 VKEYSV .DS 2 save keyboard IRQ vector 040D 0800 CRSTAT .DS 1 040E 0801 DEPSW .DS 1 040F 0802 DDTACT .DS 1 ;INIT 83 0410 0803 SSFLG .DS 1 0411 0804 DSCD1 .DS 284 ;DISPLAY LINES FOR WINDOW 052D 0805 DSCD2 .DS 32 ;DISPLAY LINE FOR BRKPS. 054D 0806 DSCD3 .DS 32 ;DISPLAY LINE FOR REGISTERS 0807 ; 056D 0808 BRKP0 .DS 15 ;INIT 0 0809 ; 057C 0810 .ORG $05FF-10 05F5 0811 TBED .DS 3 ;FOR DISPLACED INSTRUCTION 05F8 0812 .DS 3 ;INIT JMP SSRET 05FB 0813 .DS 3 ;INIT JMP SSBC2 0814 ; 0815 ; 0816 .ENDIF 0817 ; =0001 0818 .IF EPROM =9000 0819 .SET 6,-[$B000-[@@BASE+$1000]] 0820 .ENDIF 0821 .INCLUDE #D:HEADER 0822 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER" 0823 .PAGE "INIT & COLD START" PAGE 18 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER INIT & COLD START D:HEADER 95FE 0824 .ORG ROM 0825 ; 4000 4C44B0 0826 JMP WARM warm entry without CAR 0827 ; 0828 ; Cartridge init 0829 ; 4003 AD4402 0830 CARTI LDA COLDST power-up? 4006 F010 0831 BEQ :CI nope! 4008 8D00D5 0832 STA BANK1 syntax bank 400B 2054A3 0833 JSR DFLT 0834 ; 400E A9E4 0835 CARTRTN LDA # >XCIO set (CIO) 4010 8D8104 0836 STA XCII+1 4013 A956 0837 LDA # 0 0867 LDX # MES]<>[ >MES1] 0873 .ERROR "START-UP MSG ERROR" 0874 .ENDIF 403D A508 0875 LDA WARMFLG cart cold start? 403F D003 0876 BNE WARM nope! 0877 ; 0878 ; Cold Start 0879 ; 4041 20C5B0 0880 JSR INIT set mem ptrs & Edit mode 0881 ; 0882 ; Warm Start 0883 ; 4044 2030BE 0884 WARM JSR SETTAB set list tabs 4047 20F1B0 0885 JSR RESET init some vars 0886 ; 0887 .PAGE PAGE 19 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER INIT & COLD START D:HEADER 404A A903 0888 PRMPT LDA #3 enable keyboard 404C 8D0FD2 0889 STA SKCTL 404F 8D00D5 0890 STA BANK1 4052 20B1B7 0891 JSR DOCR 4055 A2B3 0892 LDX # EDIT 4059 24AA 0894 BIT TXTFLAG we in text mode? 405B 1002 0895 BPL :WRM0 nope 405D A2BC 0896 LDX # TXTMD]<>[ >EDIT] 0898 LDY # >TXTMD 0899 .ENDIF 0900 ; 405F 20AEB7 0901 :WRM0 JSR PTSE 4062 AD8304 0902 LDA COLORS set color 4065 8DC502 0903 STA COLOR1 4068 AD8404 0904 LDA COLORS+1 406B 8DC602 0905 STA COLOR2 0906 ; 406E 8D00D5 0907 NOPRM STA BANK1 syntax bank 4071 A204 0908 LDX #4 set tabs! =B073 0909 :BR0 .= * used 1 4073 BD29AA 0910 LDA :OSS,X 4076 9DA302 0911 STA TABMAP,X 4079 CA 0912 DEX 407A 10F7 0913 BPL :BR0 0914 ; 407C 9A 0915 TXS set stack 407D E8 0916 INX X=0 407E 8652 0917 STX $52 Left margin! 4080 86A4 0918 STX EPF clear REP mode 4082 86A2 0919 STX EAF set EDIT mode 4084 8EFE02 0920 STX DSPFLG display ctrl chars 4087 8E9D04 0921 STX CPAD comment pad=0 408A 2034A3 0922 JSR SD1 no sound 408D 209EB1 0923 JSR INPUT get line of input 4090 D0DC 0924 BNE NOPRM br if break key 0925 ; 4092 2064AC 0926 VERY JSR LNUM? numed line? 4095 B003 0927 BCS PEDIT no, try command 4097 4C0FB1 0928 JMP PTEXT process text 0929 .PAGE "PROCESS EDITOR COMMAND" PAGE 20 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER PROCESS EDITOR COMMAND D:HEADER 0930 ; 0931 ; Process Editor Command 0932 ; 409A 20DAA7 0933 PEDIT JSR KONVERT fix case 409D 20A1DB 0934 JSR SKPSPACE 40A0 A201 0935 LDX #1 go search 40A2 A9A2 0936 LDA # >COMMAND command table 40A4 A076 0937 LDY # DELY all are on same page 40B6 2066A3 0946 JSR STC syntax it 40B9 68 0947 PLA pop table entry 40BA B006 0948 BCS WHAT abort if bad 40BC 203CA3 0949 JSR EXEC execute 40BF 4C4AB0 0950 JMP PRMPT and re-prompt 40C2 4C23A3 0951 WHAT JMP _WHAT Print "What!" 0952 ; 0953 .PAGE "INITIALIZE & NEW" PAGE 21 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER INITIALIZE & NEW D:HEADER 0954 ; 0955 ; Cold Start Initialization 0956 ; 40C5 AEE702 0957 INIT LDX MEMLOW get lomem 40C8 8E8804 0958 STX SVLOMEM and save 40CB AEE802 0959 LDX MEMLOW+1 40CE 8E8904 0960 STX SVLOMEM+1 0961 ; 0962 ; Editor New 0963 ; 40D1 0964 NEWX 40D1 A900 0965 LDA #0 NEW clears 40D3 85AA 0966 NEWTXT STA TXTFLAG text mode 0967 ; 40D5 AE8804 0968 ENTTXT LDX SVLOMEM set lomem 40D8 AC8904 0969 LDY SVLOMEM+1 40DB 8680 0970 STX LOMEM 40DD 8481 0971 STY LOMEM+1 40DF C8 0972 INY for exbuff 40E0 8A 0973 TXA 40E1 A282 0974 LDX #OBJBUF set other ptrs 40E3 2000B1 0975 JSR CS1 40E6 A284 0976 LDX #TXTTAB expand by 256 40E8 A000 0977 LDY #0 for obj buff =0001 0978 .IF SSAVE 40EA 8401 0979 STY SFLAG no file LOADed 0980 .ENDIF 40EC A901 0981 LDA #1 40EE 4C46B4 0982 JMP EXPAND expand & return 0983 ; 0984 .PAGE "MISC CLEAN-UP" PAGE 22 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow HEADER MISC CLEAN-UP D:HEADER 0985 ; 0986 ; Clean-up for Return to Editor 0987 ; 40F1 A900 0988 RESET LDA #0 40F3 A207 0989 LDX #GROUP =B0F5 0990 :BR0 .= * used 1 40F5 95A2 0991 STA EAF,X clear all key 40F7 CA 0992 DEX 40F8 10FB 0993 BPL :BR0 0994 ; 0995 ; Reset upper pointers 0996 ; 40FA A28A 0997 RESET1 LDX #TXTEND+2 40FC A588 0998 LDA TXTEND 40FE A489 0999 LDY TXTEND+1 fall to CS1 1000 ; 1001 ; Init Table Pointers 1002 ; 4100 9500 1003 CS1 STA 0,X set adr low 4102 E8 1004 INX 4103 9400 1005 STY 0,X set adr high 4105 E8 1006 INX 4106 E092 1007 CPX #MEMTOP+2 at limit? 4108 90F6 1008 BCC CS1 =0001 1009 .IF ATARI 410A 840F 1010 STY APHM+1 and APHMI 410C 850E 1011 STA APHM 1012 .ENDIF 410E 60 1013 RTS 1014 ; 1015 .INCLUDE #D:MAIN0 1016 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN" 1017 .PAGE "PROCESS SOURCE LINE" PAGE 23 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PROCESS SOURCE LINE D:MAIN0 1018 ; 1019 ; Process Text Line 1020 ; Handle control C Auto-num exit here 1021 ; 410F A4F2 1022 PTEXT LDY CIX get 1st character 4111 B1F3 1023 LDA (INBUFF),Y 4113 C99B 1024 CMP #EOL if eol, delete 4115 F01B 1025 BEQ ?DELL 1026 ; 4117 84AE 1027 STY HDCIX save "cix" 4119 20A1DB 1028 JSR SKPSPACE is line 411C B1F3 1029 LDA (INBUFF),Y all spaces? 411E CD8204 1030 CMP HCNTRLC Auto abort? 4121 D007 1031 BNE ?HNC no 1032 ; 4123 A900 1033 LDA #0 else, stop Auto 4125 85A3 1034 STA NMFG 4127 4C44B0 1035 JMP WARM go warm start 412A C99B 1036 ?HNC CMP #EOL null line? 412C D00A 1037 BNE ?HNSP no 412E A5A4 1038 LDA EPF replace mode? 4130 F003 1039 BEQ ?NREP no 4132 4C0CA3 1040 ?DELL JMP DELL consider as delete 4135 4C6EB0 1041 ?NREP JMP NOPRM next input 1042 ; 4138 A4AE 1043 ?HNSP LDY HDCIX reset "cix" 413A 84F2 1044 STY CIX 413C E692 1045 INC COX dummy for offset 413E 20AEA6 1046 JSR SYNLI syntax line 4141 A002 1047 LDY #2 4143 C692 1048 DEC COX pop line eol 4145 A592 1049 LDA COX this is offset 4147 9180 1050 STA (EXBUF),Y to next line 1051 ; 4149 200AB2 1052 JSR FNDLI look for line 414C A900 1053 LDA #0 set for not found 414E B003 1054 BCS ?SKP br: line isn't there 4150 2044B2 1055 JSR GETOSET get current length 1056 ; 4153 38 1057 ?SKP SEC find diff 4154 E592 1058 SBC COX 4156 F017 1059 BEQ SAMEZ same size 4158 B00D 1060 BCS SMALLZ smaller 1061 ; 415A 203EB4 1062 JSR EXPTXT go expand 415D A595 1063 LDA SVESA restore current 415F 8586 1064 STA STMCUR line pointer 4161 A596 1065 LDA SVESA+1 4163 8587 1066 STA STMCUR+1 4165 D008 1067 BNE SAMEZ unc 1068 ; 4167 48 1069 SMALLZ PHA set-up contract 4168 204CB2 1070 JSR ADOFF adress 416B 68 1071 PLA 416C 20E5B4 1072 JSR CONTXT and contract 1073 ; 416F A492 1074 SAMEZ LDY COX move new line =B171 1075 :BR0 .= * used 1 4171 88 1076 DEY to memory 4172 B180 1077 LDA (EXBUF),Y 4174 9186 1078 STA (STMCUR),Y 4176 98 1079 TYA 4177 D0F8 1080 BNE :BR0 1081 ; 4179 A003 1082 LDY #3 check for bad line 417B B186 1083 LDA (STMCUR),Y non-zero 417D D00A 1084 BNE :20 if sucess 1085 ; 417F 85A9 1086 STA SUPR do pr line # 4181 85A4 1087 STA EPF clr REP rts flg 4183 203FBE 1088 JSR SETZTAB set zp tabs 4186 2048B5 1089 JSR PRLI print bad line PAGE 24 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PROCESS SOURCE LINE D:MAIN0 1090 ; 4189 24A3 1091 :20 BIT NMFG auto? 418B 1005 1092 BPL :21 no 418D 7003 1093 BVS :21 special- ATARI quirk 418F 20D2AC 1094 JSR UPCUR update next line # 1095 ; 4192 1096 OY 4192 A5A4 1097 :21 LDA EPF are we in 4194 C977 1098 CMP #RMODE replace mode? 4196 F003 1099 BEQ :28 yup 4198 4C6EB0 1100 JMP NOPRM else, to editor 1101 ; 419B 4C86AE 1102 :28 JMP VERYR to replace 1103 ; 1104 .PAGE "GET LINE OF TEXT" PAGE 25 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN GET LINE OF TEXT D:MAIN0 1105 ; 1106 ; Get line from dev (E:) 1107 ; 419E 2051DA 1108 INPUT JSR INTLBF =B1A1 1109 :BR0 .= * used 1 "INP" 41A1 20C8B3 1110 JSR EGLI get a line 41A4 C988 1111 CMP #EOF eof? 41A6 F0F9 1112 BEQ :BR0 yup 1113 ; 41A8 A900 1114 LDA #0 clr: 41AA 85F2 1115 STA CIX input index 41AC 8599 1116 STA SAXTX valid text pointer 41AE 8592 1117 STA COX output index 41B0 20A1DB 1118 JSR SKPSPACE 41B3 202AB7 1119 JSR TESTBK check break key 41B6 F005 1120 BEQ :27 no break 41B8 A000 1121 LDY #0 clear AUTO 41BA 84A3 1122 STY NMFG 41BC 88 1123 DEY reset flag =0000 1124 .IF .NOT DDT? 1125 DDT 1126 .ENDIF 41BD 60 1127 :27 RTS 1128 ; 1129 .INCLUDE #D:MAIN1 1130 .PAGE "EDITOR LIST AND PRINT" PAGE 26 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR LIST AND PRINT D:MAIN1 1131 ; 1132 ; Editor Print 1133 ; 41BE A080 1134 PRINTX LDY #$80 supress line # 1135 ; 1136 ; Editor List 1137 ; 41C0 1138 LISTX ; set print line # 41C0 84A9 1139 STY SUPR Y=0 from "EXEC" 41C2 203FBE 1140 JSR SETZTAB set z-tabs 1141 ; atari display 41C5 EEFE02 1142 INC DSPFLG control chars 1143 ; 41C8 20B1B7 1144 JSR DOCR a formality... 41CB 2090B5 1145 JSR GTOKE 41CE C93E 1146 CMP #@PND to a device? 41D0 D018 1147 BNE LX1 no 1148 ; 41D2 20D5B3 1149 JSR OPNOUT handle filespec 41D5 20E2B1 1150 JSR LX2 handle listing 1151 ; 41D8 A5A7 1152 CLOSEL LDA LSTDV close device 41DA 20EDB6 1153 JSR CLOSEI 41DD A900 1154 ZLDV0 LDA #0 reset back 41DF 85A7 1155 STA LSTDV to E: driver =B1E1 1156 :BR0 .= * used 3 "LX3" 41E1 60 1157 RTS Note: A=0 1158 ; 41E2 208AB5 1159 LX2 JSR GTOKEL ckeck ", lineo" 41E5 F003 1160 BEQ LX1 41E7 2090B5 1161 JSR GTOKE get next token 41EA 204FAF 1162 LX1 JSR LRNGE get S&E lineo's 1163 ; 1164 ; =B1ED 1165 :BR1 .= * used 1 "LX4" 41ED 202AB7 1166 JSR TESTBK break abort? 41F0 D0EF 1167 BNE :BR0 yup 41F2 20BBB3 1168 JSR LLINE past last line? 41F5 B0EA 1169 BCS :BR0 yes 41F7 2048B5 1170 JSR PRLI print this line 41FA 202AB7 1171 JSR TESTBK if middle of l. 41FD D0E2 1172 BNE :BR0 yup 41FF 2049B2 1173 JSR GTADOFF point to next 4202 90E9 1174 BCC :BR1 unc loop 1175 ; 1176 .PAGE "LINE NUMBER SEARCH" PAGE 27 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN LINE NUMBER SEARCH D:MAIN1 1177 ; 1178 ; Find lineo in srlnum 1179 ; 4204 A900 1180 FNDLI0 LDA #0 4206 859A 1181 STA SRLNUM 4208 859B 1182 FNDLI9 STA SRLNUM+1 1183 ; 420A 20AEB3 1184 FNDLI JSR ENDL? at memtop? 420D B013 1185 BCS FL1 start at "TXTTAB" 1186 ; 420F A001 1187 LDY #1 see if lineo > 4211 B186 1188 LDA (STMCUR),Y last line 4213 C59B 1189 CMP SRLNUM+1 4215 9013 1190 BCC FL2 less, start @ "STMCUR" 4217 D009 1191 BNE FL1 start at "TXTTAB" 1192 ; 4219 88 1193 DEY low byte 421A B186 1194 LDA (STMCUR),Y 421C C59A 1195 CMP SRLNUM 421E 900A 1196 BCC FL2 start @ "STMCUR" 4220 F01B 1197 BEQ FL5 at line, return 1198 ; 4222 A585 1199 FL1 LDA TXTTAB+1 set ptr to 4224 A484 1200 LDY TXTTAB start of text file 4226 8587 1201 STA STMCUR+1 4228 8486 1202 STY STMCUR 1203 ; 422A 20AEB3 1204 FL2 JSR ENDL? begin search 422D B00F 1205 BCS FL3 stop if text top 422F A001 1206 LDY #1 high =B231 1207 :BR0 .= * used 1 4231 B186 1208 LDA (STMCUR),Y 4233 D99A00 1209 CMP SRLNUM,Y 4236 9007 1210 BCC FL4 less, pt to nxt 4238 D004 1211 BNE FL3 end 423A 88 1212 DEY loop for low 423B 10F4 1213 BPL :BR0 423D 18 1214 FL5 CLC equal, set fnd 423E 60 1215 FL3 RTS 1216 ; 423F 2049B2 1217 FL4 JSR GTADOFF bump stmcur 4242 90E6 1218 BCC FL2 unc 1219 .PAGE PAGE 28 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN LINE NUMBER SEARCH D:MAIN1 1220 ; 1221 ; Get offset of stmcur in A 1222 ; 4244 A002 1223 GETOSET LDY #2 4246 B186 1224 LDA (STMCUR),Y =B248 1225 :BR0 .= * used 1 4248 60 1226 RTS 1227 ; 1228 ; Bump stmcur to next stmcur 1229 ; Return CC 1230 ; 4249 2044B2 1231 GTADOFF JSR GETOSET get offset 1232 ; 424C 18 1233 ADOFF CLC 424D 6586 1234 ADC STMCUR 424F 8586 1235 STA STMCUR 4251 90F5 1236 BCC :BR0 4253 E687 1237 INC STMCUR+1 4255 18 1238 CLC 4256 60 1239 RTS 1240 .PAGE "EDITOR ENTER" PAGE 29 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR ENTER D:MAIN1 1241 ; 1242 ; Editor Enter 1243 ; 4257 20E9B3 1244 ENTERX JSR HFILE handle filespec 425A 208AB5 1245 JSR GTOKEL merge? 425D F016 1246 BEQ NCL yup, clear & boot 1247 ; 425F 2090B5 1248 JSR GTOKE get enter option 4262 C94E 1249 CMP #@M check merge first 4264 F012 1250 BEQ NCN yup, merge 1251 ; 4266 20D5B0 1252 JSR ENTTXT clear memory 4269 A5A6 1253 LDA ENTDV set "special" enter 426B 0980 1254 ORA #$80 426D 85A6 1255 STA ENTDV 426F 209CAC 1256 JSR NUMX do auto-number 4272 4C6EB0 1257 JMP NOPRM go get input 1258 ; 4275 20D5B0 1259 NCL JSR ENTTXT clear memory 4278 4C6EB0 1260 NCN JMP NOPRM go for input 1261 ; 1262 .PAGE "EDITOR LOAD FILE" PAGE 30 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR LOAD FILE D:MAIN1 1263 ; 1264 ; Editor File Load 1265 ; 427B 1266 LOADX 427B 20E9B3 1267 JSR HFILE handl filespc 427E 208AB5 1268 JSR GTOKEL load with append? 4281 D010 1269 BNE LOAPP yup 4283 20D5B0 1270 JSR ENTTXT no, clear memory 1271 ; 1272 ; Save a copy of the file for SAVE 1273 ; =0001 1274 .IF SSAVE 4286 A217 1275 LDX #SLENG-1 string length =B288 1276 :BR0 .= * used 1 4288 BD8005 1277 LDA LBUFF,X filespec from 428B 9D3401 1278 STA SFILE,X open > save area 428E CA 1279 DEX 428F 10F7 1280 BPL :BR0 4291 8601 1281 STX SFLAG say we've got one! 1282 .ENDIF 1283 ; 4293 20BBB5 1284 LOAPP JSR GOBJ pop check byte 4296 C9FE 1285 CMP #CKBYT save file? 4298 D007 1286 BNE LOABT no, abort it! 429A 20BBB5 1287 JSR GOBJ next check byte 429D C9FE 1288 CMP #CKBYT ok? 429F F005 1289 BEQ LOAP1 yup 1290 ; 42A1 A9DF 1291 LOABT LDA #200+23 pseudo CIO err 42A3 4C48B6 1292 ERO JMP BADST 1293 ; 1294 ; 42A6 20BBB5 1295 LOAP1 JSR GOBJ get file size 42A9 859C 1296 STA SLSZ 42AB 20BBB5 1297 JSR GOBJ 42AE 859D 1298 STA SLSZ+1 1299 ; 42B0 18 1300 CLC calculate new 42B1 A588 1301 LDA TXTEND mem top and ck 42B3 659C 1302 ADC SLSZ for overflow 42B5 85E6 1303 STA SLTMP 42B7 A8 1304 TAY 42B8 A589 1305 LDA TXTEND+1 42BA 659D 1306 ADC SLSZ+1 42BC B010 1307 BCS ER24 file too big!!! 42BE 85E7 1308 STA SLTMP+1 1309 ; 42C0 CDE602 1310 CMP MTP+1 ckeck for val>memtop 42C3 900D 1311 BCC LOALP 42C5 D007 1312 BNE ER24 oops 42C7 CCE502 1313 CPY MTP 42CA 9006 1314 BCC LOALP 42CC F004 1315 BEQ LOALP 1316 ; 42CE A9E0 1317 ER24 LDA #24+200 load too big =B2D0 1318 :BR1 .= * used 1 42D0 D0D1 1319 BNE ERO 1320 .PAGE PAGE 31 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR LOAD FILE D:MAIN1 1321 ; 42D2 A6A6 1322 LOALP LDX ENTDV get enter dev 42D4 A907 1323 LDA #7 get chars cmd 42D6 209BB5 1324 JSR BLKIO1 set some CIO 1325 ; 42D9 A589 1326 LDA TXTEND+1 set "load at" 42DB A488 1327 LDY TXTEND adress 42DD 2016B7 1328 JSR IO4 go get 'em 42E0 C080 1329 CPY #$80 fix: test for break 42E2 F00C 1330 BEQ LOABRK don't set memtop 42E4 203FB6 1331 JSR GETSTAT get status 1332 ; 42E7 A5E6 1333 LDA SLTMP get new mem top 42E9 A4E7 1334 LDY SLTMP+1 42EB A288 1335 LDX #TXTEND set rest of 42ED 2000B1 1336 JSR CS1 z-page pointers 1337 ; 42F0 A5A6 1338 LOABRK LDA ENTDV close dev 42F2 20EDB6 1339 JSR CLOSEI 42F5 A900 1340 LDA #0 reset Enter device 42F7 85A6 1341 STA ENTDV to E: 42F9 60 1342 RTS return 1343 ; 1344 .PAGE "EDITOR BLOAD" PAGE 32 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR BLOAD D:MAIN1 1345 ; 1346 ; Editor Binary Load 1347 ; 42FA 20E9B3 1348 BLOADX JSR HFILE handl filespc 42FD 20BBB5 1349 JSR GOBJ pop ck bytes 4300 C9FF 1350 CMP #$FF bsave? 4302 D043 1351 BNE NBSV no 4304 20BBB5 1352 JSR GOBJ x 4307 C9FF 1353 CMP #$FF bsave? 4309 D03C 1354 BNE NBSV no 1355 ; =B30B 1356 :BR0 .= * used 1 430B A907 1357 LDA #7 get binary cmd 430D 2015B6 1358 JSR GLCXENT set-up 4310 A904 1359 LDA #4 get header 4312 9D4803 1360 STA ICBUFL,X 4315 A900 1361 LDA #0 4317 9D4903 1362 STA ICBUFL+1,X 431A A0B8 1363 LDY # 255 1839 TXA low byte to A 1840 STA (USADR),Y 1841 JMP CLOOP yup 1842 ; 1843 ?VAL LDA #10 val err 1844 JMP PUTERR quit & tell user 1845 ; 1846 UIP INC USADR inc pointer 1847 BNE UIY 1848 INC USADR+1 1849 UIY RTS x 1850 .ENDIF 1851 ; 1852 .INCLUDE #D:MAIN5 1853 ; 1854 ; Print Line Pointed to by Stmcur 1855 ; 4548 20F9BD 1856 PRLI JSR MOVIN move to inbuff 1857 ; fall thru INBOUT 1858 ; 1859 ; Move Data pointed to by inbuff 1860 ; 454B A000 1861 INBOUT LDY #0 clear index 454D 84F2 1862 INBOUT1 STY CIX 454F B1F3 1863 INB LDA (INBUFF),Y get char 4551 48 1864 PHA 4552 C90A 1865 CMP #LINEFEED line feed? 4554 D007 1866 BNE :WILK nope 4556 A4A2 1867 LDY EAF assembling? 4558 F003 1868 BEQ :WILK nope 1869 ; 455A 2000B8 1870 JSR TSTEJ test page eject 1871 ; 455D 68 1872 :WILK PLA =0001 1873 .IF __PRT 455E A4A9 1874 LDY SUPR do ATARI EOL? 4560 F005 1875 BEQ :WW0 no 4562 C99B 1876 CMP #EOL at end? 4564 D001 1877 BNE :WW0 yup, supress EOL 4566 60 1878 RTS 4567 1879 :WW0 1880 .ENDIF 4567 48 1881 PHA restore A 4568 20C6B5 1882 JSR CHARO print it 456B 68 1883 PLA 456C E6F2 1884 INC CIX bump index 456E A4F2 1885 LDY CIX 4570 C99B 1886 CMP #EOL if eol, then end 4572 D0DB 1887 BNE INB PAGE 44 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN EDITOR UTILITIES D:MAIN5 4574 60 1888 RTS 1889 ; 1890 .PAGE "MOVE FILESPEC FOR OPEN" PAGE 45 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN MOVE FILESPEC FOR OPEN D:MAIN5 1891 ; 1892 ; Move string to lbuff with eol 1893 ; 4575 85AF 1894 MOVESPC STA TEMP spec len in A 4577 A200 1895 LDX #0 clear index 4579 2090B5 1896 :MSP JSR GTOKE get char 457C 9D8005 1897 STA LBUFF,X put in lbuff 457F E8 1898 INX 4580 C6AF 1899 DEC TEMP pop count 4582 D0F5 1900 BNE :MSP loop if more 4584 A99B 1901 LDA #EOL tack on eol 4586 9D8005 1902 STA LBUFF,X 4589 60 1903 RTS 1904 ; 1905 .INCLUDE #D:MAIN6 1906 .PAGE "PROTECTED ROUTINES!" PAGE 46 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PROTECTED ROUTINES! D:MAIN6 1907 ; 1908 ; Get Command Token, CMP with @EOL 1909 ; 458A 2090B5 1910 GTOKEL JSR GTOKE get code 458D C93C 1911 CMP #@EOL set status 458F 60 1912 RTS 1913 ; 1914 ; Get a Token from exbuff 1915 ; 4590 A492 1916 GTOKE LDY COX get index 4592 E692 1917 INC COX point to nxt 4594 B180 1918 LDA (EXBUF),Y get token 4596 60 1919 RTS 1920 ; 1921 ; Do Block IO 1922 ; BLKIO1: Enter A = command, X = device 1923 ; 4597 A6D3 1924 BLKIO LDX OBJDV iocb # 4599 A90B 1925 BLKIO2 LDA #$0B put bytes 1926 ; 459B 2017B6 1927 BLKIO1 JSR GLCX set command & index 1928 ; 459E A59C 1929 LDA SLSZ move file size 45A0 9D4803 1930 STA ICBUFL,X to cio 45A3 A59D 1931 LDA SLSZ+1 45A5 9D4903 1932 STA ICBUFL+1,X 45A8 60 1933 RTS 1934 ; 1935 ; Test Left Margin (Return BEQ always) 1936 ; 45A9 AD9904 1937 LEFTMR LDA LEFTMAR left margin? 45AC D003 1938 BNE SPACE do 'em 45AE 60 1939 RTS 1940 ; 1941 ; Do Spaces 1942 ; 45AF A903 1943 SPACE3 LDA #3 do 3 spaces 45B1 85FD 1944 SPACE STA TTIX =B5B3 1945 :BR0 .= * used 1 45B3 20A5B7 1946 JSR DOSP 45B6 C6FD 1947 DEC TTIX 45B8 D0F9 1948 BNE :BR0 return 0 45BA 60 1949 RTS 1950 ; 1951 ; Get 1 byte from dev in Acc 1952 ; 45BB A907 1953 GOBJ LDA #7 was 6 45BD 2015B6 1954 JSR GLCXENT dev index & cmd 45C0 2007B7 1955 JSR IO2 get 1 byte in A 45C3 3026 1956 BMI :CR3 err! 45C5 60 1957 RTS 1958 ; 1959 ; Single Character Out Routine 1960 ; Also tests Control-1 key (ATARI) 1961 ; And re-trys timeout errors 1962 ; 45C6 A6A7 1963 CHARO LDX LSTDV 45C8 E6CC 1964 INC COLUMN bump col cnt 45CA 48 1965 :CR1 PHA save char 45CB 2019B6 1966 JSR GCX get CIO index 45CE 86E8 1967 STX KTMP in case fail 45D0 68 1968 PLA pop char 45D1 AEFF02 1969 :CR2 LDX SSFLAG start/stop? 45D4 D0FB 1970 BNE :CR2 yup wait 1971 ; 45D6 48 1972 PHA if error 45D7 A8 1973 TAY 45D8 A6E8 1974 LDX KTMP 45DA 20EFB5 1975 JSR PDUM 45DD 68 1976 PLA balance stack 45DE C08A 1977 CPY #138 did timeout occur? 45E0 9009 1978 BCC :CR3 nope PAGE 47 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PROTECTED ROUTINES! D:MAIN6 45E2 C08C 1979 CPY #139+1 or NAK 45E4 B005 1980 BCS :CR3 45E6 CEFF02 1981 DEC SSFLAG self-inhibit! 45E9 90E6 1982 BCC :CR2 unc, go wait 1983 ; 45EB 98 1984 :CR3 TYA 45EC 4C45B6 1985 JMP GST1 ck status 1986 ; 1987 ; Put: Y enters char 1988 ; 45EF BD4A03 1989 PDUM LDA ICAUX1,X set z-page iocb 45F2 852A 1990 STA ICAX1Z 45F4 BD4B03 1991 LDA ICAUX2,X 45F7 852B 1992 STA ICAX2Z 45F9 BD4703 1993 LDA ICPUT+1,X rts to routine 45FC 48 1994 PHA 45FD BD4603 1995 LDA ICPUT,X 4600 48 1996 PHA 4601 98 1997 TYA 4602 A092 1998 LDY #146 preset not impli 4604 60 1999 RTS 2000 ; 2001 ; Out 2 bytes to dev in A & X 2002 ; 4605 A9FF 2003 OUTFF LDA #-1 out $FFFF 4607 AA 2004 OUTAX TAX 4608 48 2005 OUT2 PHA 4609 8A 2006 TXA 460A 200EB6 2007 JSR :OUT1 460D 68 2008 PLA 2009 ; 2010 ; Out 1 byte to dev in A 2011 ; 460E A6D3 2012 :OUT1 LDX OBJDV 4610 4CCAB5 2013 JMP :CR1 2014 .PAGE PAGE 48 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PROTECTED ROUTINES! D:MAIN6 2015 ; 2016 ; Set CIO for Get Text 2017 ; 4613 A905 2018 STEXT LDA #5 2019 ; 2020 ; Set Dev Index & Cmd In CIO 2021 ; 4615 A6A6 2022 GLCXENT LDX ENTDV 4617 85C5 2023 GLCX STA CIOCMD cmd in A 4619 86C4 2024 GCX STX IONUM iocb in X 2025 ; 2026 ; Get CIO index 2027 ; 461B A5C4 2028 GETIO LDA IONUM 461D 0A 2029 ASL A 461E 0A 2030 ASL A 461F 0A 2031 ASL A 4620 0A 2032 ASL A 4621 AA 2033 TAX 4622 60 2034 RTS 2035 ; 4623 48 2036 CIO PHA save CIO cmd 4624 84C4 2037 STY IONUM save iocb # 4626 201BB6 2038 JSR GETIO 4629 A90C 2039 LDA #$0C close dev first 462B 201FB7 2040 JSR IO8 462E A003 2041 LDY #3 cmd for open 4630 84C5 2042 STY CIOCMD 4632 68 2043 PLA get open aux1 4633 9D4A03 2044 STA ICAUX1,X 4636 2090B5 2045 GTOKE7 JSR GTOKE 4639 297F 2046 AND #$7F 463B 60 2047 RTS ret A=filspc len 2048 ; 2049 .PAGE "IO4 & CIO STATUS HANDLER" PAGE 49 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN IO4 & CIO STATUS HANDLER D:MAIN6 2050 ; 2051 ; Call 'IO4' & fall to 'GETSTAT' 2052 ; 463C 2016B7 2053 IO4.S JSR IO4 2054 ; 2055 ; Get Cio Status 2056 ; 463F 201BB6 2057 GETSTAT JSR GETIO get dev index 4642 BD4303 2058 LDA ICSTA,X 4645 3001 2059 GST1 BMI BADST 4647 60 2060 :SO6 RTS ret to caller 2061 ; 4648 A000 2062 BADST LDY #0 reset display 464A 8CFE02 2063 STY DSPFLG control 464D 859F 2064 STA SVERR save err # 2065 ; 464F C980 2066 CMP #$80 break? 4651 D012 2067 BNE SO1 nope 4653 8411 2068 STY BRKKEY simulate break 4655 20DCB6 2069 JSR CFILE close files, and 4658 A5A2 2070 LDA EAF assembling? 465A D003 2071 BNE :ABR yup 465C 4CE8B6 2072 JMP :TEF 465F 8D04D5 2073 :ABR STA BANK2 4662 4C5EA3 2074 JMP ASMEXIT abort everything 2075 ; 4665 A5C4 2076 SO1 LDA IONUM was it Enter 4667 C5A6 2077 CMP ENTDV dev? 4669 F007 2078 BEQ SO3 yup 466B D019 2079 BNE SO4 2080 ; 466D 859F 2081 SO2 STA SVERR save err 466F 20F1B0 2082 JSR RESET reset for edit 2083 ; 4672 A5A2 2084 SO3 LDA EAF ck mode 4674 D018 2085 BNE SO7 br if in ASM 4676 20DCB6 2086 JSR CFILE close 4679 D010 2087 BNE :SO5 br if not eof 2088 ; 467B A4A2 2089 LDY EAF if not edit, 467D D0C8 2090 BNE :SO6 br 467F A900 2091 LDA #0 clear auto flag 4681 85A3 2092 STA NMFG x 4683 4C4AB0 2093 JMP PRMPT ret to edit 2094 ; 4686 20DCB6 2095 SO4 JSR CFILE close 4689 F0BC 2096 BEQ :SO6 don't print if eof 2097 ; 468B 4C0FB4 2098 :SO5 JMP PUTERR print error 2099 ; 2100 .PAGE PAGE 50 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN IO4 & CIO STATUS HANDLER D:MAIN6 2101 ; 468E A59F 2102 SO7 LDA SVERR 4690 C988 2103 CMP #EOF eof? 4692 D0F2 2104 BNE SO4 no, print error 2105 ; 4694 A6C4 2106 LDX IONUM 4696 E004 2107 CPX #4 we in .include? 4698 F022 2108 BEQ SO8 yup 469A A5A2 2109 LDA EAF don't point after 469C 10A9 2110 BPL :SO6 2nd pass; return 2111 ; 469E A925 2112 LDA #$25 46A0 2015B6 2113 JSR GLCXENT dev index & cmd 2114 ; 46A3 A902 2115 LDA #2 second byte 46A5 9D4E03 2116 STA ICBYT,X 46A8 AD8E04 2117 LDA POINTER move sector # 46AB 9D4C03 2118 STA ICSEC,X to iocb 46AE AD8F04 2119 LDA POINTER+1 46B1 9D4D03 2120 STA ICSEC+1,X 46B4 201DB7 2121 JSR IO5 go do it 46B7 30B4 2122 BMI SO2 if err 46B9 4C6BAF 2123 JMP POPSIZEF get file size 2124 ; 46BC 20EFB6 2125 SO8 JSR CLOSE close include dev 46BF AD9104 2126 LDA OLDENTDV restore old 46C2 85A6 2127 STA ENTDV dev, and close 46C4 85C4 2128 STA IONUM restore IONUM!!! 46C6 F00F 2129 BEQ SO9 skip if memory file 2130 ; 46C8 A005 2131 LDY #5 restore buffer 46CA 2056BA 2132 JSR MOVEDV 46CD A205 2133 LDX #5 restore pointers 46CF BDF604 2134 SO0 LDA SAVDEVI,X 46D2 95B8 2135 STA BUFFER,X 46D4 CA 2136 DEX 46D5 10F8 2137 BPL SO0 2138 ; 46D7 A940 2139 SO9 LDA #$40 set eof for 46D9 85CA 2140 STA EOFFLAG include 46DB 60 2141 RTS 2142 ; 2143 .PAGE "CLOSE ROUTINES" PAGE 51 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN CLOSE ROUTINES D:MAIN6 2144 ; 2145 ; Close System devs 2146 ; 46DC 20DDB1 2147 CFILE JSR ZLDV0 clr list dev 46DF 85A6 2148 STA ENTDV enter dev (A=0) 46E1 85A8 2149 STA REFDV x-ref dev 46E3 85D3 2150 STA OBJDV object dev 46E5 20F8B6 2151 JSR CLSALL close devices 46E8 A59F 2152 :TEF LDA SVERR 46EA C988 2153 CMP #EOF set Eof status =B6EC 2154 :BR0 .= * used 1 46EC 60 2155 RTS 2156 ; 2157 ; Close IOCB in ionum 2158 ; 46ED 85C4 2159 CLOSEI STA IONUM 46EF 201BB6 2160 CLOSE JSR GETIO get #*16 46F2 F0F8 2161 BEQ :BR0 never device #0 46F4 A90C 2162 LDA #$0C close command 46F6 D027 2163 BNE IO8 unc, do it 2164 ; 2165 ; Asm - Close All Devices 2166 ; 46F8 A005 2167 CLSALL LDY #5 46FA 84C4 2168 STY IONUM =B6FC 2169 :BR0 .= * used 1 46FC 20EFB6 2170 JSR CLOSE 46FF C6C4 2171 DEC IONUM 4701 D0F9 2172 BNE :BR0 4703 60 2173 RTS 2174 ; 2175 .PAGE "CIO ROUTINE & TEST BREAK" PAGE 52 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN CIO ROUTINE & TEST BREAK D:MAIN6 2176 ; 2177 ; I/O call routine 2178 ; 4704 A07E 2179 IO1 LDY #126 buf size =126 4706 2C 2180 .BYTE $2C 4707 A000 2181 IO2 LDY #0 buf=0 (byte in A) 4709 A900 2182 IO3 LDA #0 470B 9D4903 2183 STA ICBUFL+1,X set buff size 470E 98 2184 TYA 470F 9D4803 2185 STA ICBUFL,X 4712 A5F4 2186 LDA INBUFF+1 4714 A4F3 2187 LDY INBUFF 4716 9D4503 2188 IO4 STA ICBUFA+1,X set buff adr 4719 98 2189 TYA 471A 9D4403 2190 STA ICBUFA,X 471D A5C5 2191 IO5 LDA CIOCMD get cmd 471F 9D4203 2192 IO8 STA ICCOM,X x 4722 A900 2193 LDA #0 clear aux2 4724 9D4B03 2194 STA ICAUX2,X 4727 6C8004 2195 JMP (XCII) do I/O 2196 ; 2197 ; Test For Break Key or "BREAK" 2198 ; 472A A000 2199 TESTBK LDY #0 472C A511 2200 LDA BRKKEY 472E D003 2201 BNE ?01 4730 88 2202 DEY 4731 8411 2203 STY BRKKEY 4733 98 2204 ?01 TYA 4734 60 2205 RTS 2206 ; 2207 .PAGE "MISC PRINT ROUTINES" PAGE 53 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN MISC PRINT ROUTINES D:MAIN6 2208 ; 2209 ; Print Dec # Right Justified 2210 ; Field Size in Y 2211 ; 4735 85D5 2212 PDNUMF STA FR0+1 4737 86D4 2213 STX FR0 4739 88 2214 DEY pop for cmp 473A 84FD 2215 STY TTIX 473C 2075B7 2216 JSR INII integer to ASCII 473F A0FF 2217 LDY #-1 get digit cnt =B741 2218 :BR0 .= * used 1 4741 C8 2219 INY 4742 B1F3 2220 LDA (INBUFF),Y 4744 10FB 2221 BPL :BR0 4746 A5FD 2222 LDA TTIX get spaces to 4748 84FD 2223 STY TTIX print left of 474A 38 2224 SEC number 474B E5FD 2225 SBC TTIX 474D F010 2226 BEQ :PN0 no spaces 474F 300E 2227 BMI :PN0 no spaces 4751 20B1B5 2228 JSR SPACE leading spaces 4754 F009 2229 BEQ :PN0 unc, do number 2230 ; 2231 ; Print Dec Num in FR0 2232 ; 4756 A900 2233 PDNUM0 LDA #0 set high =0 4758 85D5 2234 PDNUM STA FR0+1 475A 86D4 2235 STX FR0 475C 2075B7 2236 PRDN JSR INII interger to ASCII 475F A2FF 2237 :PN0 LDX #-1 4761 86D0 2238 STX SVN2 init index 2239 ; 4763 E6D0 2240 :PN1 INC SVN2 4765 A4D0 2241 LDY SVN2 4767 B1F3 2242 LDA (INBUFF),Y 4769 08 2243 ENTERS PHP save stat 476A 24A6 2244 BIT ENTDV if ENTERing 476C 3003 2245 BMI :PN2 and in auto, skip 476E 20A7B7 2246 JSR DOMK out char 4771 28 2247 :PN2 PLP 4772 10EF 2248 BPL :PN1 br if not end 4774 60 2249 RTS 2250 ; 4775 20AAD9 2251 INII JSR IFP 4778 4CE6D8 2252 JMP FASCC 2253 ; 2254 ; Print Hex Word & Byte 2255 ; 477B 48 2256 HEXW PHA hex word in A & Y 477C 98 2257 TYA high in Y 477D 2081B7 2258 JSR HEXB 4780 68 2259 PLA 4781 48 2260 HEXB PHA hex byte on A 4782 4A 2261 LSR A 4783 4A 2262 LSR A 4784 4A 2263 LSR A 4785 4A 2264 LSR A 4786 208CB7 2265 JSR :HEO 4789 68 2266 PLA 478A 290F 2267 AND #$0F 2268 ; 478C A8 2269 :HEO TAY 478D B992B7 2270 LDA HEXT,Y get ASCII char 4790 D017 2271 BNE :OCH unc 2272 ; 4792 30313233 2273 HEXT .BYTE "0123456789ABCDEF" 4796 34353637 479A 38394142 479E 43444546 2274 ; 2275 ; Misc Print Routines 2276 ; PAGE 54 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN MISC PRINT ROUTINES D:MAIN6 47A2 2081B7 2277 HXBS JSR HEXB hex byte+space 47A5 A920 2278 DOSP LDA #$20 do space 47A7 297F 2279 DOMK AND #$7F mask 7th bit 47A9 4CC6B5 2280 :OCH JMP CHARO 2281 ; 47AC A0A0 2282 PTSC LDY # >MES for start-up msg 47AE 20C4B7 2283 PTSE JSR PTST text str+eol 47B1 A99B 2284 DOCR LDA #EOL do eol 47B3 D0F4 2285 BNE :OCH 47B5 207BB7 2286 HXWS JSR HEXW hex word+space 47B8 4CA5B7 2287 JMP DOSP 2288 ; 2289 ; Do 3 carrage returns 2290 ; 47BB 20B1B7 2291 :DCR3 JSR DOCR 47BE 20B1B7 2292 JSR DOCR 47C1 4CB1B7 2293 JMP DOCR 2294 ; 2295 ; Pr Text Str Pointed by X & Y 2296 ; 47C4 8693 2297 PTST STX MSGADR text string 47C6 8494 2298 STY MSGADR+1 47C8 A0FF 2299 LDY #-1 set index 47CA 84AF 2300 STY TEMP =B7CC 2301 :BR0 .= * used 1 47CC E6AF 2302 INC TEMP 47CE A4AF 2303 LDY TEMP 47D0 B193 2304 LDA (MSGADR),Y 47D2 30D3 2305 BMI DOMK end, return thru 47D4 20A7B7 2306 JSR DOMK else, JSR 47D7 4CCCB7 2307 JMP :BR0 and cont 2308 ; 2309 .PAGE "ASSEMBLER OUTPUT TEST ROUTINES" PAGE 55 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN ASSEMBLER OUTPUT TEST ROUTINES D:MAIN6 2310 ; 2311 ; Test to see if we list 2312 ; 47DA A5A2 2313 TSTLST LDA EAF get pass # 47DC 300E 2314 BMI :QX no 47DE A5FC 2315 LDA OPTFLAG opt flg for lst 47E0 1008 2316 BPL :QZ yes 2317 ; 47E2 2920 2318 TSTLSS AND #$20 err bit set? 47E4 D006 2319 BNE :QX no 47E6 A6A5 2320 LDX EIX err indx 47E8 F003 2321 BEQ :QY no errs, no lst 47EA A900 2322 :QZ LDA #0 47EC 60 2323 :QX RTS 47ED CA 2324 :QY DEX set not zero 47EE 60 2325 RTS 2326 ; 2327 ; Test to see if errors 2328 ; 47EF A5FC 2329 TSTERR LDA OPTFLAG 47F1 2920 2330 AND #$20 err bit set? 47F3 D003 2331 BNE :QV no 47F5 4CD0BF 2332 JMP LISTERR list errors 47F8 A900 2333 :QV LDA #0 clr er indx 47FA 85A5 2334 STA EIX 47FC 60 2335 RTS 2336 ; 2337 ; Test for page eject 2338 ; 47FD 20B1B7 2339 TSTEJCR JSR DOCR do a CR first 4800 E6CB 2340 TSTEJ INC LINECNT inc line cnt 4802 A5CB 2341 LDA LINECNT 4804 CD9C04 2342 CMP FORMSZ at max? 4807 9031 2343 BCC TSTJ1 no 2344 ; Non-centronics entry 4809 A5FC 2345 JECT LDA OPTFLAG 480B 4A 2346 LSR A no eject opt? 480C B028 2347 BCS TSTJ0 yes 2348 ; 2349 ; Eject page 2350 ; 480E 20DAB7 2351 JSR TSTLST 4811 D023 2352 BNE TSTJ0 ret 4813 A5D4 2353 PPASS LDA FR0 stack FR0 4815 48 2354 PHA 4816 A5D5 2355 LDA FR0+1 4818 48 2356 PHA 4819 AD9B04 2357 LDA TOPFC centronics if 0 481C F006 2358 BEQ :CTR0 481E 20C6B5 2359 JSR CHARO do top of form 4821 4C27B8 2360 JMP :CTR1 2361 ; 4824 20BBB7 2362 :CTR0 JSR :DCR3 2363 ; 4827 2061B8 2364 :CTR1 JSR PTITLE 482A 208FB8 2365 JSR PPAGE 482D 20BBB7 2366 JSR :DCR3 4830 68 2367 PLA unstack FR0 4831 85D5 2368 STA FR0+1 4833 68 2369 PLA 4834 85D4 2370 STA FR0 4836 A900 2371 TSTJ0 LDA #0 clr pg cnt 4838 85CB 2372 STA LINECNT stat = 0 483A 60 2373 TSTJ1 RTS 2374 ; 2375 .PAGE "DIRECTIVE .PAGE" PAGE 56 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN DIRECTIVE .PAGE D:MAIN6 2376 ; 2377 ; Directive page 2378 ; 483B A201 2379 @@PAGE LDX #1 get string statement 483D 200CAF 2380 JSR MSRG move string 4840 20DAB7 2381 JSR TSTLST see if list 4843 D008 2382 BNE @PH no list 4845 2085A4 2383 JSR SPP3 list line 2384 ; BIT LINECNT just ejected? 2385 ; branch @ph 4848 204EB8 2386 JSR PAGE55 eject nxt page 484B C6CB 2387 DEC LINECNT reset to -1 484D 60 2388 @PH RTS else, ret 2389 ; 2390 ; Do blank lines until new page 2391 ; 484E AD9B04 2392 PAGE55 LDA TOPFC centronics if 0 4851 F006 2393 BEQ PAGE56 4853 4C09B8 2394 JMP JECT and page eject 2395 ; =B856 2396 :BR0 .= * used 1 4856 20B1B7 2397 JSR DOCR 4859 2000B8 2398 PAGE56 JSR TSTEJ bump line cnt 485C A5CB 2399 LDA LINECNT test for zero 485E D0F6 2400 BNE :BR0 do blank line 4860 60 2401 RTS 2402 ; 2403 .PAGE "PRINT .TITLE & .PAGE" PAGE 57 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PRINT .TITLE & .PAGE D:MAIN6 2404 ; 2405 ; Print title & page 2406 ; 4861 A5A8 2407 PTITLE LDA REFDV doing X-Refs? 4863 D004 2408 BNE :NWR no 4865 A5C2 2409 LDA SXREF option no X-Ref? 4867 F005 2410 BEQ :NYR no 4869 A985 2411 :NWR LDA #RFPAG flag page 486B 20D6BA 2412 JSR XROUT 2413 ; 486E 20A9B5 2414 :NYR JSR LEFTMR test left margin 4871 E6CD 2415 INC PAGENUM bump page count 4873 D002 2416 BNE :PI0 4875 E6CE 2417 INC PAGENUM+1 2418 ; 4877 A0B8 2419 :PI0 LDY # >PAMES print 'PAGE ' 4879 A2CC 2420 LDX # ASMFM set for main 48C3 A254 2464 LDX # ASMFM]=[ >ASMFI] 2467 LDY # >ASMFI 2468 .ENDIF 48C7 A268 2469 LDX # BUFSIZE be less than buffer 4A05 9004 2665 BCC GETK2 2666 ; 4A07 A905 2667 LDA # >BUFSIZE-1 set # of 4A09 A2FF 2668 LDX # BUFSIZE 4A67 85EB 2730 STA MVLGN+1 4A69 4C2EB5 2731 JMP CONT4 2732 ; 2733 ; 2734 ; Put object buffer to dev 2735 ; 4A6C A000 2736 RUNOUT LDY #0 pre-set <256 4A6E A5BE 2737 LDA OBJPTR buffer size 4A70 D001 2738 BNE RUNO0 br: less 4A72 C8 2739 INY set = 256 4A73 859C 2740 RUNO0 STA SLSZ set-up for BLKIO 4A75 849D 2741 STY SLSZ+1 4A77 2097B5 2742 JSR BLKIO 4A7A A583 2743 LDA OBJBUF+1 buff address 4A7C A482 2744 LDY OBJBUF 4A7E 4C3CB6 2745 JMP IO4.S go do it 2746 ; 2747 .PAGE "DIRECTIVE .INCLUDE" PAGE 65 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN DIRECTIVE .INCLUDE D:MAIN8 2748 ; 2749 ; Directive include 2750 ; 4A81 2751 @@INCLUDE 4A81 E692 2752 INC COX skip pound sign 4A83 A5A6 2753 LDA ENTDV 4A85 C904 2754 CMP #4 already include? 4A87 F030 2755 BEQ INEST 4A89 8D9104 2756 STA OLDENTDV save iocb 2757 ; 4A8C A8 2758 TAY 4A8D F00D 2759 BEQ FINCL don't move if memory 4A8F 2056BA 2760 JSR MOVEDV Y = 3 4A92 A205 2761 LDX #5 save primary pointers 4A94 B5B8 2762 :INCSV LDA BUFFER,X 4A96 9DF604 2763 STA SAVDEVI,X 4A99 CA 2764 DEX 4A9A 10F8 2765 BPL :INCSV 2766 ; 4A9C A900 2767 FINCL LDA #0 clear byte count 4A9E 85BA 2768 STA BYTCNT 4AA0 85BB 2769 STA BYTCNT+1 4AA2 2051DA 2770 JSR INTLBF reset inbuff 4AA5 A004 2771 LDY #4 IOCB #4 4AA7 20EDB3 2772 JSR HFII do CIO 2773 ; 4AAA A263 2774 LDX # ASMFI] filespec for list =0000 2775 .IF [ >ASMFI]<>[ >ASMFM] 2776 LDY # >ASMFI 2777 .ENDIF 4AAC 20BEBA 2778 JSR HSTR 2779 ; 4AAF 205DAF 2780 JSR VALIDF test ck bytes 4AB2 A2FF 2781 LDX # >$FF00 (line #65280) 4AB4 86DE 2782 STX LASTL+1 force X-Ref word token 4AB6 4C85A4 2783 JMP SPP3 list 4AB9 A915 2784 INEST LDA #21 include err 4ABB 4C82A4 2785 JMP SP3ER 2786 ; 2787 ; Move filespec string for listing 2788 ; Enter: X(H), Y(L) addr of buffer 2789 ; 4ABE 2790 HSTR =0000 2791 .IF [[ >[ASMFI- >ASMFI]]]<>[[ >[ASMFM- >ASMFM]]] 2792 .ERROR "ASMFI, ASMFM PAGE" 2793 .ENDIF 2794 ; =0001 2795 .IF [ >ASMFI]=[ >ASMFM] 4ABE A005 2796 LDY # >ASMFI 2797 .ENDIF 4AC0 8494 2798 STY SRCADR+1 set pointer 4AC2 8693 2799 STX SRCADR 4AC4 B97B05 2800 ?MM LDA LBUFF-[ >ASMFI],Y move string 4AC7 9193 2801 STA (SRCADR),Y 4AC9 C8 2802 INY 4ACA C99B 2803 CMP #EOL done? 4ACC F004 2804 BEQ ?ML yup 4ACE C019 2805 CPY #FZ+[ >ASMFI] buff a max? 4AD0 90F2 2806 BCC ?MM no 2807 ; 4AD2 88 2808 ?ML DEY flag last char 4AD3 4C3CAF 2809 JMP PM80 2810 ; 2811 .PAGE "X-REFERENCE ROUTINES" PAGE 66 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN X-REFERENCE ROUTINES D:MAIN8 2812 ; 2813 ; Dump X-Ref Data 2814 ; 4AD6 A200 2815 XROUT LDX #0 byte in A 4AD8 81BF 2816 STA (XREFBUFI,X) store 4ADA E6BF 2817 INC XREFBUFI bump pointer 4ADC D002 2818 BNE :QRFO 4ADE E6C0 2819 INC XREFBUFI+1 bump pointer H 2820 ; 4AE0 A5C0 2821 :QRFO LDA XREFBUFI+1 4AE2 C58B 2822 CMP ASMRAM+3 top of buff? 4AE4 9006 2823 BCC :QRFR nope 4AE6 A5BF 2824 LDA XREFBUFI try low 4AE8 C58A 2825 CMP ASMRAM+2 4AEA B001 2826 BCS RFWRITE dump this block 4AEC 60 2827 :QRFR RTS 2828 ; 4AED 38 2829 RFWRITE SEC form buff size 4AEE A5BF 2830 LDA XREFBUFI 4AF0 E5F0 2831 SBC BUFFERX 4AF2 AA 2832 TAX 4AF3 A5C0 2833 LDA XREFBUFI+1 4AF5 E5F1 2834 SBC BUFFERX+1 4AF7 869C 2835 STX SLSZ for BLKIO 4AF9 859D 2836 STA SLSZ+1 4AFB 8A 2837 TXA 4AFC 059D 2838 ORA SLSZ+1 nothing there? 4AFE F0EC 2839 BEQ :QRFR nope! 2840 ; 4B00 18 2841 CLC 4B01 8A 2842 TXA update file size 4B02 65F9 2843 ADC XREFSZ 4B04 85F9 2844 STA XREFSZ 4B06 A59D 2845 LDA SLSZ+1 4B08 65FA 2846 ADC XREFSZ+1 4B0A 85FA 2847 STA XREFSZ+1 2848 ; 4B0C 98 2849 TYA 4B0D 48 2850 PHA save Y 4B0E A6A8 2851 LDX REFDV 4B10 2099B5 2852 JSR BLKIO2 set-up CIO 4B13 A5F1 2853 LDA BUFFERX+1 4B15 85C0 2854 STA XREFBUFI+1 reset buffer 4B17 A4F0 2855 LDY BUFFERX 4B19 84BF 2856 STY XREFBUFI 4B1B 203CB6 2857 JSR IO4.S do CIO 4B1E 68 2858 PLA 4B1F A8 2859 TAY restore Y 4B20 60 2860 V00 RTS 2861 ; 2862 .PAGE PAGE 67 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN X-REFERENCE ROUTINES D:MAIN8 2863 ; 4B21 24A2 2864 WRTXREF BIT EAF only if pass 2 4B23 30FB 2865 BMI V00 4B25 A5C3 2866 LDA XRINDX something there? 4B27 F0F7 2867 BEQ V00 nope! 4B29 A5A8 2868 LDA REFDV and doing it... 4B2B F0F3 2869 BEQ V00 2870 ; 4B2D A001 2871 LDY #1 4B2F B180 2872 LDA (EXBUF),Y line # relative? 4B31 C5DE 2873 CMP LASTL+1 4B33 D01F 2874 BNE YRFW nope 4B35 88 2875 DEY 4B36 B180 2876 LDA (EXBUF),Y low 4B38 38 2877 SEC 4B39 E5DD 2878 SBC LASTL 4B3B F00A 2879 BEQ YRFB if 0 4B3D C978 2880 CMP #120 4B3F B006 2881 BCS YRFB two byte relative 4B41 49FF 2882 EOR #-1 compliment 4B43 6901 2883 ADC #1 4B45 D007 2884 BNE YRRV 2885 ; 4B47 48 2886 YRFB PHA save offset 4B48 A986 2887 LDA #RFNUB relative >=120 4B4A 20D6BA 2888 JSR XROUT 4B4D 68 2889 PLA 4B4E 20D6BA 2890 YRRV JSR XROUT out it 4B51 4C64BB 2891 JMP UREF0 y=0 2892 ; 4B54 A987 2893 YRFW LDA #RFNUM line # word flag 4B56 20D6BA 2894 JSR XROUT 4B59 A001 2895 LDY #1 4B5B B180 2896 YXR LDA (EXBUF),Y Hi/Lo format 4B5D 20D6BA 2897 JSR XROUT 4B60 88 2898 DEY 4B61 10F8 2899 BPL YXR 4B63 C8 2900 INY Y=0 2901 ; 4B64 B93405 2902 UREF0 LDA XREFBUF,Y out references 4B67 20D6BA 2903 JSR XROUT 4B6A B93505 2904 LDA XREFBUF+1,Y 4B6D 20D6BA 2905 JSR XROUT 4B70 C8 2906 INY 4B71 C8 2907 INY 4B72 C4C3 2908 CPY XRINDX done? 4B74 90EE 2909 BCC UREF0 4B76 A000 2910 LDY #0 reset index 4B78 84C3 2911 STY XRINDX 2912 ; set last line # 4B7A B180 2913 LDA (EXBUF),Y 4B7C 85DD 2914 STA LASTL 4B7E C8 2915 INY 4B7F B180 2916 LDA (EXBUF),Y 4B81 85DE 2917 STA LASTL+1 4B83 60 2918 RTS ret 2919 ; 2920 ; Note starting sector of ENTDV 2921 ; 4B84 A926 2922 DONOTE LDA #$26 set for NOTE command 4B86 2015B6 2923 JSR GLCXENT 4B89 201DB7 2924 JSR IO5 do cio 4B8C BD4C03 2925 LDA ICSEC,X save sector # for 4B8F 8D8E04 2926 STA POINTER pass 2 or X-Ref use 4B92 BD4D03 2927 LDA ICSEC+1,X 4B95 8D8F04 2928 STA POINTER+1 4B98 4C3FB6 2929 JMP GETSTAT ret & check status 2930 ; 2931 .INCLUDE #D:MAIN9 2932 .PAGE "PRINT SYMBOL TABLE" PAGE 68 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PRINT SYMBOL TABLE D:MAIN9 2933 ; 2934 ; Set Buffer addr 2935 ; =0001 2936 :SETBF .IF XE130 4B9B A9E3 2937 LDA #$E3 init to Bank #1 4B9D 8D8D04 2938 :SETBF@ STA XEBANK 4BA0 A900 2939 LDA # XRAM 4BA6 85B9 2942 STA BUFFER+1 2943 .ELSE 2944 LDA MEMTOP+1 load addr 2945 LDY MEMTOP 2946 STA BUFFER+1 init buffer adr 2947 STY BUFFER 2948 .ENDIF 4BA8 60 2949 :10 RTS 2950 ; 2951 ; Symbol table print out 2952 ; 4BA9 2953 @@SYMBOL 4BA9 204BA5 2954 JSR ASMMESS asm end message 4BAC A900 2955 LDA #0 init to no X-Ref 4BAE 85A4 2956 STA RFPAGF 4BB0 A5A8 2957 LDA REFDV doing X-Ref? 4BB2 D007 2958 BNE DREFS yup! 4BB4 A5FC 2959 LDA OPTFLAG check list option 4BB6 30F0 2960 BMI :10 no list, no table! 4BB8 4C0DBC 2961 JMP PS1 2962 ; 2963 ; Dump X-Refs 2964 ; 4BBB 2965 DREFS 4BBB A982 2966 LDA # <$C1*2 set pre-shifted value 4BBD 06FC 2967 ASL OPTFLAG bit 7 to carry (list bit) 4BBF 6A 2968 ROR A to bit 7 of Acc 4BC0 46FC 2969 LSR OPTFLAG clearing bit 7 4BC2 85A4 2970 STA RFPAGF format flag: 2971 ; A=$41 print page #'s 2972 ; A=$C1 no page #'s =0000 2973 .IF .NOT XE130 2974 LDA #1 contract Macro 2975 LDY #0 parameter stack 2976 LDX #STACK+2 2977 JSR CONTRACT 2978 ; contract Macro table 2979 SEC 2980 LDA MACEND 2981 SBC MACSTRT 2982 TAY low =Y 2983 LDA MACEND+1 2984 SBC MACSTRT+1 2985 LDX #MACEND 2986 JSR CONTRACT 2987 ; Zap buffers 2988 LDA # >[BUFSIZE*2+BUFSIZE/2+STRMAX+[STRMAX-SSML-1]] 2989 LDY # <[BUFSIZE*2+BUFSIZE/2+STRMAX+[STRMAX-SSML-1]] 2990 LDX #ASMRAM+2 2991 JSR CONTRACT 2992 .ENDIF 2993 .PAGE PAGE 69 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN PRINT SYMBOL TABLE D:MAIN9 =0000 2994 .IF .NOT XE130 2995 ; 2996 ; Now, test file size 2997 ; 2998 CLC can file fit? 2999 LDA XREFSZ 3000 STA SLSZ set file size 3001 ADC MEMTOP 3002 TAX save low 3003 LDA XREFSZ+1 3004 STA SLSZ+1 file size high 3005 ADC MEMTOP+1 3006 CMP MTP+1 3007 BCC XROK good, it'll fit 3008 BNE :OOPS 3009 CPX MTP 3010 BCC XROK good, it'll fit 3011 ; 3012 ; File is too big 3013 ; 3014 :OOPS LDA #0 3015 STA RFPAGF no xref's 3016 BEQ PS1 3017 ; 3018 ; Burst it in 3019 ; 3020 XROK LDX ENTDV 3021 LDA #7 get binary cmd 3022 JSR BLKIO1 set some CIO 3023 JSR :SETBF load addr & buffer addr 3024 JSR IO4.S do the IO/status 3025 .ELSE 4BC4 A9E3 3026 LDA #$E3 init to Bank #1 4BC6 3027 XELOAD 4BC6 209DBB 3028 JSR :SETBF@ 4BC9 A6F9 3029 LDX XREFSZ pre-load low 4BCB A5FA 3030 LDA XREFSZ+1 get hi 4BCD 05F9 3031 ORA XREFSZ zero left to get? 4BCF F037 3032 BEQ XEDONE yup 4BD1 A5FA 3033 LDA XREFSZ+1 get hi again 4BD3 C940 3034 CMP #$40 less than 16k? 4BD5 9004 3035 BCC :BXE yup, do remainder 4BD7 A940 3036 LDA #$40 else, get 16k 4BD9 A200 3037 LDX #0 4BDB 859D 3038 :BXE STA SLSZ+1 set size for I/O 4BDD 869C 3039 STX SLSZ 4BDF 38 3040 SEC update count left 4BE0 A5F9 3041 LDA XREFSZ 4BE2 E59C 3042 SBC SLSZ 4BE4 85F9 3043 STA XREFSZ 4BE6 A5FA 3044 LDA XREFSZ+1 4BE8 E59D 3045 SBC SLSZ+1 4BEA 85FA 3046 STA XREFSZ+1 3047 ; Burst it in 4BEC A6A6 3048 LDX ENTDV 4BEE A907 3049 LDA #7 get binary cmd 4BF0 209BB5 3050 JSR BLKIO1 set some CIO 4BF3 AD8D04 3051 LDA XEBANK 4BF6 8D01D3 3052 STA D301 4BF9 A940 3053 LDA # >XRAM load addr & buffer addr 4BFB A000 3054 LDY # 64k, Unlikely? 4DE0 8A 3365 TXA restore "A" 3366 ; get NE status & 4DE1 A2F3 3367 LDX #$E3![4*4] D301 main mem 4DE3 60 3368 RTS 3369 ; 3370 .INCLUDE #D:MAIN10 3371 .PAGE "CALL CONVERT TOKEN LINE" PAGE 76 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN CALL CONVERT TOKEN LINE D:MAIN10 3372 ; 3373 ; Assembler list entry point 3374 ; 4DE4 3375 ASMLST 4DE4 A002 3376 ASMLST1 LDY #2 line length 4DE6 B180 3377 LDA (EXBUF),Y 4DE8 A680 3378 LDX EXBUF get pointer to 4DEA A481 3379 LDY EXBUF+1 token line 4DEC 8D03D5 3380 STA BANK3 4DEF 2055A1 3381 JSR _EDTV convert it 4DF2 200FA3 3382 JSR RIGHTMR print to eol & ret 4DF5 8D04D5 3383 STA BANK2 to ASM bank 4DF8 60 3384 RTS 3385 ; 3386 ; Editor list entry point 3387 ; 4DF9 2044B2 3388 MOVIN JSR GETOSET get inter len 4DFC A686 3389 LDX STMCUR mv stmcur for 4DFE A487 3390 LDY STMCUR+1 conversion 3391 ; 4E00 3392 EDTV 4E00 8D03D5 3393 STA BANK3 in bank C 4E03 2055A1 3394 JSR _EDTV 4E06 8D00D5 3395 STA BANK1 4E09 60 3396 RTS 3397 ; 3398 .INCLUDE #D:MAIN11 3399 .PAGE "DUMP SYMBOLS ROUTINES" PAGE 77 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN DUMP SYMBOLS ROUTINES D:MAIN11 3400 ; 3401 ; Form topsort Y enters high 3402 ; 4E0A 18 3403 FORMTOP CLC 4E0B A58E 3404 LDA SMBLTP form topsort 4E0D 7D7E04 3405 ADC SPOINTER-'?*2,X cc 4E10 85E4 3406 STA LABELPTR 4E12 98 3407 TYA 4E13 658F 3408 ADC SMBLTP+1 4E15 85E5 3409 STA LABELPTR+1 4E17 60 3410 RTS 3411 ; 3412 ; Form From Labelptr A enters HI 3413 ; Exit: A = high Y = low 3414 ; 4E18 AA 3415 FORMLAB TAX save high 4E19 18 3416 CLC 4E1A 88 3417 DEY point to low 4E1B A58E 3418 LDA SMBLTP add base to 4E1D 71E4 3419 ADC (LABELPTR),Y offset 4E1F A8 3420 TAY save low 4E20 8A 3421 TXA do high 4E21 658F 3422 ADC SMBLTP+1 4E23 60 3423 RTS 3424 .PAGE "MAC TAB ROUTINES & IFS/GETSLEN" PAGE 78 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN MAC TAB ROUTINES & IFS/GETSLEN D:MAIN11 3425 ; 4E24 A584 3426 SETTAB0 LDA TXTTAB pnt to first 4E26 8586 3427 STA STMCUR line in memory 4E28 A585 3428 LDA TXTTAB+1 4E2A 8587 3429 STA STMCUR+1 4E2C A904 3430 LDA #4 init obj ptr 4E2E 85BE 3431 STA OBJPTR 3432 ; 4E30 A908 3433 SETTAB LDA #8 set listing 4E32 8D8A04 3434 STA TAB1 tabs 4E35 A90C 3435 LDA #12 4E37 8D8B04 3436 STA TAB2 4E3A A914 3437 LDA #20 4E3C 8D8C04 3438 STA TAB3 3439 ; 4E3F AD8A04 3440 SETZTAB LDA TAB1 set z-page tabs 4E42 85B6 3441 STA ZTAB1 4E44 AD8B04 3442 LDA TAB2 4E47 85B7 3443 STA ZTAB2 4E49 60 3444 RTS 3445 ; 3446 ; Get string length and increment 'COX' past string 3447 ; 'IFS' is used by .IF 3448 ; 4E4A 2090B5 3449 GETSLEN JSR GTOKE 4E4D 297F 3450 IFS AND #$7F this is length 4E4F A8 3451 TAY save 4E50 18 3452 CLC adjust cox 4E51 6592 3453 ADC COX 4E53 8592 3454 STA COX 4E55 98 3455 TYA ret: A =length 4E56 60 3456 RTS 3457 ; 3458 .INCLUDE #D:MAIN12 3459 .PAGE "CONVERT KEYWORD TOKENS" PAGE 79 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow MAIN CONVERT KEYWORD TOKENS D:MAIN12 3460 ; 3461 ; Put in buffer Table Entries 3462 ; A= Table Token Index 3463 ; 4E57 A0A1 3464 LOOKUP LDY # >FUNCTION 4E59 A27F 3465 LDX # QUITDDT 4EF3 4C3BBF 3573 JMP DDTX1 3574 ; 3575 * ************* 3576 * QUIT 3577 * 4EF6 A904 3578 QUITDDT LDA #4 ;CLEAR ALL BKPS 4EF8 48 3579 :QCLR PHA 4EF9 200AA5 3580 JSR CLBRK 4EFC 68 3581 PLA 4EFD 38 3582 SEC 4EFE E901 3583 SBC #1 4F00 10F6 3584 BPL :QCLR 4F02 2061A5 3585 JSR USERSC 4F05 78 3586 SEI 4F06 AD0B04 3587 LDA VKEYSV 4F09 8D0802 3588 STA VKEYBD 4F0C AD0C04 3589 LDA VKEYSV+1 4F0F 8D0902 3590 STA VKEYBD+1 4F12 58 3591 CLI 3592 ; 4F13 A060 3593 LDY #$80-[RUNSTK-XCII] this # should be + 4F15 B180 3594 :ZLOD0 LDA (LOMEM),Y 4F17 992004 3595 STA XCII-[$80-[RUNSTK-XCII]],Y 4F1A C8 3596 INY 4F1B 10F8 3597 BPL :ZLOD0 3598 ; LDY #$80 4F1D B180 3599 :ZLOAD LDA (LOMEM),Y 4F1F 990000 3600 STA 0,Y 4F22 C8 3601 INY PAGE 82 MAC XL DDT SECTION *** Jim Dunion *** DDT MAIN FLASH & MAC DDT ENTRY D2:DDTMAIN0 4F23 D0F8 3602 BNE :ZLOAD 4F25 200EB0 3603 JSR CARTRTN some init 4F28 4C44B0 3604 JMP WARM go to MAC warm 3605 ; 3606 .PAGE PAGE 83 MAC XL DDT SECTION *** Jim Dunion *** DDT MAIN FLASH & MAC DDT ENTRY D2:DDTMAIN0 3607 * **************** 3608 * SUBROUTINE DDT (BRK entry) 4F2B 8D03D5 3609 DDTX STA BANK3 4F2E 68 3610 PLA ;RESTORE ACC 4F2F 28 3611 PLP ;AND P REG 4F30 2087A4 3612 JSR SAVE 4F33 68 3613 PLA 4F34 E902 3614 SBC #2 ;CORRECT FOR BRK QUIRK 4F36 858A 3615 DDTX1A STA PCSAV 4F38 68 3616 PLA 4F39 E900 3617 SBC #0 4F3B 858B 3618 DDTX1 STA PCSAV+1 4F3D BA 3619 TSX 4F3E 8688 3620 STX SPSAV 4F40 58 3621 CLI ;CLEAR INTERRUPT DISABLE 3622 * 4F41 A900 3623 LDA #0 4F43 8591 3624 STA DSCNFL ;SET FLAG TO DBUG SCREEN OFF 4F45 8582 3625 STA WINDF 4F47 8D1004 3626 STA SSFLG ;CLEAR SS AUTO FLAG 4F4A 200AA5 3627 JSR CLBRK ;CLEAR BREAKPOINT 0 4F4D 2058A5 3628 JSR PCSEXA ;SET UP WINDOW INDEX 4F50 2065A5 3629 JSR SCTOG ;TURN ON DBUG SCREEN 4F53 8D03D5 3630 STA BANK3 4F56 4C73A3 3631 JMP DBND5 3632 ; 4F59 42524144 3633 MNCTAB .BYTE "BRADEAINAPHXPHY" 4F5D 4541494E 4F61 41504858 4F65 504859 4F68 504C5850 3634 .BYTE "PLXPLYSTZSTZTRB" 4F6C 4C595354 4F70 5A53545A 4F74 545242 4F77 54534241 3635 .BYTE "TSBADCANDBITCMP" 4F7B 4443414E 4F7F 44424954 4F83 434D50 4F86 454F524A 3636 .BYTE "EORJMPLDAORASBC" 4F8A 4D504C44 4F8E 414F5241 4F92 534243 4F95 535441 3637 .BYTE "STA" 3638 ; 4F98 3639 GMNETAB 4F98 AD0BD4 3640 LDA VCOUNT so display doesn't jump 4F9B CD0BD4 3641 :GGM CMP VCOUNT tight timing!!! 4F9E F0FB 3642 BEQ :GGM not yet ready 3643 ; need 21 machine cycles 4FA0 48 3644 PHA 4FA1 68 3645 PLA 4FA2 48 3646 PHA 4FA3 68 3647 PLA 4FA4 48 3648 PHA 4FA5 68 3649 PLA 4FA6 8D00D5 3650 :GMN STA BANK1 get chars quickly 4FA9 BDC2A0 3651 LDA MNETAB+2,X 4FAC 48 3652 PHA 4FAD BDC1A0 3653 LDA MNETAB+1,X 4FB0 48 3654 PHA 4FB1 BDC0A0 3655 LDA MNETAB,X 4FB4 8D03D5 3656 STA BANK3 4FB7 20C1BF 3657 JSR SHLET show 1st 4FBA 68 3658 PLA 4FBB 20C1BF 3659 JSR SHLET show 2nd 4FBE 68 3660 PLA 4FBF 297F 3661 AND #$7F 3662 ; fall thru & return 4FC1 200FA8 3663 SHLET JSR INTREP get screen code 4FC4 0D0A04 3664 ORA BRKOR 4FC7 918D 3665 STA (DINDIR),Y 4FC9 C8 3666 INY PAGE 84 MAC XL DDT SECTION *** Jim Dunion *** DDT MAIN FLASH & MAC DDT ENTRY D2:DDTMAIN0 4FCA 60 3667 RTS 3668 ; moved from DDTBANK8 4FCB 3F162B3E 3669 REGTB .BYTE 63,22,43,62,10 4FCF 0A 3670 .ENDIF 3671 ; 3672 .INCLUDE #D:SWITCH 3673 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow SWITCH" 3674 .PAGE "SWITCHING VECTORS" PAGE 85 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow SWITCH SWITCHING VECTORS D:SWITCH 3675 ; 3676 ; Call LISTERR 3677 ; 4FD0 ADFFAF 3678 LISTERR LDA ROMF+$0FFF get bank # 4FD3 48 3679 PHA & save 4FD4 8D00D5 3680 STA BANK1 get list bank 4FD7 20A9AB 3681 JSR _LISTERR do it 4FDA 68 3682 __PRTJ PLA 4FDB AA 3683 TAX 4FDC 9D00D5 3684 STA BANK1,X 4FDF 60 3685 RTS 3686 ; 3687 ; Call ASM 3688 ; 4FE0 8D04D5 3689 ASMX STA BANK2 4FE3 4C96A2 3690 JMP _ASMX 3691 ; 3692 ; Editor get numbers 3693 ; 4FE6 8D04D5 3694 _GETNE STA BANK2 4FE9 2091AC 3695 JSR GETNE 4FEC 4CF5BF 3696 JMP :_J 3697 ; 4FEF 8D04D5 3698 _GETN STA BANK2 4FF2 2089AC 3699 JSR GETN 4FF5 8D00D5 3700 :_J STA BANK1 4FF8 60 3701 RTS 3702 ; 3703 .PAGE "CARTRIDGE VECTORS" PAGE 86 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow SWITCH CARTRIDGE VECTORS =0000 3704 .IF *>[ROM+$0FFA] 3705 .ERROR "MAIN OVERLAP" 3706 .ENDIF 3707 @ =BFF9 M3710 :BR0 .= *+%1 żERROR - 32,BAD PARAMETER 4FF9 3711 .ORG ROM+$0FFA 4FFA 19B0 3712 .WORD CART 4FFC 00 3713 .BYTE 0 4FFD 05 3714 .BYTE $01!$04 boot DOS/run cartridge 4FFE 03B0 3715 .WORD CARTI 3716 ; 3717 BANK BANK1 =0001 3724 .IF EPROM =B000 3725 .SET 6,-[$A000-[@@BASE+$2000]] 3726 .ENDIF 3727 .INCLUDE #D:COPY 3728 .PAGE " " PAGE 87 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow SWITCH D:COPY 3729 .SET 0,4 5000 7D4D4143 3730 MES .BYTE $7D,"MAC/65 ",TAB 5004 2F363520 5008 207F 500A 56657273 3731 .CBYTE "Version 3.6 " 500E 696F6E20 5012 332E36A0 5016 28632920 3732 MES1 .BYTE "(c) 1988 Stephen D. Lawrow" 501A 31393838 501E 20537465 5022 7068656E 5026 20442E20 502A 4C617772 502E 6F77 5030 2030312F 3733 .CBYTE " 01/07/88",TAB 5034 30372F38 5038 B87F 3734 ; 3735 ; Backed up 12/21/87 on BKKZ1 3736 ; Listed / / 3737 ; 3738 .INCLUDE #D:BANKA0 3739 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA" 3740 .PAGE "STATEMENT TABLES" PAGE 88 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA STATEMENT TABLES D:BANKA0 3741 ; 3742 ; Line Statement Tables 3743 ; 503A 3744 STATEMENT =0000 3745 ?C .= 0 3746 ; 503A 9B 3747 .BYTE EOL!$80 =0000 3748 @SEOL = ?C =0001 3749 ?C .= ?C+1 3750 ; 503B 2E49C6 3751 .CBYTE ".IF" =0001 3752 @IF = ?C =0002 3753 ?C .= ?C+1 3754 ; 503E 2E454C53 3755 .CBYTE ".ELSE" 5042 C5 =0002 3756 @ELSE = ?C =0003 3757 ?C .= ?C+1 3758 ; 5043 2E454E44 3759 .CBYTE ".ENDIF" 5047 49C6 =0003 3760 @ENDIF = ?C =0004 3761 ?C .= ?C+1 3762 ; 5049 2E4D4143 3763 .CBYTE ".MACRO" 504D 52CF =0004 3764 @MACRO = ?C =0005 3765 ?C .= ?C+1 3766 ; 504F 2E454E44 3767 .CBYTE ".ENDM" 5053 CD =0005 3768 @ENDM = ?C =0006 3769 ?C .= ?C+1 3770 ; 5054 2E544954 3771 .CBYTE ".TITLE" 5058 4CC5 =0006 3772 @TITLE = ?C =0007 3773 ?C .= ?C+1 3774 ; 505A A0 3775 .CBYTE " " =0007 3776 @MACROX = ?C =0008 3777 ?C .= ?C+1 3778 ; 505B 2E504147 3779 .CBYTE ".PAGE" 505F C5 =0008 3780 @PAGE = ?C =0009 3781 ?C .= ?C+1 3782 ; 5060 2E574F52 3783 .CBYTE ".WORD" 5064 C4 =0009 3784 @WORD = ?C =000A 3785 ?C .= ?C+1 3786 ; 5065 2E455252 3787 .CBYTE ".ERROR" 5069 4FD2 =000A 3788 @ERROR = ?C =000B 3789 ?C .= ?C+1 3790 ; 506B 2E425954 3791 .CBYTE ".BYTE" 506F C5 =000B 3792 @BYTE = ?C =000C 3793 ?C .= ?C+1 3794 ; 5070 2E534259 3795 .CBYTE ".SBYTE" 5074 54C5 =000C 3796 @SBYTE = ?C =000D 3797 ?C .= ?C+1 3798 ; 5076 2E444259 3799 .CBYTE ".DBYTE" 507A 54C5 =000D 3800 @DBYTE = ?C =000E 3801 ?C .= ?C+1 PAGE 89 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA STATEMENT TABLES D:BANKA0 3802 ; 507C 2E454EC4 3803 .CBYTE ".END" =000E 3804 @END = ?C =000F 3805 ?C .= ?C+1 3806 ; 5080 2E4F50D4 3807 .CBYTE ".OPT" =000F 3808 @OPT = ?C =0010 3809 ?C .= ?C+1 3810 ; 5084 2E5441C2 3811 .CBYTE ".TAB" =0010 3812 @TAB = ?C =0011 3813 ?C .= ?C+1 3814 ; 5088 2E494E43 3815 .CBYTE ".INCLUDE" 508C 4C5544C5 =0011 3816 @INCLUDE = ?C =0012 3817 ?C .= ?C+1 3818 ; 5090 2E44D3 3819 .CBYTE ".DS" =0013 3820 ?C .= ?C+1 3821 ; 5093 2E4F52C7 3822 .CBYTE ".ORG" =0014 3823 ?C .= ?C+1 3824 ; 5097 2E4551D5 3825 .CBYTE ".EQU" =0015 3826 ?C .= ?C+1 3827 ; Some 65C02 instrs 509B 4252C1 3828 .CBYTE "BRA" Branch always =0016 3829 ?C .= ?C+1 3830 ; 509E 5452C2 3831 .CBYTE "TRB" =0016 3832 @TRB = ?C =0017 3833 ?C .= ?C+1 50A1 5453C2 3834 .CBYTE "TSB" =0018 3835 ?C .= ?C+1 3836 ; 50A4 2E464C4F 3837 .CBYTE ".FLOAT" 50A8 41D4 =0019 3838 ?C .= ?C+1 3839 ; 50AA 2E434259 3840 .CBYTE ".CBYTE" 50AE 54C5 =001A 3841 ?C .= ?C+1 3842 ; 50B0 BB 3843 .CBYTE ";" =001B 3844 ?C .= ?C+1 3845 ; 50B1 2E4C4F43 3846 .CBYTE ".LOCAL" 50B5 41CC =001C 3847 ?C .= ?C+1 3848 ; 50B7 2E5345D4 3849 .CBYTE ".SET" =001C 3850 @SET = ?C =001D 3851 ?C .= ?C+1 3852 ; 50BB 2ABD 3853 .CBYTE "*=" =001D 3854 @ASTEQ = ?C =001E 3855 ?C .= ?C+1 3856 ; 50BD BD 3857 .CBYTE "=" =001E 3858 @EQU = ?C =001F 3859 ?C .= ?C+1 3860 ; 50BE 2EBD 3861 .CBYTE ".=" =001F 3862 @.EQU = ?C =0020 3863 ?C .= ?C+1 50C0 3864 MNETAB ; for Dunion 50C0 4A53D24A 3865 .CBYTE "JSR","JMP","DEC","INC" 50C4 4DD04445 50C8 C3494EC3 =0020 3866 @JSR = ?C =0021 3867 @JMP = ?C+1 PAGE 90 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA STATEMENT TABLES D:BANKA0 =0022 3868 @DEC = ?C+2 =0023 3869 @INC = ?C+3 =0024 3870 ?C .= ?C+4 50CC 4C44D84C 3871 .CBYTE "LDX","LDY","STX","STY","CPX","CPY","BIT" 50D0 44D95354 50D4 D85354D9 50D8 4350D843 50DC 50D94249 50E0 D4 =0024 3872 @LDX = ?C =0025 3873 @LDY = ?C+1 =0026 3874 @STX = ?C+2 =0027 3875 @STY = ?C+3 =0028 3876 @CPX = ?C+4 =0029 3877 @CPY = ?C+5 =002A 3878 @BIT = ?C+6 =002B 3879 ?C .= ?C+7 50E1 4252CB43 3880 .CBYTE "BRK","CLC","CLD","CLI","CLV","DEX","DEY" 50E5 4CC3434C 50E9 C4434CC9 50ED 434CD644 50F1 45D84445 50F5 D9 =002B 3881 @BRK = ?C =002C 3882 @CLC = ?C+1 =002D 3883 @CLD = ?C+2 =002E 3884 @CLI = ?C+3 =002F 3885 @CLV = ?C+4 =0030 3886 @DEX = ?C+5 =0031 3887 @DEY = ?C+6 =0032 3888 @INX = ?C+7 =0033 3889 @INY = ?C+8 =0034 3890 @NOP = ?C+9 =0035 3891 @PHA = ?C+10 =0036 3892 @PHP = ?C+11 =0037 3893 @PLA = ?C+12 =0038 3894 @PLP = ?C+13 =0039 3895 @RTI = ?C+14 =003A 3896 @RTS = ?C+15 =003B 3897 @SEC = ?C+16 =003C 3898 @SED = ?C+17 =003D 3899 @SEI = ?C+18 =003E 3900 @TAX = ?C+19 =003F 3901 @TAY = ?C+20 =0040 3902 @TSX = ?C+21 =0041 3903 @TXA = ?C+22 =0042 3904 @TXS = ?C+23 =0043 3905 @TYA = ?C+24 =0044 3906 ?C .= ?C+25 50F6 494ED849 3907 .CBYTE "INX","INY","NOP","PHA","PHP","PLA","PLP" 50FA 4ED94E4F 50FE D05048C1 5102 5048D050 5106 4CC1504C 510A D0 510B 5254C952 3908 .CBYTE "RTI","RTS","SEC","SED","SEI","TAX","TAY" 510F 54D35345 5113 C35345C4 5117 5345C954 511B 41D85441 511F D9 5120 5453D854 3909 .CBYTE "TSX","TXA","TXS","TYA","BCC","BCS","BEQ" 5124 58C15458 5128 D35459C1 512C 4243C342 5130 43D34245 5134 D1 =0044 3910 @BCC = ?C =0045 3911 @BCS = ?C+1 =0046 3912 @BEQ = ?C+2 =0047 3913 @BMI = ?C+3 =0048 3914 @BNE = ?C+4 PAGE 91 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA STATEMENT TABLES D:BANKA0 =0049 3915 @BPL = ?C+5 =004A 3916 @BVC = ?C+6 =004B 3917 @BVS = ?C+7 =004C 3918 ?C .= ?C+8 =004C 3919 @ORA = ?C =004D 3920 @IAND = ?C+1 =004E 3921 @EOR = ?C+2 =004F 3922 @ADC = ?C+3 =0050 3923 @STA = ?C+4 =0051 3924 @LDA = ?C+5 =0052 3925 @CMP = ?C+6 =0053 3926 @SBC = ?C+7 =0054 3927 ?C .= ?C+8 =0054 3928 @ASL = ?C =0055 3929 @ROL = ?C+1 =0056 3930 @LSR = ?C+2 =0057 3931 @ROR = ?C+3 5135 424DC942 3932 .CBYTE "BMI","BNE","BPL","BVC","BVS" 5139 4EC54250 513D CC4256C3 5141 4256D3 5144 4F52C141 3933 .CBYTE "ORA","AND","EOR","ADC","STA","LDA","CMP" 5148 4EC4454F 514C D24144C3 5150 5354C14C 5154 44C1434D 5158 D0 5159 5342C341 3934 .CBYTE "SBC","ASL","ROL","LSR","ROR" 515D 53CC524F 5161 CC4C53D2 5165 524FD2 =0058 3935 ?C .= ?C+4 5168 80 3936 .BYTE $80 =0058 3937 @SCOMMENT = ?C statement comment =0059 3938 ?C .= ?C+1 3939 ; 3940 ; Rockwell Instrs 3941 ; =0059 3942 @ROCKWELL = ?C 3943 ; 5169 5354DA 3944 .CBYTE "STZ" =005A 3945 ?C .= ?C+1 3946 ; 516C 4445C149 3947 .CBYTE "DEA","INA" 5170 4EC1 =005A 3948 @RIMPL .= ?C =005C 3949 ?C .= ?C+2 5172 5048D850 3950 .CBYTE "PHX","PHY" 5176 48D9 =005E 3951 ?C .= ?C+2 5178 504CD850 3952 .CBYTE "PLX","PLY",0 517C 4CD900 =0060 3953 ?C .= ?C+2 3954 ; 3955 .PAGE "FUNCTION TABLE" PAGE 92 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA FUNCTION TABLE D:BANKA0 3956 ; 3957 ; Function Table 3958 ; order in table is relevent! 3959 ; 517F 3960 FUNCTION 3961 ; =000A 3962 ?C .= CH+2&$FE insure even num 517F A7 3963 .CBYTE "'" ascii literal =000A 3964 @APOST = ?C start of values 3965 ; =000B 3966 ?C .= ?C+1 5180 25A4 3967 .CBYTE "%$" macro string =000B 3968 @MSTR = ?C 3969 ; =000C 3970 ?C .= ?C+1 5182 A5 3971 .CBYTE "%" macro parameter =000C 3972 @PERCENT = ?C 3973 ; =000D 3974 ?C .= ?C+1 5183 AA 3975 .CBYTE "*" current asm pc =000D 3976 @CPC = ?C 3977 ; =000F 3978 ?C .= ?C+2 5184 A0A0 3979 .CBYTE " "," " filler 3980 ; =0010 3981 ?C .= ?C+1 5186 E1 3982 .CBYTE "a" =0010 3983 S.A = ?C =0011 3984 ?C .= ?C+1 5187 F1 3985 .CBYTE "q" =0011 3986 S.Q = ?C 3987 ; 3988 ; =0012 3989 VALUEND = ?C+1 end values 3990 ; =0012 3991 ?C .= ?C+1 start operators 5188 AB 3992 .CBYTE "+" addition =0012 3993 @PLUS = ?C 3994 ; =0013 3995 ?C .= ?C+1 5189 AD 3996 .CBYTE "-" subtraction =0013 3997 @MINUS = ?C 3998 ; =0014 3999 ?C .= ?C+1 518A AA 4000 .CBYTE "*" mutliplication =0014 4001 @TIMES = ?C 4002 ; =0015 4003 ?C .= ?C+1 518B AF 4004 .CBYTE "/" division =0015 4005 @DIV = ?C 4006 ; =0016 4007 ?C .= ?C+1 518C A6 4008 .CBYTE "&" logical and =0016 4009 @AND = ?C 4010 ; =0017 4011 ?C .= ?C+1 518D 2E4445C6 4012 .CBYTE ".DEF" unary lab def =0017 4013 @DEF = ?C =0017 4014 @ELP = ?C operator "(" 4015 ; =0018 4016 ?C .= ?C+1 5191 BD 4017 .CBYTE "=" comparison =0018 4018 @CEQU = ?C 4019 ; =0019 4020 ?C .= ?C+1 5192 3CBD 4021 .CBYTE "<=" less or equal =0019 4022 @LEQU = ?C 4023 ; =001A 4024 ?C .= ?C+1 5194 3EBD 4025 .CBYTE ">=" greater or equal =001A 4026 @GEQU = ?C 4027 ; PAGE 93 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA FUNCTION TABLE D:BANKA0 =001B 4028 ?C .= ?C+1 5196 3CBE 4029 .CBYTE "<>" not equal =001B 4030 @NEQU = ?C 4031 ; =001C 4032 ?C .= ?C+1 5198 BE 4033 .CBYTE ">" less than =001C 4034 @LESS = ?C 4035 ; =001D 4036 ?C .= ?C+1 5199 BC 4037 .CBYTE "<" greater than and =001D 4038 @GRT = ?C save/change adress 4039 ; =001E 4040 ?C .= ?C+1 519A AD 4041 .CBYTE "-" unary minus =001E 4042 @UMIN = ?C 4043 ; =001F 4044 ?C .= ?C+1 519B DB 4045 .CBYTE "[" oper left para =001F 4046 @OLP = ?C 4047 ; =0020 4048 ?C .= ?C+1 519C DD 4049 .CBYTE "]" oper right para =0020 4050 @ORP = ?C 4051 ; =0021 4052 ?C .= ?C+1 519D 2E4FD2 4053 .CBYTE ".OR" basic-like OR =0021 4054 @BOR = ?C 4055 ; =0022 4056 ?C .= ?C+1 51A0 2E414EC4 4057 .CBYTE ".AND" basic-like AND =0022 4058 @BAND = ?C 4059 ; =0023 4060 ?C .= ?C+1 51A4 2E4E4FD4 4061 .CBYTE ".NOT" basic-like NOT =0023 4062 @NOT = ?C 4063 ; =0024 4064 ?C .= ?C+1 51A8 A1 4065 .CBYTE "!" logical or =0024 4066 @OR = ?C 4067 ; =0025 4068 ?C .= ?C+1 51A9 DE 4069 .CBYTE "^" logical eor =0025 4070 @XOR = ?C 4071 ; =0026 4072 ?C .= ?C+1 51AA 2E5245C6 4073 .CBYTE ".REF" label reference =0026 4074 @REF = ?C 4075 ; =0027 4076 ?C .= ?C+1 51AE DC 4077 .CBYTE "\" modulo =0027 4078 @MOD = ?C 4079 ; =002E 4080 ?C .= ?C+7 fillers 51AF 8080 4081 .DBYTE $8080,$8080 51B1 8080 4082 ; 4083 ; Inbedded tables (save 3 bytes) 4084 ; 51B3 456469F4 4085 EDIT .CBYTE "Edit" 51B7 57686174 4086 WH .CBYTE "What!" 51BB A1 51BC 54657874 4087 TXTMD .CBYTE "Text:" 51C0 BA 4088 ; =002F 4089 ?C .= ?C+1 51C1 2E524546 4090 .CBYTE ".REF " label ref list 51C5 A0 =002F 4091 @REFL = ?C 4092 ; =0030 4093 ?C .= ?C+1 51C6 2E444546 4094 .CBYTE ".DEF " define list 51CA A0 PAGE 94 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA FUNCTION TABLE D:BANKA0 =0030 4095 @DEFL = ?C 4096 ; =0031 4097 ?C .= ?C+1 51CB 2E4E4F54 4098 .CBYTE ".NOT " not list 51CF A0 =0031 4099 @NOTL = ?C 4100 ; =0032 4101 ?C .= ?C+1 51D0 202E414E 4102 .CBYTE " .AND " and list 51D4 44A0 =0032 4103 @BANDL = ?C 4104 ; =0033 4105 ?C .= ?C+1 51D6 202E4F52 4106 .CBYTE " .OR " or list 51DA A0 =0033 4107 @BORL = ?C 4108 ; =0034 4109 ?C .= ?C+1 51DB 20BC 4110 .CBYTE " <" low byte =0034 4111 @LOW = ?C 4112 ; =0035 4113 ?C .= ?C+1 51DD 20BE 4114 .CBYTE " >" high byte =0035 4115 @HIGH = ?C 4116 ; 4117 ; Begin Terimators 4118 ; =0036 4119 ?C .= ?C+1 51DF 2C58A9 4120 .CBYTE ",X)" indirect ,X =0036 4121 @PCMAX = ?C 4122 ; =0037 4123 ?C .= ?C+1 51E2 292CD9 4124 .CBYTE "),Y" indirect ,Y =0037 4125 @PCMAY = ?C 4126 ; =0038 4127 ?C .= ?C+1 51E5 2CD9 4128 .CBYTE ",Y" indexed ,Y =0038 4129 @CMAY = ?C 4130 ; =0039 4131 ?C .= ?C+1 51E7 2CD8 4132 .CBYTE ",X" indexed ,X =0039 4133 @CMAX = ?C 4134 ; =003A 4135 ?C .= ?C+1 51E9 A9 4136 .CBYTE ")" indirect abs =003A 4137 @RP = ?C 4138 ; =003B 4139 ?C .= ?C+1 51EA AC 4140 .CBYTE "," comma syntax =003B 4141 @LCMA = ?C editor comma =003B 4142 @COMMENT = ?C comment line 4143 ; =003C 4144 ?C .= ?C+1 51EB 9B 4145 .BYTE EOL!$80 end of line =003C 4146 @EOL = ?C 4147 ; =003D 4148 ?C .= ?C+1 51EC AC 4149 .CBYTE "," comma list =003D 4150 @CMA = ?C 4151 ; 4152 ; Misc functions 4153 ; =003E 4154 ?C .= ?C+1 51ED A3 4155 .CBYTE "#" imm/dev follows =003E 4156 @PND = ?C 4157 ; =003F 4158 ?C .= ?C+1 51EE C1 4159 .CBYTE "A" accumulator adressing =003F 4160 @A = ?C 4161 ; =0040 4162 ?C .= ?C+1 51EF A8 4163 .CBYTE "(" left para PAGE 95 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA FUNCTION TABLE D:BANKA0 =0040 4164 @LP = ?C 4165 ; =0041 4166 ?C .= ?C+1 51F0 A2 4167 .BYTE '"!$80 text string =0041 4168 @QU = ?C 4169 ; =0042 4170 ?C .= ?C+1 51F1 A4 4171 .CBYTE "$" hex follows =0042 4172 @DOLL = ?C 4173 ; =0043 4174 ?C .= ?C+1 51F2 D1 4175 .CBYTE "Q" rep querry =0043 4176 @Q = ?C 4177 ; =0044 4178 ?C .= ?C+1 51F3 4ECF 4179 .CBYTE "NO" option off =0044 4180 @LNO = ?C 4181 ; =0045 4182 ?C .= ?C+1 51F5 4E4FA0 4183 .CBYTE "NO " list no =0045 4184 @NO = ?C 4185 ; =0046 4186 ?C .= ?C+1 51F8 4F42CA 4187 .CBYTE "OBJ" object =0046 4188 @OBJ = ?C 4189 ; =0047 4190 ?C .= ?C+1 51FB 4552D2 4191 .CBYTE "ERR" error =0047 4192 @ERR = ?C 4193 ; =0048 4194 ?C .= ?C+1 51FE 454A4543 4195 .CBYTE "EJECT" page eject 5202 D4 =0048 4196 @EJECT = ?C 4197 ; =0049 4198 ?C .= ?C+1 5203 4C4953D4 4199 .CBYTE "LIST" asm listing =0049 4200 @LIST = ?C 4201 ; =004A 4202 ?C .= ?C+1 5207 585245C6 4203 .CBYTE "XREF" X-Ref =004A 4204 @WAIT = ?C 4205 ; =004B 4206 ?C .= ?C+1 520B 4D4C4953 4207 .CBYTE "MLIST" macro list 520F D4 =004B 4208 @MLIST = ?C 4209 ; =004C 4210 ?C .= ?C+1 5210 434C4953 4211 .CBYTE "CLIST" conditional l. 5214 D4 =004C 4212 @CLIST = ?C 4213 ; =004D 4214 ?C .= ?C+1 5215 4E55CD 4215 .CBYTE "NUM" assembler auto-num =004D 4216 @NUM = ?C 4217 ; =004E 4218 ?C .= ?C+1 5218 CD 4219 .CBYTE "M" merge =004E 4220 @M = ?C 5219 00 4221 .BYTE 0 end of table 4222 ; 4223 .PAGE "DIRECTIVE SYNTAX ADRESS TABLE" PAGE 96 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA DIRECTIVE SYNTAX ADRESS TABLE D:BANKA0 4224 ; 4225 ; Statement Syntax Adress Table 4226 ; =A218 4227 LINETAB = *-2 521A 6FA8 4228 .WORD IFY-1 if 521C 5EA8 4229 .WORD ELSEY-1 else 521E 5EA8 4230 .WORD ELSEY-1 endif 5220 55A8 4231 .WORD MACROY-1 macro define 5222 5EA8 4232 .WORD ELSEY-1 endm 5224 A7A8 4233 .WORD PAGEY-1 title 5226 9CA8 4234 .WORD MACROXY-1 macro exec 5228 A7A8 4235 .WORD PAGEY-1 page 522A BCA8 4236 .WORD WORDY-1 word 522C A7A8 4237 .WORD PAGEY-1 error 522E B0A8 4238 .WORD BYTEY-1 byte 5230 B0A8 4239 .WORD BYTEY-1 sbyte 5232 BCA8 4240 .WORD WORDY-1 dbyte 5234 5BA8 4241 .WORD ENDLY-1 end 5236 74A8 4242 .WORD OPTY-1 opt 5238 3FA8 4243 .WORD TABY-1 tab 523A B1A9 4244 .WORD INCLUDY-1 include 523C 50A8 4245 .WORD EQUY-1 ds 523E 50A8 4246 .WORD EQUY-1 org 5240 4DA8 4247 .WORD EQUY0-1 equ 5242 50A8 4248 .WORD EQUY-1 bra 4249 ; TRB & TSB 5244 50A8 4250 .WORD EQUY-1,EQUY-1 5246 50A8 5248 31A8 4251 .WORD FLOATY-1 float 524A B0A8 4252 .WORD BYTEY-1 cbyte 524C 5BA8 4253 .WORD ENDLY-1 comment ; 524E 5BA8 4254 .WORD ENDLY-1 local 5250 45A8 4255 .WORD SETY-1 system set 5252 50A8 4256 .WORD EQUY-1 origin 5254 4DA8 4257 .WORD EQUY0-1 equate 5256 4DA8 4258 .WORD EQUY0-1 set equate 4259 ; 5258 DBA8 4260 .WORD JSRY-1 jsr instr 525A D4A8 4261 .WORD JMPY-1 jmp instr 525C 01A9 4262 .WORD INCY-1 dec instr 525E 01A9 4263 .WORD INCY-1 inc instr 5260 14A9 4264 .WORD LDXY-1 ldx instr 5262 04A9 4265 .WORD LDYY-1 ldy instr 5264 17A9 4266 .WORD STXY-1 stx instr 5266 01A9 4267 .WORD INCY-1 sty instr 5268 DEA8 4268 .WORD CPXY-1 cpx instr 526A DEA8 4269 .WORD CPXY-1 cpy instr 526C 01A9 4270 .WORD BITY-1 bit instr 526E E2A8 4271 .WORD BRKY-1 type implied 5270 DFA8 4272 .WORD BCCY-1 type branch 5272 0DA9 4273 .WORD ORAY-1 type multi 5274 07A9 4274 .WORD ASLY-1 type accumulator 4275 ; 4276 .PAGE "EDITOR COMMANDS" PAGE 97 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR COMMANDS D:BANKA0 4277 ; 4278 ; Command Statement Table 4279 ; and syntax table adress 4280 ; =A276 4281 COMMAND = * 5276 94 4282 .BYTE WH 532E 20AEB7 4408 JSR PTSE 5331 4C4AB0 4409 JMP PRMPT go re-prompt 4410 ; * Sound! 5334 8A 4411 SD1 TXA sound off X=0 5335 8D00D2 4412 SD STA POKEY channel 1 5338 8E01D2 4413 STX POKEY+1 533B 60 4414 RTS 4415 ; 4416 ; Execute Editor Command 4417 ; Note: "SIZEX" assumes X=0 4418 ; 533C 0A 4419 EXEC ASL A 533D A8 4420 TAY get index to table 533E B9E1A2 4421 LDA EXTABL+1,Y get adr 5341 48 4422 PHA and stack 5342 B9E0A2 4423 LDA EXTABL,Y 5345 48 4424 PHA 5346 A592 4425 LDA COX save for REP 5348 85B0 4426 STA CMDLG 534A A200 4427 LDX #0 reset output index 534C 8692 4428 STX COX leaving X=0 534E 60 4429 RTS go to it 4430 ; 4431 ; Editor Text mode 4432 ; 534F A9FF 4433 TEXTX LDA #$FF 5351 4CD3B0 4434 JMP NEWTXT 4435 ; 4436 ; Cartridge init stuff 4437 ; 5354 A205 4438 DFLT LDX #5 5356 BD60A3 4439 :DFLT LDA :DFLTS,X colors & alpha limits 5359 9D8204 4440 STA HCNTRLC,X 535C CA 4441 DEX 535D 10F7 4442 BPL :DFLT 535F 60 4443 RTS 4444 ; 5360 03CA94 4445 :DFLTS .BYTE CNTRLC,$CA,$94 5363 405B60 4446 .BYTE '@,'Z+1,'_+1 4447 ; 4448 .INCLUDE #D:BANKA2 4449 .PAGE "EXECUTE SYNTAX" PAGE 101 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXECUTE SYNTAX D:BANKA2 4450 ; 5366 8698 4451 STC STX SAXPC+1 init to 5368 8E0305 4452 STX SPC+1 first level 536B 8597 4453 STA SAXPC 536D 8D0205 4454 STA SPC 5370 A592 4455 LDA COX 5372 8D0105 4456 STA SOX 5375 A5F2 4457 LDA CIX 5377 8D0005 4458 STA SIX 537A A000 4459 LDY #0 clr: 537C 84B0 4460 STY CURTOKE current token 537E 84AD 4461 STY CONDPTR cond text index 5380 84AE 4462 STY ACTPTR current text index 5382 849E 4463 STY STKLVL set at first level 4464 ; 5384 2041A4 4465 SLOOP JSR GETOP 5387 3031 4466 BMI SBRA syntax branch 5389 C901 4467 CMP #1 absolute? 538B 903F 4468 BCC SABS yes, abs internal 538D D008 4469 BNE CKSNG go check 4470 ; 538F 20CCA3 4471 JSR SABS go abs external =A392 4472 :BR0 .= * used 1 5392 90F0 4473 BCC SLOOP sucessful test 5394 4C19A4 4474 JMP STERM look for term 4475 ; 5397 C905 4476 CKSNG CMP #5 5399 9068 4477 BCC SRET go ret 539B F006 4478 BEQ POP go pop stack 4479 ; 539D 2062A4 4480 JSR STEST go test 53A0 4C92A3 4481 JMP :BR0 handle cases... 4482 ; 53A3 A59E 4483 POP LDA STKLVL don't pop below 53A5 F0DD 4484 BEQ SLOOP first level 53A7 E904 4485 SBC #4 cs, next lower level 53A9 AA 4486 TAX 53AA BD0505 4487 LDA SOX+4,X copy input & 53AD 9D0105 4488 STA SOX,X output indices to 53B0 BD0405 4489 LDA SIX+4,X this level 53B3 9D0005 4490 STA SIX,X 53B6 869E 4491 STX STKLVL 53B8 B0CA 4492 BCS SLOOP unc, get nxt 4493 .PAGE PAGE 102 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXECUTE SYNTAX D:BANKA2 4494 ; 53BA 38 4495 SBRA SEC compute new 53BB A200 4496 LDX #0 table addr 53BD E9C1 4497 SBC #@+1 53BF B001 4498 BCS :2 a back branch 53C1 CA 4499 DEX set X= -1 53C2 18 4500 :2 CLC 53C3 6597 4501 ADC SAXPC form new PC addr 53C5 48 4502 PHA save 53C6 8A 4503 TXA 53C7 6598 4504 ADC SAXPC+1 53C9 48 4505 PHA save 53CA D010 4506 BNE SPUSH unc, stack current 4507 ; 53CC 2041A4 4508 SABS JSR GETOP get adress 53CF 48 4509 PHA 53D0 2041A4 4510 JSR GETOP 53D3 48 4511 PHA 53D4 9006 4512 BCC SPUSH br if internal 4513 ; RTS to routine =A3D6 4514 :BR1 .= * used 1 53D6 60 4515 RTS go absolute 4516 ; =A3D7 4517 :BR0 .= * used 1 53D7 A90F 4518 LDA #15 53D9 4C8DB4 4519 JMP FTER fatal err fix 53DC A69E 4520 SPUSH LDX STKLVL inc stack pointer 53DE E8 4521 INX 53DF E8 4522 INX 53E0 E8 4523 INX 53E1 E8 4524 INX 53E2 30F3 4525 BMI :BR0 stack overflow! 53E4 869E 4526 STX STKLVL 53E6 A5F2 4527 LDA CIX save current ptrs 53E8 9D0005 4528 STA SIX,X 53EB A592 4529 LDA COX 53ED 9D0105 4530 STA SOX,X 53F0 A597 4531 LDA SAXPC 53F2 9D0205 4532 STA SPC,X 53F5 A598 4533 LDA SAXPC+1 53F7 9D0305 4534 STA SPC+1,X 53FA 68 4535 PLA restore new addr 53FB 8598 4536 STA SAXPC+1 53FD 68 4537 PLA 53FE 8597 4538 STA SAXPC =A400 4539 :BR0 .= * used 1 5400 4C84A3 4540 JMP SLOOP continue... 4541 ; 5403 A69E 4542 SRET LDX STKLVL at first level? 5405 F0CF 4543 BEQ :BR1 all done, go RTS 4544 ; 5407 BD0205 4545 SRET1 LDA SPC,X restore old 540A 8597 4546 STA SAXPC table adress 540C BD0305 4547 LDA SPC+1,X 540F 8598 4548 STA SAXPC+1 5411 CA 4549 DEX pop stk ptr 5412 CA 4550 DEX 5413 CA 4551 DEX 5414 CA 4552 DEX 5415 869E 4553 STX STKLVL save it 5417 90E7 4554 BCC :BR0 good, cont 4555 ; else, handle fail 4556 .PAGE PAGE 103 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXECUTE SYNTAX D:BANKA2 4557 ; 4558 ; Syntax failed, look for an 4559 ; 'or' or a 'return' 4560 ; =A419 4561 :BR0 .= * used 3 5419 2041A4 4562 STERM JSR GETOP 541C 30FB 4563 BMI :BR0 skip branch 541E C902 4564 CMP #2 abs reference? 5420 F019 4565 BEQ V1 go 'or' 5422 B008 4566 BCS STWO 5424 2049A4 4567 JSR INCPT skip absolute 5427 2049A4 4568 JSR INCPT adress 542A D0ED 4569 BNE :BR0 unc 4570 ; 542C C903 4571 STWO CMP #3 return? 542E F0D3 4572 BEQ SRET yup 5430 C905 4573 CMP #4+1 an 'or-return'? 5432 B0E5 4574 BCS :BR0 no, keep skipping 4575 ; 5434 2050A4 4576 JSR RESTR restore last valid 5437 18 4577 CLC set sucess 5438 4C03A4 4578 JMP SRET and go return 4579 ; 543B 2050A4 4580 V1 JSR RESTR 543E 4C84A3 4581 JMP SLOOP continue... 4582 ; 4583 ; Routines Getop & Incpt 4584 ; 5441 2049A4 4585 GETOP JSR INCPT bump syntax PC 5444 A200 4586 LDX #0 5446 A197 4587 LDA (SAXPC,X) get code =A448 4588 :BR0 .= * used 1 5448 60 4589 RTS 4590 ; 5449 E697 4591 INCPT INC SAXPC 544B D0FB 4592 BNE :BR0 544D E698 4593 INC SAXPC+1 544F 60 4594 RTS 4595 ; 5450 A4F2 4596 RESTR LDY CIX 5452 20A5A6 4597 JSR VALID set valid text 5455 A69E 4598 LDX STKLVL restore indices 5457 BD0005 4599 LDA SIX,X 545A 85F2 4600 STA CIX 545C BD0105 4601 LDA SOX,X 545F 8592 4602 STA COX 5461 60 4603 RTS 4604 ; 4605 .PAGE "SYNTAX EXTERNALS" PAGE 104 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX EXTERNALS D:BANKA2 4606 ; 4607 ; Test for external assembly test, 4608 ; or internal token match 4609 ; 4610 ; 6 = Test for eol/comment 4611 ; Note: 6 is strict comment 4612 ; 6,6 is loose comment 4613 ; 7 = Test for hex # 4614 ; 8 = Test for dec # 4615 ; 9 = Special change token 4616 ; 5462 C90A 4617 STEST CMP #CH+1 internal tst? 5464 B028 4618 BCS TSTTOK yup 4619 ; 5466 A8 4620 TAY get table indx 5467 B96EA4 4621 LDA :EXH-6,Y get routine 546A 48 4622 PHA 546B B96AA4 4623 LDA :EXL-6,Y 546E 48 4624 PHA 546F 60 4625 RTS and go to it! 4626 ; 4627 ; External Assembly Test Table 4628 ; 5470 814E 4629 :EXL .BYTE S@@END-1, >S@@HEX-1 5476 A5A4 4633 .BYTE >S@@DEC-1, >S@@CH-1 4634 ; =A478 4635 :BR0 .= * used 1 5478 A908 4636 LDA #8 buff ovrflo 547A 4C8DB4 4637 JMP FTER fatal err fix 4638 ; 4639 ; Change token 4640 ; 547D C692 4641 S@CH DEC COX change level before 547F 2041A4 4642 S@@CH JSR GETOP get change token 5482 C692 4643 S@CH1 DEC COX pop output indx 5484 18 4644 S@CH2 CLC set sucess 4645 ; 5485 A492 4646 PTOKE LDY COX put in buff 5487 9180 4647 STA (EXBUF),Y 5489 E692 4648 INC COX 548B F0EB 4649 BEQ :BR0 overflow! 548D 60 4650 RTS 4651 ; 4652 .PAGE "SYNTAX INTERNALS" PAGE 105 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX INTERNALS D:BANKA2 4653 ; 4654 ; Test for internal token match 4655 ; 548E 20A1DB 4656 TSTTOK JSR SKPSPACE 5491 C4AE 4657 CPY ACTPTR 5493 F015 4658 BEQ :SKSCH don't search 5495 84AE 4659 STY ACTPTR actual text 5497 A9A1 4660 LDA # >FUNCTION 5499 A07F 4661 LDY # STATEMENT 54C3 A03A 4689 LDY # 4853 ; =0001 4854 .IF SSAVE 559B A501 4855 FSVF LDA SFLAG is there a file? 559D F0F7 4856 BEQ :BR0 no 559F A93E 4857 LDA #@PND get # sign token 55A1 2082A4 4858 JSR S@CH1 replace EOL with it 55A4 A492 4859 LDY COX get output index 55A6 A200 4860 LDX #0 =A5A8 4861 :BR0 .= * used 1 55A8 C8 4862 INY allow length byte 55A9 BD3401 4863 LDA SFILE,X 55AC 9180 4864 STA (EXBUF),Y 55AE E8 4865 INX 55AF C99B 4866 CMP #EOL hit return yet? 55B1 D0F5 4867 BNE :BR0 no... 4868 ; now, form length 55B3 8A 4869 TXA 55B4 0980 4870 ORA #$80 55B6 4C84A4 4871 JMP S@CH2 set len & ret 4872 .ENDIF 4873 ; 55B9 A900 4874 FFND LDA #$00 no null length & get from TPOBUF 55BB 85AF 4875 STA TEMP 55BD 20A1DB 4876 JSR SKPSPACE 55C0 B1F3 4877 LDA (INBUFF),Y get char 55C2 C99B 4878 CMP #EOL eol? 55C4 D035 4879 BNE :51 look for same 55C6 60 4880 RTS err, go RTS 4881 ; 55C7 A93C 4882 FSAV LDA #'< get test char 55C9 D005 4883 BNE :42 unc 4884 ; 55CB 20A1DB 4885 FSPC JSR SKPSPACE 55CE A92C 4886 LDA #', 55D0 A000 4887 :42 LDY #0 no null 55D2 84AF 4888 STY TEMP x 55D4 20F9A5 4889 JSR :GS go find it 55D7 B048 4890 BCS :58 go put str len 55D9 C6F2 4891 :57 DEC CIX point back to , 55DB 60 4892 RTS 4893 ; 55DC C6F2 4894 FREP DEC CIX point to last 55DE A9C0 4895 LDA #$C0 set for '" 55E0 A222 4896 LDX #'" was delimiter '"? 55E2 E4D1 4897 CPX SVF2 55E4 F002 4898 BEQ :FEP yes, get from TPOBUF 55E6 A940 4899 LDA #$40 55E8 85AF 4900 :FEP STA TEMP allow null 55EA 4CFDA5 4901 JMP :52 4902 ; 55ED A900 4903 FSTR LDA #0 dis-allow null 55EF 85AF 4904 STA TEMP x 55F1 A922 4905 LDA #'" double quotes 55F3 20F9A5 4906 JSR :GS find them 55F6 90E1 4907 BCC :57 sucess 55F8 60 4908 :41 RTS 4909 ; 55F9 C6F2 4910 :GS DEC CIX back up 1 before 55FB 85D1 4911 :51 STA SVF2 save delimiter 55FD AA 4912 :52 TAX save 55FE A592 4913 LDA COX save output indx PAGE 110 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXTERNAL STRING TESTS D:BANKA2 5600 85D0 4914 STA SVN2 x 5602 E692 4915 INC COX dummy for len 5604 E6F2 4916 :53 INC CIX get char 5606 A4F2 4917 LDY CIX 4918 ; 5608 24AF 4919 BIT TEMP where to get chars from 560A 1004 4920 BPL :50 560C B90006 4921 LDA TPOBUF,Y REP only 560F 2C 4922 .BYTE $2C 4923 ; 5610 B1F3 4924 :50 LDA (INBUFF),Y 5612 C99B 4925 CMP #EOL eol? 5614 F0E2 4926 BEQ :41 err, go RTS 5616 C5D1 4927 CMP SVF2 delimiter? 5618 F005 4928 BEQ :55 yup, compute len 561A 2085A4 4929 JSR PTOKE save str char 561D D0E5 4930 BNE :53 unc 4931 ; 561F E6F2 4932 :55 INC CIX index to nxt 5621 18 4933 :58 CLC get str len 5622 A592 4934 LDA COX 5624 E5D0 4935 SBC SVN2 5626 D004 4936 BNE :56 non-zero 5628 24AF 4937 BIT TEMP allow zero? 562A 5024 4938 BVC :CF no, error 562C A4D0 4939 :56 LDY SVN2 indx len in out 562E 0980 4940 ORA #$80 high bit on 5630 9180 4941 STA (EXBUF),Y str len +128 5632 18 4942 CLC sucess 5633 60 4943 RTS 4944 ; 4945 .PAGE "MISC EXTERNALS" PAGE 111 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA MISC EXTERNALS D:BANKA2 4946 ; 4947 ; External tst for ASCII char 4948 ; after single quote 4949 ; 5634 A4F2 4950 TSTASC LDY CIX buff indx 5636 B1F3 4951 LDA (INBUFF),Y get char 5638 C99B 4952 CMP #EOL if eol, error 563A F014 4953 BEQ :CF 563C 2085A4 4954 :TS2 JSR PTOKE else, save it 563F E6F2 4955 INC CIX point to nxt 5641 18 4956 :TS1 CLC sucess 5642 60 4957 RTS 4958 ; 4959 ; External for mandatory label 4960 ; 5643 A003 4961 MISS LDY #3 byte should 5645 B180 4962 LDA (EXBUF),Y be minus 5647 30F8 4963 BMI :TS1 if label is 5649 1005 4964 BPL :CF present 4965 ; 4966 ; External for mandatory no label 4967 ; 564B 2043A6 4968 MISS0 JSR MISS call tst lab & 564E B0F1 4969 BCS :TS1 reverse stat =A650 4970 BAD6 = * 5650 38 4971 :CF SEC =A651 4972 :BR0 .= * used 3 5651 60 4973 RTS 4974 ; 4975 ; External test for Single unary 4976 ; 5652 A492 4977 ONLY1 LDY COX 5654 88 4978 DEY get last token 5655 B180 4979 LDA (EXBUF),Y can be used 5657 C930 4980 CMP #@DEFL only once in an 5659 F0F6 4981 BEQ :BR0 expression 565B C934 4982 CMP #@LOW 565D F0F2 4983 BEQ :BR0 565F C935 4984 CMP #@HIGH 5661 F0EE 4985 BEQ :BR0 5663 18 4986 CLC 5664 60 4987 RTS 4988 ; 4989 ; Test for ASM comma 4990 ; 5665 20A1DB 4991 TCOMA JSR SKPSPACE 5668 8499 4992 STY SAXTX 566A B1F3 4993 LDA (INBUFF),Y 566C C92C 4994 CMP #', 566E D0E0 4995 BNE :CF err 5670 A93D 4996 LDA #@CMA put in buffer 5672 D0C8 4997 BNE :TS2 unc 4998 ; 4999 .PAGE "EXTERNAL TEST STATMENT END" PAGE 112 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXTERNAL TEST STATMENT END D:BANKA2 5674 202C2E5B 5000 ILLEGAL .BYTE " ,.[]+-*/\!&^",'" 5678 5D2B2D2A 567C 2F5C2126 5680 5E22 5001 ; 5682 A20D 5002 S@@END LDX #13 set strict count 5684 A001 5003 LDY #1 test for loose 5686 B197 5004 LDA (SAXPC),Y 5688 C906 5005 CMP #6 568A D005 5006 BNE ?K1 do strict comment 5007 ; 568C 2049A4 5008 JSR INCPT loose comment type 568F A200 5009 LDX #0 5691 20A1DB 5010 ?K1 JSR SKPSPACE 5694 B1F3 5011 LDA (INBUFF),Y =A696 5012 :BR0 .= * used 1 5696 DD74A6 5013 CMP ILLEGAL,X 5699 F00A 5014 BEQ VALID no good 569B CA 5015 DEX 569C 10F8 5016 BPL :BR0 again or legal 569E C99B 5017 YUP CMP #EOL eol? 56A0 D037 5018 BNE COMMENT no, do comment 56A2 E692 5019 INC COX dummy bump 56A4 18 5020 CLC sucess! 5021 ; 5022 ; Up-date valid text pointer 5023 ; 56A5 08 5024 VALID PHP save status 56A6 C499 5025 CPY SAXTX update valid text 56A8 9002 5026 BCC :63 56AA 8499 5027 STY SAXTX 56AC 28 5028 :63 PLP get status 56AD 60 5029 RTS 5030 ; 5031 .PAGE "SYNTAX SOURCE LINE" PAGE 113 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX SOURCE LINE D:BANKA2 5032 ; 5033 ; Syntax Source Line 5034 ; 56AE 20DAA7 5035 SYNLI JSR KONVERT do lower case 56B1 A4F2 5036 LDY CIX 56B3 84D0 5037 STY SVN2 56B5 8499 5038 STY SAXTX set valid text 56B7 B1F3 5039 LDA (INBUFF),Y 56B9 C920 5040 CMP #$20 manadatory! 56BB F030 5041 BEQ GOOD so far... 5042 ; 56BD A903 5043 ERROR LDA #3 oops 56BF 8592 5044 STA COX reset output buf 56C1 A499 5045 LDY SAXTX show where 56C3 B1F3 5046 LDA (INBUFF),Y syntax failed 56C5 C99B 5047 CMP #EOL failed at end? 56C7 D005 5048 BNE FEOL no 56C9 990106 5049 STA TPOBUF+1,Y append the Eol 56CC A920 5050 LDA #$20 space 56CE 4980 5051 FEOL EOR #$80 flag it 56D0 990006 5052 STA TPOBUF,Y save it 56D3 A900 5053 LDA #0 err line token 56D5 2C 5054 .BYTE $2C 5055 ; 56D6 A958 5056 COMMS LDA #@SCOMMENT statement 56D8 2C 5057 .BYTE $2C 56D9 A93B 5058 COMMENT LDA #@COMMENT 5059 ; 56DB 2085A4 5060 JSR PTOKE 56DE A6F2 5061 LDX CIX move string =A6E0 5062 :BR0 .= * used 1 56E0 BD0006 5063 LDA TPOBUF,X to exec buff 56E3 2085A4 5064 JSR PTOKE 56E6 E8 5065 INX 56E7 C99B 5066 CMP #EOL done? 56E9 D0F5 5067 BNE :BR0 56EB 18 5068 :YGD CLC set sucessful 56EC 60 5069 RTS 5070 .PAGE PAGE 114 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX SOURCE LINE D:BANKA2 5071 ; 5072 ; Check Label/Statement/Comment 5073 ; 56ED E6F2 5074 GOOD INC CIX get nxt char 56EF E699 5075 INC SAXTX valid text ptr 56F1 A4F2 5076 LDY CIX 56F3 B1F3 5077 LDA (INBUFF),Y 56F5 C93B 5078 CMP #'; semi-colon 56F7 F0DD 5079 BEQ COMMS 56F9 C92A 5080 CMP #'* or asterisk ok 56FB F0D9 5081 BEQ COMMS for comment 56FD 24AA 5082 BIT TXTFLAG in text mode? 56FF 30D5 5083 BMI COMMS yup, do comment 5084 ; 5701 AA 5085 TAX save A 5702 98 5086 TYA save Cix for 5703 48 5087 PHA possible error 5088 ; 5704 A021 5089 LDY # LABEL-1]=[ >NLABEL-1]]] 5094 .ERROR "LABEL & NLABEL" 5095 .ENDIF 5096 ; 570B A2AA 5097 :NOL LDX # >NLABEL-1 570D 98 5098 TYA 570E 2066A3 5099 JSR STC do syntax 5711 68 5100 PLA 5712 90D7 5101 BCC :YGD go RTS 5714 85F2 5102 STA CIX reset inbuff pointer 5716 B0A5 5103 BCS ERROR 5104 ; 5105 .PAGE "SYNTAX STATEMENTS" PAGE 115 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX STATEMENTS D:BANKA2 5106 ; 5107 ; Fnd func. & synt 5108 ; 5718 20A1DB 5109 FUNT JSR SKPSPACE 571B 84D0 5110 STY SVN2 571D 8499 5111 STY SAXTX set valid ptr 5112 ; 571F 20BCA4 5113 JSR SSRCH srch statements 5114 ; 5722 9002 5115 BCC FNT 5724 A907 5116 LDA #@MACROX asume macro call 5117 ; 5726 2085A4 5118 FNT JSR PTOKE save statement 5729 C900 5119 CMP #@SEOL for label eol 572B F0BE 5120 BEQ :YGD 5121 ; 5122 ; Divide Syntax by Instr Type 5123 ; 572D C92B 5124 CMP #@BRK a single instruction type? 572F 9018 5125 BCC FUN1 yup 5731 A22B 5126 LDX #@BRK pre-set indx =A733 5127 :BR0 .= * used 1 5733 DD2BA7 5128 CMP :ITP-@BRK,X find type 5736 9010 5129 BCC FUN0 yup 5738 E8 5130 INX bump X 5739 E02E 5131 CPX #@BRK+3 done? 573B 90F6 5132 BCC :BR0 no 5133 ; 573D C959 5134 CMP #@ROCKWELL new instr? 573F 9007 5135 BCC FUN0 nope 5741 D003 5136 BNE FUN2 5137 ; the STZ instr 5743 A22A 5138 LDX #@BIT same syntax 5745 2C 5139 .BYTE $2C 5140 ; 5746 A22B 5141 FUN2 LDX #@BRK get implied type 5142 ; 5748 8A 5143 FUN0 TXA 5749 0A 5144 FUN1 ASL A double for table index 574A A8 5145 TAY to Y 574B 68 5146 PLA pop old return 574C 68 5147 PLA 574D B918A2 5148 LDA LINETAB,Y syntax routine 5750 BE19A2 5149 LDX LINETAB+1,Y get high 5753 4C66A3 5150 JMP STC do syntax 5151 ; 5756 444C54 5152 :ITP .BYTE @BCC,@ORA,@ASL 5153 ; 5154 .PAGE "SYNTAX LABELS" PAGE 116 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX LABELS D:BANKA2 5155 ; 5156 ; Label Text Routines 5157 ; tstlabi for prefix labels 5158 ; 5759 20A1DB 5159 TSTLAB JSR SKPSPACE skip spaces 575C A4F2 5160 TSTLABI LDY CIX 575E 84D0 5161 STY SVN2 save inbuff 5760 84D1 5162 STY SVF2 5163 ; 5762 B1F3 5164 LDA (INBUFF),Y first character 5764 20AAA7 5165 JSR TSTLETTER must be alpha 5767 B03C 5166 BCS NOLAB it isn't... 5167 ; =A769 5168 :BR0 .= * used 2 5769 A4F2 5169 LDY CIX get inbuff index 576B E6F2 5170 INC CIX bump pointer 576D B1F3 5171 LDA (INBUFF),Y get character 576F 20AAA7 5172 JSR TSTLETTER is it letter? 5772 90F5 5173 BCC :BR0 yup, do next 5774 20D3A7 5174 JSR TSTNUM no, number type? 5777 90F0 5175 BCC :BR0 yup, get next 5176 ; Save Cox for 5779 A692 5177 LDX COX Macro label type 577B C6F2 5178 DEC CIX pop input indx 577D A5F2 5179 LDA CIX form lab len 577F E5D0 5180 SBC SVN2 cs 5781 0980 5181 ORA #$80 flag label-type 5783 300A 5182 BMI :LQ0 unc, put in outbuf 5183 ; =A785 5184 :BR0 .= * used 1 5785 A4D0 5185 LDY SVN2 move to outbuf 5787 E6D0 5186 INC SVN2 5789 C4F2 5187 CPY CIX done? 578B B007 5188 BCS :CKA yes, test for "A" 578D B1F3 5189 LDA (INBUFF),Y move character 578F 2085A4 5190 :LQ0 JSR PTOKE 5792 D0F1 5191 BNE :BR0 unc 5192 ; 5794 8A 5193 :CKA TXA test for label "A" 5795 A8 5194 TAY 5796 B180 5195 LDA (EXBUF),Y check length 5798 C981 5196 CMP #1!$80 one? 579A D01D 5197 BNE :SUC no, go sucess 579C C8 5198 INY 579D B180 5199 LDA (EXBUF),Y check character 579F C941 5200 CMP #'A A? 57A1 D016 5201 BNE :SUC no, sucess 5202 ; 57A3 8692 5203 STX COX reset exbuf index 57A5 A5D1 5204 NOLAB LDA SVF2 reset inbuf index 57A7 85F2 5205 STA CIX carry was set 57A9 60 5206 RTS 5207 ; 5208 .PAGE "LETTER TEST ROUTINES" PAGE 117 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA LETTER TEST ROUTINES D:BANKA2 5209 ; 5210 ; Test Letter & Number 5211 ; 57AA 5212 TSTLETTER 57AA C93A 5213 CMP #': colon 57AC F00B 5214 BEQ :SUC 57AE C95F 5215 CMP #'_ underline 57B0 F007 5216 BEQ :SUC 57B2 C93F 5217 CMP #'? 57B4 9009 5218 BCC NOCHAR 57B6 C95B 5219 CMP #'[ 57B8 60 5220 RTS 57B9 18 5221 :SUC CLC sucess 57BA 60 5222 RTS 57BB C92E 5223 :TST. CMP #'. 57BD F0FA 5224 BEQ :SUC 57BF 38 5225 NOCHAR SEC 57C0 60 5226 RTS 5227 ; 5228 ; Test Macro name label 5229 ; 57C1 2059A7 5230 TSTLAB0 JSR TSTLAB ck label 57C4 B0F9 5231 BCS NOCHAR bad 57C6 8A 5232 TXA X= cox at label 57C7 A8 5233 TAY 57C8 B180 5234 LDA (EXBUF),Y get lab size 57CA 6901 5235 ADC #1 bump by 1 cc 57CC 9180 5236 STA (EXBUF),Y store 57CE A920 5237 LDA #$20 trailing space 57D0 4C85A4 5238 JMP PTOKE and ret 5239 ; 57D3 C930 5240 TSTNUM CMP #'0 test decimal 57D5 90E4 5241 BCC :TST. number 57D7 C93A 5242 CMP #'9+1 57D9 60 5243 RTS 5244 ; 5245 .PAGE "HANDLE LOWER CASE" PAGE 118 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA HANDLE LOWER CASE D:BANKA2 5246 ; 57DA 5247 KONVERT ; Save as is 57DA A07F 5248 LDY #$7F =A7DC 5249 :BR0 .= * used 1 57DC B1F3 5250 LDA (INBUFF),Y 57DE 990006 5251 STA TPOBUF,Y 57E1 88 5252 DEY 57E2 10F8 5253 BPL :BR0 5254 ; 57E4 A5A4 5255 LDA EPF skip if Rep mode 57E6 C977 5256 CMP #RMODE 57E8 F03C 5257 BEQ KONV 5258 ; Change lower to upper =A7EA 5259 :BR0 .= * used 2 57EA C8 5260 INY 57EB B1F3 5261 LDA (INBUFF),Y get char 57ED C99B 5262 CMP #EOL done? 57EF F035 5263 BEQ KONV 57F1 297F 5264 AND #$7F normalize 5265 ; 57F3 C922 5266 CMP #'" double quote? 57F5 D00F 5267 BNE TRYLOW 57F7 91F3 5268 STA (INBUFF),Y save quote 57F9 C8 5269 TRYQ INY 57FA B1F3 5270 LDA (INBUFF),Y 57FC C99B 5271 CMP #EOL eol? 57FE F027 5272 BEQ QADD add second quote 5800 297F 5273 AND #$7F search for 5802 C922 5274 CMP #'" other " 5804 D0F3 5275 BNE TRYQ 5276 ; 5806 C961 5277 TRYLOW CMP #'a test lower 5808 9006 5278 BCC PUTBCK 580A C97B 5279 CMP #'z+1 580C B002 5280 BCS PUTBCK 580E 69E0 5281 ADC #-$20 subtract $20 5282 ; 5810 C97F 5283 PUTBCK CMP #TAB Tab? 5812 D005 5284 BNE KHAR nope 5814 A920 5285 LDA #$20 rep with space 5816 990006 5286 STA TPOBUF,Y echo in back-up 5287 ; 5819 91F3 5288 KHAR STA (INBUFF),Y 581B C927 5289 CMP #'' single quote? 581D D0CB 5290 BNE :BR0 no 581F C8 5291 INY 5820 B1F3 5292 LDA (INBUFF),Y next an EOL? 5822 C99B 5293 CMP #EOL 5824 D0C4 5294 BNE :BR0 no 5826 60 5295 KONV RTS 5296 ; 5827 C8 5297 QADD INY add second quote 5828 91F3 5298 STA (INBUFF),Y set the EOL 582A 88 5299 DEY point back 582B A922 5300 LDA #'" get quote 582D D0EA 5301 BNE KHAR unc, put char 5302 ; 5303 .INCLUDE #D:BANKA3 582F 5304 .OPT NO MLIST 5305 .PAGE "SYNTAX MACROS" PAGE 119 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX MACROS D:BANKA3 5306 ; 5307 ; Execute Syntax & Table Search 5308 ; Syntax Macros 5309 ; 5310 .MACRO ?BR internal table branches 5311 ?C .= %1-* 5312 .IF .NOT [?C>=-64 .OR ?C<=63] 5313 .ERROR "SYNTAX BRANCH RANGE" 5314 .ENDIF 5315 .IF %0>2 5316 .IF %0=3 5317 .BYTE ?C+$C0,%2,%3 5318 .ELSE 5319 .BYTE ?C+$C0,%2,%3,%4 5320 .ENDIF 5321 .ELSE 5322 .IF %0=1 5323 .BYTE ?C+$C0 5324 .ELSE 5325 .BYTE ?C+$C0,%2 5326 .ENDIF 5327 .ENDIF 5328 .ENDM 5329 ; 5330 .MACRO J1 absolute external 5331 .BYTE 1, >%1-1, <%1-1 5332 .ENDM 5333 ; 5334 .MACRO J0 absolute internal 5335 .BYTE 0, <%1-1, >%1-1 5336 .ENDM 5337 ; 5338 .MACRO CH search,change [,2] 5339 .BYTE %1,CH,%2 5340 .IF %0=3 5341 .BYTE %3 5342 .ENDIF 5343 .ENDM 5344 ; 5345 .PAGE "SYNTAX TABLES" PAGE 120 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX TABLES D:BANKA3 582F 5346 .OPT NO MLIST 5347 .SET 0,4 5348 ; 5349 ; Null syntax, always error 5350 ; 5351 NULLY J1 BAD6 582F 01A64F M5354 .BYTE 1, >%1-1, <%1-1 5355 ; 5356 ; .Float 5357 ; 5358 FLOATY J1 FSPC first # string 5832 01A5CA M5361 .BYTE 1, >%1-1, <%1-1 5362 ?BR FOP0,6,3 5835 C30603 M5381 .BYTE ?C+$C0,%2,%3 5382 FOP0 CH @LCMA,@CMA 5838 3B093D M5388 .BYTE %1,CH,%2 5389 J1 FSPC 583B 01A5CA M5392 .BYTE 1, >%1-1, <%1-1 5393 ?BR FOP0,4 583E BA04 M5412 .BYTE ?C+$C0,%2 5413 ; 5414 ; .Tab & .Set 5415 ; 5416 TABY J0 SX 5840 00E5A8 M5419 .BYTE 0, <%1-1, >%1-1 5420 J1 TCOMA 5843 01A664 M5423 .BYTE 1, >%1-1, <%1-1 5424 SETY J0 SX 5846 00E5A8 M5427 .BYTE 0, <%1-1, >%1-1 5428 J1 TCOMA 5849 01A664 M5431 .BYTE 1, >%1-1, <%1-1 5432 ?BR EQUY,3 584C C503 M5451 .BYTE ?C+$C0,%2 5452 ; 5453 ; =, .=, *= 5454 ; 5455 EQUY0 J1 MISS ;= & .= have label 584E 01A642 M5458 .BYTE 1, >%1-1, <%1-1 5459 EQUY J0 SX expression 5851 00E5A8 M5462 .BYTE 0, <%1-1, >%1-1 5854 0603 5463 ENDY .BYTE 6,3 implied 5464 ; 5465 ; Macro defination 5466 ; 5467 MACROY J1 MISS0 no label! 5856 01A64A M5470 .BYTE 1, >%1-1, <%1-1 5471 J1 TSTLAB0 macro name 5859 01A7C0 M5474 .BYTE 1, >%1-1, <%1-1 585C 060603 5475 ENDLY .BYTE 6,6,3 loose comment 5476 ; 5477 ; .Else & .Endif & .Endm 5478 ; 5479 ELSEY J1 MISS0 no label! 585F 01A64A M5482 .BYTE 1, >%1-1, <%1-1 5483 ?BR ENDLY,3 5862 BA03 M5502 .BYTE ?C+$C0,%2 5503 ; 5504 ; .If 5505 ; 5506 SRE ?BR :SRF,@REF,CH,@REFL 5864 C826092F M5525 .BYTE ?C+$C0,%2,%3,%4 5526 J1 TSTLAB label reference 5868 01A758 M5529 .BYTE 1, >%1-1, <%1-1 586B 03 5530 .BYTE 3 5531 ; 5532 :SRF CH @NOT,@NOTL 586C 230931 M5538 .BYTE %1,CH,%2 586F 04 5539 .BYTE 4 5540 ; 5541 IFY J0 SX expr 5870 00E5A8 M5544 .BYTE 0, <%1-1, >%1-1 5545 ?BR ENDLY,3 PAGE 121 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX TABLES D:BANKA3 5873 A903 M5564 .BYTE ?C+$C0,%2 5565 ; 5566 ; .Opt 5567 ; 5568 OPTY ?BR J1 5875 C3 M5587 .BYTE ?C+$C0 5588 ?BR ENDY,3 5876 9E03 M5607 .BYTE ?C+$C0,%2 5608 J1 ?BR J2 5878 C4 M5627 .BYTE ?C+$C0 5628 ?BR J3 5879 C7 M5647 .BYTE ?C+$C0 5648 ?BR J4,3 587A D603 M5667 .BYTE ?C+$C0,%2 5668 J2 CH @LNO,@NO 587C 440945 M5674 .BYTE %1,CH,%2 587F 04 5675 .BYTE 4 5880 46024702 5676 J3 .BYTE @OBJ,2,@ERR,2,@WAIT,2 5884 4A02 5886 48024902 5677 .BYTE @EJECT,2,@LIST,2,@NUM,2 588A 4D02 588C 4B024C03 5678 .BYTE @MLIST,2,@CLIST,3 5679 J4 J1 TCOMA 5890 01A664 M5682 .BYTE 1, >%1-1, <%1-1 5683 ?BR J1,4 5893 A504 M5702 .BYTE ?C+$C0,%2 5703 ; 5704 ; Test byte modifier 5705 ; 5895 12 5706 MODF .BYTE @PLUS plus 5707 J0 SX expression 5896 00E5A8 M5710 .BYTE 0, <%1-1, >%1-1 5711 J1 TCOMA 5899 01A664 M5714 .BYTE 1, >%1-1, <%1-1 589C 04 5715 .BYTE 4 5716 ; 5717 ; Macro execution 5718 ; 5719 MACROXY J1 TSTLAB0 macro name 589D 01A7C0 M5722 .BYTE 1, >%1-1, <%1-1 5723 ?BR SVR1,6,3 58A0 C30603 M5742 .BYTE ?C+$C0,%2,%3 5743 ; 5744 SVR1 J0 SVR exp or string 58A3 00C7A8 M5747 .BYTE 0, <%1-1, >%1-1 5748 ?BR BYT1,4 byte syntax 58A6 D104 M5767 .BYTE ?C+$C0,%2 5768 ; 5769 ; .Page & .Title 5770 ; 58A8 41 5771 PAGEY .BYTE @QU 5772 J1 FSTR 58A9 01A5EC M5775 .BYTE 1, >%1-1, <%1-1 58AC 41060206 5776 .BYTE @QU,6,2,6,3 58B0 03 5777 ; 5778 ; .Byte & .Sbyte 5779 ; 5780 BYTEY ?BR MODF 58B1 A4 M5799 .BYTE ?C+$C0 5800 ?BR SVR 58B2 D6 M5819 .BYTE ?C+$C0 5820 ?BR BYT1,6,3 58B3 C40603 M5839 .BYTE ?C+$C0,%2,%3 58B6 05 5840 BYT0 .BYTE 5 pop syntax 5841 BYT1 J1 TCOMA 58B7 01A664 M5844 .BYTE 1, >%1-1, <%1-1 5845 ?BR SVR 58BA CE M5864 .BYTE ?C+$C0 5865 ?BR BYT0,4 58BB BB04 M5884 .BYTE ?C+$C0,%2 5885 ; PAGE 122 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX TABLES D:BANKA3 5886 ; .Word & .Dbyte 5887 ; 5888 WORDY ?BR SX 58BD E9 M5907 .BYTE ?C+$C0 5908 ?BR WOR1,6,3 58BE C40603 M5927 .BYTE ?C+$C0,%2,%3 58C1 05 5928 WOR0 .BYTE 5 pop syntax 5929 WOR1 J1 TCOMA 58C2 01A664 M5932 .BYTE 1, >%1-1, <%1-1 5933 ?BR SX 58C5 E1 M5952 .BYTE ?C+$C0 5953 ?BR WOR0,4 58C6 BB04 M5972 .BYTE ?C+$C0,%2 5973 ; 5974 ; String or expression 5975 ; 5976 SVR ?BR SX,2,@QU expression 58C8 DE0241 M5995 .BYTE ?C+$C0,%2,%3 5996 J1 FSTR quoted string 58CB 01A5EC M5999 .BYTE 1, >%1-1, <%1-1 58CE 41020B 6000 .BYTE @QU,2,@MSTR 6001 J0 :BSX5 macro string 58D1 0018AA M6004 .BYTE 0, <%1-1, >%1-1 58D4 03 6005 .BYTE 3 6006 ; 6007 .PAGE "SYNTAX INSTRUCTIONS TABLE" PAGE 123 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX INSTRUCTIONS TABLE D:BANKA3 6008 ; 6009 ; Syntax instructions 6010 ; 58D5 40 6011 JMPY .BYTE @LP 6012 ?BR SX 58D6 D0 M6031 .BYTE ?C+$C0 6032 J0 GP9 58D7 001CA9 M6035 .BYTE 0, <%1-1, >%1-1 6036 ?BR BRKY,2 58DA C902 M6055 .BYTE ?C+$C0,%2 6056 JSRY ?BR SX,6,3 58DC CA0603 M6075 .BYTE ?C+$C0,%2,%3 6076 CPXY ?BR @PNDT 58DF CF M6095 .BYTE ?C+$C0 6096 BCCY ?BR SX,6,3 58E0 C60603 M6115 .BYTE ?C+$C0,%2,%3 58E3 060603 6116 BRKY .BYTE 6,6,3 6117 ; 6118 ; 6119 ; Syntax Expression 6120 ; 6121 SX J0 SRE ref label 58E6 0063A8 M6124 .BYTE 0, <%1-1, >%1-1 58E9 02 6125 .BYTE 2 6126 J0 BSX expr 58EA 00D0A9 M6129 .BYTE 0, <%1-1, >%1-1 58ED 03 6130 .BYTE 3 6131 ; 58EE 3E04 6132 @PNDT .BYTE @PND,4 test for '#' 6133 ; 58F0 40 6134 GP0 .BYTE @LP 6135 ?BR SX 58F1 B5 M6154 .BYTE ?C+$C0 6155 ?BR GP1,2 58F2 E902 M6174 .BYTE ?C+$C0,%2 58F4 3E 6175 GP2 .BYTE @PND 6176 ?BR SX,2 58F5 B102 M6195 .BYTE ?C+$C0,%2 6196 GP3 ?BR SX 58F7 AF M6215 .BYTE ?C+$C0 6216 ?BR GCMAX,3 58F8 E903 M6235 .BYTE ?C+$C0,%2 6236 ; 58FA 3E 6237 GP5 .BYTE @PND 6238 ?BR SX,2 58FB AB02 M6257 .BYTE ?C+$C0,%2 6258 GP6 ?BR SX,@CMAY,2 58FD A93802 M6277 .BYTE ?C+$C0,%2,%3 6278 ?BR SX,3 5900 A603 M6297 .BYTE ?C+$C0,%2 5902 6298 BITY ; new addr modes 6299 INCY ?BR GP3,6,3 5902 B50603 M6318 .BYTE ?C+$C0,%2,%3 6319 LDYY ?BR GP2,6,3 5905 AF0603 M6338 .BYTE ?C+$C0,%2,%3 6339 ASLY ?BR GP3,6,2 5908 AF0602 M6358 .BYTE ?C+$C0,%2,%3 590B 3F0603 6359 .BYTE @A,6,3 6360 ORAY ?BR SX,@CMAY,6,2 590E 98380602 M6379 .BYTE ?C+$C0,%2,%3,%4 6380 ?BR GP0,6,3 5912 9E0603 M6399 .BYTE ?C+$C0,%2,%3 6400 LDXY ?BR GP5,6,3 5915 A50603 M6419 .BYTE ?C+$C0,%2,%3 6420 STXY ?BR GP6,6,3 5918 A50603 M6439 .BYTE ?C+$C0,%2,%3 6440 ; 591B 3702 6441 GP1 .BYTE @PCMAY,2 591D 36023A03 6442 GP9 .BYTE @PCMAX,2,@RP,3 5921 3904 6443 GCMAX .BYTE @CMAX,4 6444 ; 6445 .PAGE "SYNTAX EDITOR COMMANDS" PAGE 124 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX EDITOR COMMANDS D:BANKA3 5923 43021109 6446 :TSQ .BYTE @Q,2,S.Q,CH,@Q,3 5927 4303 5929 3F021009 6447 :TSA .BYTE @A,2,S.A,CH,@A,3 592D 3F03 592F 08 6448 DELY .BYTE 8 6449 ?BR A03,@EOL,3 5930 C33C03 M6468 .BYTE ?C+$C0,%2,%3 5933 3B0804 6469 A03 .BYTE @LCMA,8,4 dec num 6470 ; 6471 FINDY J0 A11 filespec 5936 007BA9 M6474 .BYTE 0, <%1-1, >%1-1 6475 J1 FFND string 5939 01A5B8 M6478 .BYTE 1, >%1-1, <%1-1 6479 ?BR A02 line numbers 593C E4 M6498 .BYTE ?C+$C0 6499 ?BR A01 options 593D D0 M6518 .BYTE ?C+$C0 593E 3C03 6519 EOLY .BYTE @EOL,3 eol 6520 REPY J1 FFND 5940 01A5B8 M6523 .BYTE 1, >%1-1, <%1-1 6524 J1 FREP 5943 01A5DB M6527 .BYTE 1, >%1-1, <%1-1 6528 ?BR A02 5946 DA M6547 .BYTE ?C+$C0 6548 ?BR A00,@EOL,3 5947 C33C03 M6567 .BYTE ?C+$C0,%2,%3 594A 3B 6568 A00 .BYTE @LCMA 6569 ?BR :TSQ,2 594B 9802 M6588 .BYTE ?C+$C0,%2 594D 3B 6589 A01 .BYTE @LCMA 6590 ?BR :TSA,4 594E 9B04 M6609 .BYTE ?C+$C0,%2 6610 ASMY ?BR ?A05,2 (source)! or 5950 E902 M6629 .BYTE ?C+$C0,%2 6630 ?BR ?A04 (source or ,) 5952 E2 M6649 .BYTE ?C+$C0 6650 ?BR ?LE,2 (list)! or 5953 D502 M6669 .BYTE ?C+$C0,%2 6670 ; 6671 ?BR ?A04 (source or ,) 5955 DF M6690 .BYTE ?C+$C0 6691 ?BR ?L4 (list or ,) 5956 CD M6710 .BYTE ?C+$C0 6711 ?BR ?A05,2 (object)! or 5957 E202 M6730 .BYTE ?C+$C0,%2 6731 ; 6732 ?BR ?A04 (source or,) 5959 DB M6751 .BYTE ?C+$C0 6752 ?BR ?L4 (list or ,) 595A C9 M6771 .BYTE ?C+$C0 6772 ?BR ?A04 (object or ,) 595B D9 M6791 .BYTE ?C+$C0 6792 ?BR ?A05,2,@EOL,3 (xref)! or ! 595C DD023C03 M6811 .BYTE ?C+$C0,%2,%3,%4 5960 08 6812 A02 .BYTE 8 6813 ?BR A03,4 5961 9204 M6832 .BYTE ?C+$C0,%2 6833 ?L4 ?BR ?LL,@LCMA,2 5963 CA3B02 M6852 .BYTE ?C+$C0,%2,%3 6853 ?BR ?A04,3 5966 CE03 M6872 .BYTE ?C+$C0,%2 6873 ?LE ?BR ?LL,@EOL,2 5968 C53C02 M6892 .BYTE ?C+$C0,%2,%3 6893 ?BR ?A05,3 596B CE03 M6912 .BYTE ?C+$C0,%2 596D 3E13 6913 ?LL .BYTE @PND,@MINUS rep @pnd 6914 J1 S@CH with @minus 596F 01A47C M6917 .BYTE 1, >%1-1, <%1-1 5972 1303 6918 .BYTE @MINUS,3 6919 ?A04 ?BR BLOADY,@LCMA,2 5974 D23B02 M6938 .BYTE ?C+$C0,%2,%3 5977 3B03 6939 .BYTE @LCMA,3 PAGE 125 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX EDITOR COMMANDS D:BANKA3 6940 ?A05 ?BR BLOADY,@EOL,3 5979 CD3C03 M6959 .BYTE ?C+$C0,%2,%3 6960 A11 ?BR BLOADY,@LCMA,4 597C CA3B04 M6979 .BYTE ?C+$C0,%2,%3 597F 08133C02 6980 A13 .BYTE 8,@MINUS,@EOL,2 6981 NUMY ?BR A02 5983 9D M7000 .BYTE ?C+$C0 5984 3C03 7001 .BYTE @EOL,3 5986 3E 7002 BLOADY .BYTE @PND 7003 J1 FSPC 5987 01A5CA M7006 .BYTE 1, >%1-1, <%1-1 598A 03 7007 .BYTE 3 7008 ENTERY ?BR BLOADY 598B BB M7027 .BYTE ?C+$C0 7028 ?BR A06,@EOL,3 598C C33C03 M7047 .BYTE ?C+$C0,%2,%3 598F 3B4E02 7048 A06 .BYTE @LCMA,@M,2 5992 3B3F04 7049 .BYTE @LCMA,@A,4 7050 LISTY ?BR ?A05,2 5995 A402 M7069 .BYTE ?C+$C0,%2 7070 ?BR A11 5997 A5 M7089 .BYTE ?C+$C0 7090 ?BR A13,3 5998 A703 M7109 .BYTE ?C+$C0,%2 599A 3E 7110 BSAVEY .BYTE @PND 7111 J1 FSAV 599B 01A5C6 M7114 .BYTE 1, >%1-1, <%1-1 7115 ?BR A07,3 599E C203 M7134 .BYTE ?C+$C0,%2 59A0 1D073B 7135 A07 .BYTE @GRT,7,@LCMA 7136 ; 59A3 073C03 7137 LOMEMY .BYTE 7,@EOL,3 lomem =0000 7138 .IF 0 no more... 7139 DY .BYTE 7 7140 ?BR A08,@EOL,3 7141 A08 .BYTE @LCMA,7,4 7142 CY .BYTE 7,@GRT 7143 ?BR A09,@EOL,3 7144 A09 .BYTE @LCMA 7145 ?BR A09,2,7 7146 ?BR A10,3 7147 A10 .BYTE @LCMA 7148 ?BR A09,4 7149 .ENDIF 59A6 42073C02 7150 ?Y .BYTE @DOLL,7,@EOL,2,8,@EOL,3 59AA 083C03 59AD 7151 SAVEY =0001 7152 .IF SSAVE 59AD 3C 7153 .BYTE @EOL 7154 J1 FSVF 59AE 01A59A M7157 .BYTE 1, >%1-1, <%1-1 59B1 02 7158 .BYTE 2 7159 .ENDIF 59B2 3E 7160 INCLUDY .BYTE @PND 7161 J1 FSPC 59B3 01A5CA M7164 .BYTE 1, >%1-1, <%1-1 59B6 3C03 7165 .BYTE @EOL,3 7166 ; =0000 7167 .IF [ >INCLUDY]<>[ >DELY] 7168 .ERROR "EDITOR SYNTAX ADDRS" 7169 .ENDIF 7170 ; 7171 .PAGE "SYNTAX EXPRESSION" PAGE 126 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX EXPRESSION D:BANKA3 7172 ; 7173 :BSX6 CH @DEF,@DEFL,2 59B8 170930 M7179 .BYTE %1,CH,%2 59BB 02 M7180 .BYTE %3 7181 CH @GRT,@LOW,2 59BC 1D0934 M7187 .BYTE %1,CH,%2 59BF 02 M7188 .BYTE %3 7189 CH @LESS,@HIGH,3 59C0 1C0935 M7195 .BYTE %1,CH,%2 59C3 03 M7196 .BYTE %3 7197 ; 7198 :BSX3 CH @MINUS,@UMIN,2 59C4 13091E M7204 .BYTE %1,CH,%2 59C7 02 M7205 .BYTE %3 7206 CH @NOT,@NOTL,2 59C8 230931 M7212 .BYTE %1,CH,%2 59CB 02 M7213 .BYTE %3 7214 J1 ONLY1 single unarys 59CC 01A651 M7217 .BYTE 1, >%1-1, <%1-1 7218 ?BR :BSX6,3 59CF A903 M7237 .BYTE ?C+$C0,%2 7238 ; 7239 ; *** Entry Point 7240 ; 59D1 1F 7241 BSX .BYTE @OLP ;[ exp ] 7242 ?BR BSX,@ORP 59D2 BF20 M7261 .BYTE ?C+$C0,%2 7262 ; 7263 ?BR :BSX1,2 op exp 59D4 C802 M7282 .BYTE ?C+$C0,%2 7283 ?BR :BSX3 unary exp 59D6 AE M7302 .BYTE ?C+$C0 7303 ?BR BSX,2 59D7 BA02 M7322 .BYTE ?C+$C0,%2 7323 ?BR :BSX4 const op exp 59D9 EC M7342 .BYTE ?C+$C0 7343 ?BR :BSX1,3 59DA C203 M7362 .BYTE ?C+$C0,%2 7363 ; 7364 :BSX1 ?BR :BSX2 59DC C3 M7383 .BYTE ?C+$C0 7384 ?BR BSX,4 59DD B404 M7403 .BYTE ?C+$C0,%2 59DF 13021202 7404 :BSX2 .BYTE @MINUS,2,@PLUS,2 59E3 0D091402 7405 .BYTE @CPC,CH,@TIMES,2 59E7 2702 7406 .BYTE @MOD,2 59E9 15021602 7407 .BYTE @DIV,2,@AND,2,@OR,2 59ED 2402 59EF 25021802 7408 .BYTE @XOR,2,@CEQU,2,@LEQU,2 59F3 1902 59F5 1A021B02 7409 .BYTE @GEQU,2,@NEQU,2 59F9 1D021C02 7410 .BYTE @GRT,2,@LESS,2 7411 CH @BOR,@BORL,2 59FD 210933 M7417 .BYTE %1,CH,%2 5A00 02 M7418 .BYTE %3 7419 CH @BAND,@BANDL,3 5A01 220932 M7425 .BYTE %1,CH,%2 5A04 03 M7426 .BYTE %3 7427 ; 5A05 3D02 7428 :BSX4 .BYTE @CMA,2 7429 J1 TSTLAB label 5A07 01A758 M7432 .BYTE 1, >%1-1, <%1-1 5A0A 02 7433 .BYTE 2 7434 J1 HXDC hex/decimal # 5A0B 01A524 M7437 .BYTE 1, >%1-1, <%1-1 5A0E 020D020A 7438 .BYTE 2,@CPC,2,@APOST 7439 J1 TSTASC 5A12 01A633 M7442 .BYTE 1, >%1-1, <%1-1 5A15 020C 7443 .BYTE 2,@PERCENT 7444 ?BR :BSX5,3 5A17 C203 M7463 .BYTE ?C+$C0,%2 7464 ; PAGE 127 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA SYNTAX EXPRESSION D:BANKA3 5A19 080240 7465 :BSX5 .BYTE 8,2,@LP 7466 J0 BSX param # exp 5A1C 00D0A9 M7469 .BYTE 0, <%1-1, >%1-1 5A1F 3A03 7470 .BYTE @RP,3 7471 ; 7472 ; Master Syntax Source Line 7473 ; 7474 LABEL ?BR LABELS 5A21 C5 M7493 .BYTE ?C+$C0 7494 NLABEL J1 FUNT 5A22 01A717 M7497 .BYTE 1, >%1-1, <%1-1 5A25 03 7498 .BYTE 3 7499 ; 7500 LABELS J1 TSTLABI 5A26 01A75B M7503 .BYTE 1, >%1-1, <%1-1 7504 ; 7505 ; Inbedded table (save 1 byte) 7506 ; 5A29 04460410 7507 :OSS .BYTE $04,$46,$04,$10,$42 5A2D 42 7508 ; 7509 .INCLUDE #D:BANKA4 7510 .PAGE "ERROR MESSAGE STRINGS" PAGE 128 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA ERROR MESSAGE STRINGS D:BANKA4 7511 .SET 0,4 5A2E 4552524F 7512 ERES .CBYTE "ERROR - " 5A32 52202DA0 5A36 014D454D 7513 ERRTAB .CBYTE 1,"MEM FULL" 5A3A 2046554C 5A3E CC 5A3F 02424144 7514 .CBYTE 2,"BAD DEL" 5A43 204445CC 5A47 03425220 7515 .CBYTE 3,"BR RANGE" 5A4B 52414E47 5A4F C5 5A50 044E4F54 7516 .CBYTE 4,"NOT Z PAGE/IMM" 5A54 205A2050 5A58 4147452F 5A5C 494DCD 5A5F 05554E44 7517 .CBYTE 5,"UNDEF" 5A63 45C6 5A65 06455850 7518 .CBYTE 6,"EXP TOO C'PLX" 5A69 20544F4F 5A6D 20432750 5A71 4CD8 5A73 074455D0 7519 .CBYTE 7,"DUP" 5A77 084F2746 7520 .CBYTE 8,"O'FLOW" 5A7B 4C4FD7 5A7E 0949462F 7521 .CBYTE 9,"IF/ENDIF" 5A82 454E4449 5A86 C6 5A87 0A23203E 7522 .CBYTE 10,"# >255" 5A8B 3235B5 5A8E 0C4D4143 7523 .CBYTE 12,"MACRO ERR" 5A92 524F2045 5A96 52D2 5A98 0D504841 7524 .CBYTE 13,"PHASE" 5A9C 53C5 5A9E 0E2A3D20 7525 .CBYTE 14,"*= UNDEF" 5AA2 554E4445 5AA6 C6 5AA7 1123203E 7526 .CBYTE 17,"# >65535" 5AAB 36353533 5AAF B5 5AB0 124E4F20 7527 .CBYTE 18,"NO ENDM" 5AB4 454E44CD 5AB8 154E4553 7528 .CBYTE 21,"NESTED INCLUDE" 5ABC 54454420 5AC0 494E434C 5AC4 5544C5 5AC7 1746494C 7529 .CBYTE 23,"FILE TYPE" 5ACB 45205459 5ACF 50C5 5AD1 184C4F41 7530 .CBYTE 24,"LOAD TOO BIG" 5AD5 4420544F 5AD9 4F204249 5ADD C7 5ADE 1B424144 7531 .CBYTE 27,"BAD SET" 5AE2 205345D4 5AE6 1C544F4F 7532 .CBYTE XRERR,"TOO MANY X-REFS" 5AEA 204D414E 5AEE 5920582D 5AF2 524546D3 5AF6 1D544F4F 7533 .CBYTE HLOCER,"TOO MANY LOCAL FIELDS" 5AFA 204D414E 5AFE 59204C4F 5B02 43414C20 5B06 4649454C 5B0A 44D3 5B0C 20424144 7534 .CBYTE 32,"BAD PARAMETER" 5B10 20504152 5B14 414D4554 5B18 45D2 5B1A 214E4F54 7535 .CBYTE NFPR,"NOT FP #" 5B1E 20465020 5B22 A3 PAGE 129 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA ERROR MESSAGE STRINGS D:BANKA4 7536 ; 5B23 824E4F20 7537 .CBYTE 130,"NO DEV HANDLER" 5B27 44455620 5B2B 48414E44 5B2F 4C45D2 5B32 89545255 7538 .CBYTE 137,"TRUNCATED REC" 5B36 4E434154 5B3A 45442052 5B3E 45C3 5B40 8A54494D 7539 .CBYTE 138,"TIMEOUT" 5B44 454F55D4 5B48 8B4E41CB 7540 .CBYTE 139,"NAK" 5B4C 90575249 7541 .CBYTE 144,"WRITE PROTECTED" 5B50 54452050 5B54 524F5445 5B58 435445C4 5B5C A0445249 7542 .CBYTE 160,"DRIVE #" 5B60 564520A3 5B64 A1544F4F 7543 .CBYTE 161,"TOO MANY FILES" 5B68 204D414E 5B6C 59204649 5B70 4C45D3 5B73 A2444953 7544 .CBYTE 162,"DISK FULL" 5B77 4B204655 5B7B 4CCC 5B7D A546494C 7545 .CBYTE 165,"FILE NAME" 5B81 45204E41 5B85 4DC5 5B87 A74C4F43 7546 .CBYTE 167,"LOCKED" 5B8B 4B45C4 5B8E AA46494C 7547 .CBYTE 170,"FILE NOT FND",0 5B92 45204E4F 5B96 5420464E 5B9A C400 5B9C 28534545 7548 ERRF .CBYTE "(SEE MANUAL)" 5BA0 204D414E 5BA4 55414CA9 7549 ; 7550 .PAGE "LIST ERROR MESSAGES" PAGE 130 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA LIST ERROR MESSAGES D:BANKA4 7551 ; 7552 ; Print Error Message 7553 ; 5BA8 60 7554 LI1 RTS 5BA9 A5A5 7555 _LISTERR LDA EIX any errors? 5BAB F0FB 7556 BEQ LI1 nope, return 7557 ; 5BAD E6DF 7558 INC ERRORS bump error count 5BAF 48 7559 PHA save count 5BB0 A5A7 7560 LDA LSTDV to device? 5BB2 F00B 7561 BEQ LI0 nope, just screen 5BB4 48 7562 PHA save device 5BB5 A900 7563 LDA #0 list to E: 5BB7 85A7 7564 STA LSTDV x 5BB9 20C9AB 7565 JSR LE1 do it 5BBC 68 7566 PLA pop list device 5BBD 85A7 7567 STA LSTDV 5BBF 68 7568 LI0 PLA pop error count 5BC0 85A5 7569 STA EIX 7570 ; 5BC2 A5A2 7571 LDA EAF ck mode 5BC4 F003 7572 BEQ LE1 br if edit 5BC6 2000B8 7573 JSR TSTEJ ck eject 5BC9 A9FD 7574 LE1 LDA #BELL ring bell 5BCB 20C6B5 7575 JSR CHARO 5BCE A22E 7576 LDX # ERES message string 5BD2 20C4B7 7578 JSR PTST 7579 ; 5BD5 C6A5 7580 LE2 DEC EIX pop index 5BD7 304C 7581 BMI LE0 if done 5BD9 A6A5 7582 LDX EIX 5BDB B560 7583 LDA ERRSTACK,X get er code 5BDD F039 7584 BEQ USRER user error 5BDF C9C8 7585 CMP #200 pseudo CIO err? 5BE1 9002 7586 BCC LE3 no 5BE3 E9C8 7587 SBC #200 adjust code 7588 ; 5BE5 48 7589 LE3 PHA print err code # 5BE6 AA 7590 TAX 5BE7 A900 7591 LDA #0 5BE9 2058B7 7592 JSR PDNUM 5BEC A92C 7593 LDA #', print comma 5BEE 20C6B5 7594 JSR CHARO 7595 ; 5BF1 68 7596 PLA search message table 5BF2 2043AC 7597 JSR :SAME same messages? 7598 ; 5BF5 85E2 7599 STA FR1+2 5BF7 A9AA 7600 LDA # >ERRTAB 5BF9 85E1 7601 STA FR1+1 5BFB A936 7602 LDA # ERRF message 5C3A 20C4B7 7642 LE9 JSR PTST print string 5C3D 20A5B7 7643 JSR DOSP space 5C40 4CD5AB 7644 JMP LE2 get next 7645 ; 5C43 A008 7646 :SAME LDY #8 5C45 D952AC 7647 :SA1 CMP SMG,Y 5C48 F004 7648 BEQ :SA2 5C4A 88 7649 DEY 5C4B 10F8 7650 BPL :SA1 5C4D 60 7651 RTS 5C4E B95BAC 7652 :SA2 LDA SNG,Y 5C51 60 7653 RTS 7654 ; 5C52 0B1F1E10 7655 SMG .BYTE 11,31,30,16 5C56 190F1416 7656 .BYTE 25,15,20,22 5C5A 13 7657 .BYTE 19 5C5B 090C0C0C 7658 SNG .BYTE 9,12,12,12 5C5F 17080808 7659 .BYTE 23,8,8,8 5C63 0E 7660 .BYTE 14 7661 ; 7662 .INCLUDE #D:BANKA5 7663 .PAGE "EDITOR LINE NUMBER TEST" PAGE 132 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR LINE NUMBER TEST D:BANKA5 7664 ; 7665 ; Text Line # Test 7666 ; 5C64 7667 LNUM? 5C64 2000D8 7668 JSR AFP dec #? 5C67 9005 7669 BCC GLNM yup 5C69 A900 7670 LDA #0 nope, reset 5C6B 85F2 7671 STA CIX text pointer & ret 5C6D 60 7672 RTS 7673 ; 5C6E A5A3 7674 GLNM LDA NMFG in auto-num? 5C70 F015 7675 BEQ GLNM1 no 5C72 24A6 7676 BIT ENTDV Entering Auto? 5C74 3011 7677 BMI GLNM1 yes 7678 ; 5C76 A5F2 7679 LDA CIX handle Atari E: quirk 5C78 48 7680 PHA 5C79 2000D8 7681 JSR AFP second line #? 5C7C 68 7682 PLA 5C7D 9004 7683 BCC GLNM2 yes, forget 1st line# 5C7F 85F2 7684 STA CIX no, restore input index 5C81 B004 7685 BCS GLNM1 unc 7686 ; 5C83 A9C0 7687 GLNM2 LDA #$C0 bit 6 => no auto incr 5C85 85A3 7688 STA NMFG 5C87 20D2D9 7689 GLNM1 JSR FPI F.P. to interger 7690 ; 5C8A B00B 7691 BCS LERR if not interger 5C8C A4D5 7692 LDY FR0+1 set search line # 5C8E A5D4 7693 LDA FR0 5C90 849B 7694 STY SRLNUM+1 5C92 859A 7695 STA SRLNUM 5C94 4C45A5 7696 JMP OK9 go store num 5C97 A911 7697 LERR LDA #17 5C99 200FB4 7698 JSR PUTERR 7699 ; 7700 .INCLUDE #D:BANKA6 7701 .PAGE "EDITOR AUTO NUMBER" PAGE 133 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR AUTO NUMBER D:BANKA6 7702 ; 7703 ; Editor Auto Number 7704 ; 5C9C 20E2AC 7705 NUMX JSR ANUMP set user para's 5C9F 9027 7706 BCC NM3 go if have slno 5CA1 2004B2 7707 JSR FNDLI0 7708 ; 5CA4 20AEB3 7709 NM1 JSR ENDL? statements end? 5CA7 B010 7710 BCS NM2 yup 7711 ; 5CA9 A000 7712 LDY #0 save this lineo 5CAB B186 7713 LDA (STMCUR),Y 5CAD 859A 7714 STA SRLNUM 5CAF C8 7715 INY 5CB0 B186 7716 LDA (STMCUR),Y 5CB2 859B 7717 STA SRLNUM+1 5CB4 2049B2 7718 JSR GTADOFF point to next 5CB7 90EB 7719 BCC NM1 unc, try again 7720 ; 5CB9 18 7721 NM2 CLC add incr 5CBA A59A 7722 LDA SRLNUM to last lineo 5CBC 65AB 7723 ADC NUMI and detect 5CBE 85A0 7724 STA LELNM overflow 5CC0 A59B 7725 LDA SRLNUM+1 5CC2 65AC 7726 ADC NUMI+1 5CC4 85A1 7727 STA LELNM+1 x 5CC6 B005 7728 BCS NUMERR oops! 7729 ; 5CC8 A980 7730 NM3 LDA #$80 sucess, set 5CCA 85A3 7731 STA NMFG auto flag here 5CCC 60 7732 RTS 7733 ; 5CCD A914 7734 NUMERR LDA #20 5CCF 4C0FB4 7735 JMP PUTERR 7736 ; 7737 ; Update cur line # for Auto/Ren 7738 ; 5CD2 18 7739 UPCUR CLC add numi 5CD3 A5A0 7740 LDA LELNM to lelnm 5CD5 65AB 7741 ADC NUMI and detect 5CD7 85A0 7742 STA LELNM overflow 5CD9 A5A1 7743 LDA LELNM+1 x 5CDB 65AC 7744 ADC NUMI+1 x 5CDD 85A1 7745 STA LELNM+1 5CDF B0EC 7746 BCS NUMERR no good! 5CE1 60 7747 RTS 7748 ; 7749 .PAGE "AUTO & REN SET-UP" PAGE 134 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA AUTO & REN SET-UP D:BANKA6 7750 ; 7751 ; Number Set-up for Rep & Num 7752 ; Carry clear = starting lineo 7753 ; 5CE2 A90A 7754 ANUMP LDA #10 set default increment 5CE4 85A0 7755 STA LELNM to 10 5CE6 85AB 7756 STA NUMI 5CE8 A900 7757 LDA #0 high=0 5CEA 85A1 7758 STA LELNM+1 5CEC 85AC 7759 STA NUMI+1 7760 ; 5CEE 20EFBF 7761 JSR _GETN number or carry 5CF1 B01A 7762 BCS ANUMSET use defaults 5CF3 85AC 7763 STA NUMI+1 use user 5CF5 86AB 7764 STX NUMI increments 7765 ; 5CF7 208AB5 7766 JSR GTOKEL another number? 5CFA F011 7767 BEQ ANUMSET no 7768 ; 5CFC A5AB 7769 LDA NUMI user inc is now 5CFE 85A0 7770 STA LELNM starting lineo 5D00 A5AC 7771 LDA NUMI+1 5D02 85A1 7772 STA LELNM+1 x 7773 ; 5D04 20EFBF 7774 JSR _GETN get user num inc 5D07 85AC 7775 STA NUMI+1 5D09 86AB 7776 STX NUMI 7777 ; 5D0B 18 7778 CLC set starting 5D0C 60 7779 RTS lineo 5D0D 38 7780 ANUMSET SEC 5D0E 60 7781 RJ2 RTS 7782 ; 7783 .PAGE "EDITOR RE-NUMBER" PAGE 135 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR RE-NUMBER D:BANKA6 7784 ; 7785 ; Editor Renumber Statement Lines 7786 ; 5D0F 20E2AC 7787 RENX JSR ANUMP set num paras 5D12 2004B2 7788 JSR FNDLI0 get first line 7789 ; 5D15 20AEB3 7790 RJ1 JSR ENDL? statements end? 5D18 B0F4 7791 BCS RJ2 yup 7792 ; 5D1A A000 7793 LDY #0 set this lineo 5D1C A5A0 7794 LDA LELNM equal to 5D1E 9186 7795 STA (STMCUR),Y current lineo 5D20 A5A1 7796 LDA LELNM+1 5D22 C8 7797 INY 5D23 9186 7798 STA (STMCUR),Y high byte 5D25 20D2AC 7799 JSR UPCUR update current 5D28 2049B2 7800 JSR GTADOFF point to nxt 5D2B 90E8 7801 BCC RJ1 unc, again 7802 ; 7803 .PAGE "EDITOR DELETE" PAGE 136 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR DELETE D:BANKA6 7804 ; 7805 ; Editor Delete 7806 ; 5D2D 204CAF 7807 DELX JSR LRNG1 set S&E lines 5D30 9005 7808 BCC DL1 first l. fnd 5D32 A902 7809 DELER LDA #2 invalid del 5D34 4C0FB4 7810 JMP PUTERR x 7811 ; 5D37 A486 7812 DL1 LDY STMCUR save stmcur 5D39 A687 7813 LDX STMCUR+1 x 5D3B A5A0 7814 LDA LELNM move end line to 5D3D 859A 7815 STA SRLNUM search line ptr 5D3F A5A1 7816 LDA LELNM+1 to calculate move size 5D41 84A0 7817 STY LELNM put start adress 5D43 86A1 7818 STX LELNM+1 here for now 7819 ; 5D45 2008B2 7820 JSR FNDLI9 search end line # 5D48 B003 7821 BCS NOBUMP don't inc stmcur 5D4A 2049B2 7822 JSR GTADOFF contract at next line 7823 ; 5D4D 38 7824 NOBUMP SEC get move size 5D4E A586 7825 LDA STMCUR 5D50 E5A0 7826 SBC LELNM x 5D52 A8 7827 TAY low byte in Y 5D53 A587 7828 LDA STMCUR+1 x 5D55 E5A1 7829 SBC LELNM+1 high byte in A 5D57 30D9 7830 BMI DELER fatal!!! 5D59 A286 7831 LDX #STMCUR table index 5D5B 4CEAB4 7832 JMP CONTRACT contract & ret 7833 ; 7834 .INCLUDE #D:BANKA7 7835 .PAGE "EDITOR FIND AND REPLACE" PAGE 137 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR FIND AND REPLACE D:BANKA7 7836 ; 7837 ; Editor Replace 7838 ; 5D5E 7839 REPX 5D5E 204ABE 7840 JSR GETSLEN get 1st string length 5D61 85B1 7841 STA RPS1 save 5D63 204ABE 7842 JSR GETSLEN get 2nd string length 5D66 85D2 7843 STA RPS2 save 5D68 A980 7844 LDA #$80 set rep mode 5D6A D039 7845 BNE FX1 7846 ; 7847 ; Editor Find 7848 ; 5D6C 7849 FINDX 5D6C 2090B5 7850 JSR GTOKE list to device? 5D6F 302B 7851 BMI FNDX1 no 7852 ; must've been a # 5D71 20D5B3 7853 JSR OPNOUT handle filespec 5D74 E692 7854 INC COX skip comma 7855 ; 7856 ; Special Procedure for filespec 7857 ; 5D76 38 7858 SEC 5D77 A5B0 7859 LDA CMDLG adjust exbuf 5D79 E592 7860 SBC COX 5D7B AA 7861 TAX move size 5D7C 38 7862 SEC 5D7D A580 7863 LDA EXBUF form move to 5D7F E592 7864 SBC COX address 5D81 85F3 7865 STA INBUFF temp pointer 5D83 A581 7866 LDA EXBUF+1 5D85 E900 7867 SBC #0 5D87 85F4 7868 STA INBUFF+1 5D89 A492 7869 LDY COX now, move 'em =AD8B 7870 :BR0 .= * used 1 5D8B B180 7871 LDA (EXBUF),Y 5D8D 91F3 7872 STA (INBUFF),Y 5D8F C8 7873 INY 5D90 CA 7874 DEX 5D91 10F8 7875 BPL :BR0 5D93 E8 7876 INX reset cox X=0 5D94 8692 7877 STX COX 7878 ; 5D96 209EAD 7879 JSR FNDX2 execute find 5D99 4CD8B1 7880 JMP CLOSEL finish & return 7881 ; 7882 ; Go Find 7883 ; 5D9C C692 7884 FNDX1 DEC COX 5D9E 204ABE 7885 FNDX2 JSR GETSLEN get string length 5DA1 85B1 7886 STA RPS1 save 5DA3 A900 7887 LDA #0 set find mode 7888 ; 5DA5 85C9 7889 FX1 STA RPFD 5DA7 EEFE02 7890 INC DSPFLG for control chars 5DAA 20D7AE 7891 JSR GETPA set S&E lineos 7892 ; 5DAD A4B0 7893 LDY CMDLG =ADAF 7894 :BR0 .= * used 1 5DAF B180 7895 LDA (EXBUF),Y move command line 5DB1 9182 7896 STA (REPBUF),Y to safe place 5DB3 88 7897 DEY 5DB4 10F9 7898 BPL :BR0 7899 ; =ADB6 7900 :BR0 .= * used 2 5DB6 A980 7901 LDA #$80 clear inbuff flag 5DB8 85CB 7902 STA RPIF 5DBA 20BBB3 7903 JSR LLINE past last line? 5DBD B01E 7904 BCS FX0 yup 5DBF 202AB7 7905 FX4 JSR TESTBK break? 5DC2 D019 7906 BNE FX0 yup 7907 ; PAGE 138 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR FIND AND REPLACE D:BANKA7 5DC4 24CB 7908 BIT RPIF did REP cause delete 5DC6 70EE 7909 BVS :BR0 yup 7910 ; 5DC8 2098AE 7911 FX5 JSR ISRCH go match string 5DCB B00B 7912 BCS FX6 no match! 5DCD A5C9 7913 LDA RPFD check mode 5DCF D00D 7914 BNE RX1 br if rep 5DD1 204BB5 7915 JSR INBOUT display line 5DD4 A5C3 7916 LDA RPOC first occurance? 5DD6 F005 7917 BEQ FX0 yup 7918 ; 5DD8 2049B2 7919 FX6 JSR GTADOFF point to next 5DDB 90D9 7920 BCC :BR0 unc, nice 5DDD 60 7921 FX0 RTS 7922 ; 7923 .PAGE "REPLACE MODULE" PAGE 139 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA REPLACE MODULE D:BANKA7 7924 ; 7925 ; Replace Module 7926 ; 5DDE A5C3 7927 RX1 LDA RPOC in querry? 5DE0 1036 7928 BPL RX4 no 5DE2 204BB5 7929 JSR INBOUT list line 7930 ; 5DE5 A93F 7931 RX2 LDA #'? prompt 5DE7 20C6B5 7932 JSR CHARO 5DEA 2051DA 7933 JSR INTLBF fail safe! 5DED A900 7934 LDA #0 force $500 buf 5DEF 85F3 7935 STA INBUFF 5DF1 20CFB3 7936 JSR EGLI1 get line 5DF4 2051DA 7937 JSR INTLBF reset buff 5DF7 202AB7 7938 JSR TESTBK abort? 5DFA F003 7939 BEQ RX3 no 5DFC 4C4AB0 7940 ?REX JMP PRMPT ret to edit 7941 ; 5DFF AD0005 7942 RX3 LDA LBUFF-$80 get responce 5E02 C959 7943 CMP #'Y 'Y'es? 5E04 F012 7944 BEQ RX4 exchange! 5E06 C979 7945 CMP #'y 'y'es? 5E08 F00E 7946 BEQ RX4 exchange! 5E0A CD8204 7947 CMP HCNTRLC aborting? 5E0D F0ED 7948 BEQ ?REX 5E0F C99B 7949 CMP #EOL no exchange? 5E11 D0D2 7950 BNE RX2 no, go reprompt 7951 ; 5E13 E6B2 7952 INC RPSP point to nxt, 5E15 4CC8AD 7953 JMP FX5 continue 7954 .PAGE PAGE 140 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA REPLACE MODULE D:BANKA7 7955 ; 5E18 A5B1 7956 RX4 LDA RPS1 form string diff 5E1A 38 7957 SEC 5E1B E5D2 7958 SBC RPS2 5E1D 85AF 7959 STA TEMP save 5E1F A5B3 7960 LDA RPLL form new 5E21 38 7961 SEC inbuff end 5E22 E5AF 7962 SBC TEMP 5E24 48 7963 PHA save 5E25 C5B3 7964 CMP RPLL check against old 5E27 F026 7965 BEQ EQUAL br if = 5E29 B015 7966 BCS MVUP br if > 7967 ; 5E2B A5B4 7968 LDA RPOP form move from 5E2D 65D2 7969 ADC RPS2 inbuf index 5E2F AA 7970 TAX 5E30 A4B2 7971 LDY RPSP mvta index =AE32 7972 :BR0 .= * used 1 5E32 E8 7973 INX bump mvfa 5E33 C8 7974 INY bump mvta 5E34 B98005 7975 LDA LBUFF,Y move until eol 5E37 9D8005 7976 STA LBUFF,X 5E3A C99B 7977 CMP #EOL 5E3C D0F4 7978 BNE :BR0 another byte 5E3E F00F 7979 BEQ EQUAL unc 7980 ; 5E40 AA 7981 MVUP TAX mvta inbuf index 5E41 A4B3 7982 LDY RPLL mvfa inbuf index 7983 ; =AE43 7984 :BR0 .= * used 1 5E43 B98005 7985 LDA LBUFF,Y move byte 5E46 9D8005 7986 STA LBUFF,X 5E49 CA 7987 DEX pop indices 5E4A 88 7988 DEY 5E4B C4B2 7989 CPY RPSP at cur ptr? 5E4D D0F4 7990 BNE :BR0 no 7991 ; 5E4F 68 7992 EQUAL PLA new inbuff 5E50 85B3 7993 STA RPLL string length 5E52 A5B2 7994 LDA RPSP form new current 5E54 E5AF 7995 SBC TEMP inbuff ptr (CS) 5E56 85B2 7996 STA RPSP 5E58 E6B2 7997 INC RPSP and bump it 7998 ; 5E5A A5D2 7999 LDA RPS2 string 2 length 5E5C F013 8000 BEQ RX6 br if zero 5E5E 85AF 8001 STA TEMP save 5E60 A4C8 8002 LDY RPSE start 2nd string -1 5E62 A6B4 8003 LDX RPOP old inbuff ptr 8004 ; =AE64 8005 :BR0 .= * used 1 5E64 C8 8006 INY bump 5E65 E8 8007 INX 5E66 B182 8008 LDA (REPBUF),Y move new char =0001 8009 .IF WILD 5E68 F003 8010 BEQ :WILD wild card stuff 8011 .ENDIF 5E6A 9D8005 8012 STA LBUFF,X to inbuf =AE6D 8013 :WILD = * 5E6D C6AF 8014 DEC TEMP pop cnt 5E6F D0F3 8015 BNE :BR0 br if not done 8016 ; 5E71 A977 8017 RX6 LDA #RMODE syntax this 5E73 85A4 8018 STA EPF line 5E75 A900 8019 LDA #0 clear syntax pointers 5E77 85F2 8020 STA CIX current input 5E79 8599 8021 STA SAXTX syntax valid 5E7B 8592 8022 STA COX current output 5E7D 20A1DB 8023 JSR SKPSPACE 5E80 20DAA7 8024 JSR KONVERT handle lower case 5E83 4C92B0 8025 JMP VERY hidden JSR 5E86 A900 8026 VERYR LDA #0 ret here unless PAGE 141 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA REPLACE MODULE D:BANKA7 5E88 85A4 8027 STA EPF syntax err 5E8A 24CF 8028 BIT SYSTEM display the line? 5E8C 7003 8029 BVS :ND 5E8E 204BB5 8030 JSR INBOUT yes, display line 8031 ; 5E91 A5C3 8032 :ND LDA RPOC first occur? 5E93 F041 8033 BEQ SS0 yup, ret 5E95 4CBFAD 8034 JMP FX4 no, do nxt 8035 ; 8036 .PAGE "STRING SEARCH ROUTINE" PAGE 142 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA STRING SEARCH ROUTINE D:BANKA7 8037 ; 8038 ; Inbuff String Search 8039 ; CC = found; CS = not fnd 8040 ; 5E98 A5CB 8041 ISRCH LDA RPIF inbuff have line? 5E9A F00F 8042 BEQ SS1 yup 5E9C 203FBE 8043 JSR SETZTAB reset zp tabs 5E9F 20F9BD 8044 JSR MOVIN move to inbuff 5EA2 A4F2 8045 LDY CIX inbuf length +1 5EA4 88 8046 DEY pop 5EA5 84B3 8047 STY RPLL save 5EA7 A000 8048 LDY #0 5EA9 84CB 8049 STY RPIF clear inbuf flg 8050 ; 5EAB C6B2 8051 SS1 DEC RPSP init inbuf index 5EAD A6B2 8052 LDX RPSP save current pointer 5EAF 86B4 8053 SS2 STX RPOP 5EB1 A000 8054 LDY #0 clear pointer to rep buff 5EB3 84B5 8055 STY RPCL 8056 ; 5EB5 C8 8057 SS3 INY pt to next char 5EB6 C4C8 8058 CPY RPSE check ptr 5EB8 B017 8059 BCS SS5 at end, found 8060 ; 5EBA B182 8061 LDA (REPBUF),Y get char 5EBC E8 8062 INX inc inbuf ptr 5EBD E4B3 8063 CPX RPLL check ptr 5EBF B011 8064 BCS SS8 at end, not fnd 8065 ; 5EC1 DD8005 8066 CMP LBUFF,X they match? 5EC4 F0EF 8067 BEQ SS3 yup, get nxt =0001 8068 .IF WILD 5EC6 C900 8069 CMP #0 wild card is 0! 5EC8 F0EB 8070 BEQ SS3 8071 .ENDIF 5ECA A4B4 8072 LDY RPOP old inbuf index 5ECC C8 8073 INY bump 5ECD 84B2 8074 STY RPSP as new srch index 5ECF D0DE 8075 BNE SS2 unc 8076 ; 5ED1 18 8077 SS5 CLC 5ED2 84B5 8078 SS8 STY RPCL set new pointers 5ED4 86B2 8079 STX RPSP 5ED6 60 8080 SS0 RTS 8081 ; 8082 .PAGE "FIND/REP INITIALIZATION" PAGE 143 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA FIND/REP INITIALIZATION D:BANKA7 8083 ; 8084 ; Init for Find & Replace 8085 ; 5ED7 204CAF 8086 GETPA JSR LRNG1 set S&E lineo 5EDA A2FF 8087 LDX #$FF set for querry 5EDC 208AB5 8088 JSR GTOKEL if eol, then set 5EDF F008 8089 BEQ :GP2 first occurance 8090 ; 5EE1 2090B5 8091 JSR GTOKE 5EE4 C93F 8092 CMP #@A is it "A"? 5EE6 D002 8093 BNE :GP1 no 5EE8 E8 8094 INX set all occurance 8095 ; X will be =1 8096 ; 5EE9 E8 8097 :GP2 INX 1st occurance (X was $FF) 5EEA 86C3 8098 :GP1 STX RPOC set Q, A, or 1st 8099 ; 5EEC A6B1 8100 LDX RPS1 get string length 5EEE E8 8101 INX bump and save as 5EEF 86C8 8102 STX RPSE end for string test 5EF1 A900 8103 LDA #0 list line # 5EF3 85A9 8104 STA SUPR 5EF5 60 8105 RTS 8106 ; 8107 .INCLUDE #D:BANKA8 8108 .PAGE "EXECUTE AUTO NUMBER" PAGE 144 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EXECUTE AUTO NUMBER D:BANKA8 8109 ; 8110 ; Auto-Number 8111 ; 5EF6 85A3 8112 AN0 STA NMFG reset bit 6 5EF8 20D2AC 8113 JSR UPCUR do the AUTO update 8114 ; fall for re-try 8115 ; 5EFB A5A0 8116 AUTONUM LDA LELNM search for 5EFD 859A 8117 STA SRLNUM cur line 5EFF 85D4 8118 STA FR0 5F01 A5A1 8119 LDA LELNM+1 5F03 859B 8120 STA SRLNUM+1 5F05 85D5 8121 STA FR0+1 5F07 24A6 8122 BIT ENTDV Enter with Auto? 5F09 3011 8123 BMI AN1 yup, skip! 5F0B 200AB2 8124 JSR FNDLI 8125 ; if not in memory, 5F0E B00C 8126 BCS AN1 do this num 8127 ; 5F10 A980 8128 LDA #$80 maybe special case? 5F12 24A3 8129 BIT NMFG if bit 6: special 5F14 70E0 8130 BVS AN0 5F16 0A 8131 ASL A A=0, clear 5F17 85A3 8132 STA NMFG auto-num & ret 5F19 4C4AB0 8133 JMP PRMPT 8134 ; 5F1C 205CB7 8135 AN1 JSR PRDN print lineo 5F1F A9A0 8136 LDA #' !$80 and space 5F21 2069B7 8137 JSR ENTERS 5F24 A4D0 8138 LDY SVN2 clean up 5F26 B1F3 8139 LDA (INBUFF),Y inbuf lineo 5F28 297F 8140 AND #$7F x 5F2A 91F3 8141 STA (INBUFF),Y 5F2C C8 8142 INY 5F2D A920 8143 LDA #$20 lineo + space 5F2F 91F3 8144 STA (INBUFF),Y 5F31 C8 8145 INY 5F32 84D0 8146 STY SVN2 5F34 18 8147 CLC 5F35 98 8148 TYA 5F36 65F3 8149 ADC INBUFF 5F38 85F3 8150 STA INBUFF 5F3A A97F 8151 LDA #127 form new buff 5F3C 38 8152 SEC start adr 5F3D E5D0 8153 SBC SVN2 5F3F A8 8154 TAY 5F40 2013B6 8155 JSR STEXT set CIO text 5F43 2009B7 8156 JSR IO3 do CIO 5F46 203FB6 8157 JSR GETSTAT ck stat 5F49 4C51DA 8158 JMP INTLBF ret 8159 ; 8160 .INCLUDE #D:BANKA9 8161 .PAGE "EDITOR LINE NUMBER SET-UP" PAGE 145 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR LINE NUMBER SET-UP D:BANKA9 8162 ; 8163 ; Set-up Line Number Range 8164 ; for list, print, find, & rep 8165 ; 5F4C 2090B5 8166 LRNG1 JSR GTOKE 5F4F A000 8167 LRNGE LDY #0 default to 5F51 849A 8168 STY SRLNUM line 0 through 5F53 849B 8169 STY SRLNUM+1 line 65535 5F55 88 8170 DEY 5F56 84A0 8171 STY LELNM 5F58 84A1 8172 STY LELNM+1 8173 ; 5F5A 20E6BF 8174 JSR _GETNE get num or carry 5F5D B024 8175 BCS :LR2 no number 5F5F 859B 8176 STA SRLNUM+1 set start & 5F61 85A1 8177 STA LELNM+1 end line 5F63 869A 8178 STX SRLNUM numbers equal 5F65 86A0 8179 STX LELNM 8180 ; 5F67 208AB5 8181 JSR GTOKEL done? 5F6A F017 8182 BEQ :LR2 yup, all set 8183 ; 5F6C C913 8184 CMP #@MINUS for "LIST exp," 5F6E D006 8185 BNE :LR8 5F70 A9FF 8186 LDA #-1 set default LELNM 5F72 AA 8187 TAX 5F73 18 8188 CLC 5F74 9005 8189 BCC :LR5 unc 8190 ; 5F76 20EFBF 8191 :LR8 JSR _GETN number or carry 5F79 B006 8192 BCS :LR1 5F7B 85A1 8193 :LR5 STA LELNM+1 save end 5F7D 86A0 8194 STX LELNM line number 5F7F 9004 8195 BCC :LR7 unc, find start l. 8196 ; 5F81 C692 8197 :LR1 DEC COX pop to spec 5F83 C692 8198 :LR2 DEC COX pop to eol/spec 5F85 4C0AB2 8199 :LR7 JMP FNDLI fall thru to "FNDLI" 8200 ; 8201 .PAGE "EDITOR SIZE & CONVERT & LOMEM" PAGE 146 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR SIZE & CONVERT & LOMEM D:BANKA9 8202 ; 8203 ; Editor Size 8204 ; =AF88 8205 :BR0 .= * used 2 5F88 B580 8206 LDA LOMEM,X 5F8A B481 8207 LDY LOMEM+1,X 5F8C 207BB7 8208 JSR HEXW 5F8F 4CAFB5 8209 JMP SPACE3 8210 ; 5F92 8211 SIZEX 5F92 2088AF 8212 JSR :BR0 print lomem 5F95 A208 8213 LDX #TXTEND-LOMEM top of text 5F97 2088AF 8214 JSR :BR0 8215 ; 5F9A ADE502 8216 LDA MTP print high mem 5F9D ACE602 8217 LDY MTP+1 8218 ; 5FA0 207BB7 8219 SI JSR HEXW print hex word 5FA3 4CB1B7 8220 JMP DOCR do eol & ret 8221 ; 8222 .PAGE PAGE 147 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKA EDITOR SIZE & CONVERT & LOMEM D:BANKA9 8223 ; 8224 ; Editor Hex/Dec-Dec/Hex Convert 8225 ; 5FA6 A93D 8226 ?X LDA #'= print leading = 5FA8 20C6B5 8227 JSR CHARO 5FAB 2090B5 8228 JSR GTOKE 5FAE C942 8229 CMP #@DOLL dollar sign? 5FB0 D009 8230 BNE TOHEX nope 8231 ; 8232 ; Convert hex to decimal 8233 ; 5FB2 20EFBF 8234 JSR _GETN 5FB5 2058B7 8235 JSR PDNUM go print it 5FB8 4CB1B7 8236 JMP DOCR do eol & ret 8237 ; 5FBB 48 8238 TOHEX PHA dec to hex convert 5FBC A924 8239 LDA #'$ leading $ sign 5FBE 20C6B5 8240 JSR CHARO 5FC1 68 8241 PLA 5FC2 20E6BF 8242 JSR _GETNE get number 5FC5 A8 8243 TAY swap for 5FC6 8A 8244 TXA print routine 5FC7 90D7 8245 BCC SI unc, from _GETNE 8246 ; 8247 ; Editor Lomem 8248 ; 5FC9 8249 LOMEMX 5FC9 20EFBF 8250 JSR _GETN get new lomem 5FCC 8E8804 8251 STX SVLOMEM adress 5FCF 8D8904 8252 STA SVLOMEM+1 5FD2 4CD1B0 8253 JMP NEWX clear all pointers 8254 ; 8255 @ =AFD5 M8258 :BR0 .= *+%1 żERROR - 32,BAD PARAMETER 5FD5 8259 *= ROMF+$0FFF 5FFF 00 8260 .BYTE BANK1&$0F 8261 ; 8262 BANK BANK2 =0001 8269 .IF EPROM =C000 8270 .SET 6,-[$A000-[@@BASE+$3000]] 8271 .ENDIF 8272 .INCLUDE #D:BANKE0 8273 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE" 8274 .PAGE "OPERATOR ROUTINES" PAGE 148 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINES D:BANKE0 8275 ; 8276 ; Operator routines 8277 ; Special Note: All ops' addresses 8278 ; are all on the same page. 8279 ; =0000 8280 .IF [ >@XXOR]<>[ >@XREF] 8281 .ERROR "OPERATORS NOT ON SAME PAGE" 8282 .ENDIF 8283 ; 6000 207CAC 8284 CMP JSR OPOP compare 6003 C5D5 8285 CMP FR0+1 6005 9004 8286 BCC :CM 6007 D002 8287 BNE :CM 6009 E4D4 8288 CPX FR0 600B 60 8289 :CM RTS 8290 ; 600C 207CAC 8291 @XXOR JSR OPOP logical eor 600F 45D5 8292 EOR FR0+1 6011 85D5 8293 STA FR0+1 6013 8A 8294 TXA 6014 45D4 8295 EOR FR0 6016 85D4 8296 STA FR0 6018 60 8297 RTS 8298 ; 6019 207CAC 8299 @XORB JSR OPOP logical or 601C 05D5 8300 ORA FR0+1 601E 85D5 8301 STA FR0+1 6020 8A 8302 TXA 6021 05D4 8303 ORA FR0 6023 85D4 8304 STA FR0 6025 60 8305 @XOLP RTS left paren [ 8306 ; 6026 207CAC 8307 @XAND JSR OPOP logical and 6029 25D5 8308 AND FR0+1 602B 85D5 8309 STA FR0+1 602D 8A 8310 TXA 602E 25D4 8311 AND FR0 6030 85D4 8312 STA FR0 6032 60 8313 RTS 8314 ; 6033 A5D5 8315 @XHIGH LDA FR0+1 do high byte 6035 85D4 8316 STA FR0 8317 ; 6037 A900 8318 @XLOW LDA #0 do low byte 6039 85D5 8319 STA FR0+1 603B 60 8320 RTS 8321 ; 603C A4E4 8322 @XORP LDY APTR right paren ] 603E 68 8323 PLA 603F 68 8324 PLA 6040 BEC801 8325 LDX ARGOPS,Y 6043 4C2EAC 8326 JMP XS7 8327 .PAGE PAGE 149 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINES D:BANKE0 8328 ; 6046 68 8329 @XELP PLA left "(" special 6047 68 8330 PLA pop return addr 6048 A5D5 8331 LDA FR0+1 this is param # 604A A6D4 8332 LDX FR0 604C 20EAAC 8333 JSR VALUEP get actual value 604F 85D5 8334 STA FR0+1 return to FR0 6051 86D4 8335 STX FR0 6053 4CF3AB 8336 JMP XS9 and continue 8337 ; 6056 4C16A1 8338 @XTIMES JMP :XTIMES 6059 4C47A1 8339 @XDIV JMP :XDIV 605C 4C3BA1 8340 @XMOD JMP :XMOD 8341 ; 605F 8342 @XPLUS ; addition 605F 207CAC 8343 JSR OPOP 6062 A8 8344 TAY 6063 8A 8345 TXA 6064 18 8346 CLC 6065 65D4 8347 ADC FR0 6067 85D4 8348 STA FR0 6069 98 8349 TYA 606A 65D5 8350 ADC FR0+1 606C 85D5 8351 STA FR0+1 606E 60 8352 RTS 8353 ; 606F A900 8354 @XUM LDA #0 unary minus 6071 A8 8355 TAY A & Y =0 6072 F005 8356 BEQ :JSB join subtract 8357 ; 6074 207CAC 8358 @XMINUS JSR OPOP subtraction 6077 A8 8359 TAY 6078 8A 8360 TXA 8361 ; 6079 38 8362 :JSB SEC 607A E5D4 8363 SBC FR0 607C 85D4 8364 STA FR0 607E 98 8365 TYA 607F E5D5 8366 SBC FR0+1 6081 85D5 8367 STA FR0+1 6083 60 8368 RTS 8369 .PAGE PAGE 150 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINES D:BANKE0 8370 ; 6084 2074A0 8371 @XCEQ JSR @XMINUS comp = 6087 A5D5 8372 @XNOT LDA FR0+1 not 6089 05D4 8373 ORA FR0 608B D010 8374 BNE FALSER 8375 ; 608D A201 8376 TRUER LDX #1 push TRUE =A08F 8377 :BR0 .= * used 1 608F A900 8378 LDA #0 =A091 8379 :BR1 .= * used 1 6091 85D5 8380 STA FR0+1 6093 86D4 8381 STX FR0 6095 60 8382 RTS 8383 ; 6096 2074A0 8384 @XNEQ JSR @XMINUS comp <> 6099 05D4 8385 ORA FR0 high (FR0+1) in A 609B D0F0 8386 BNE TRUER 8387 ; fall to FALSER 609D A200 8388 FALSER LDX #0 push FALSE 609F F0EE 8389 BEQ :BR0 8390 ; 60A1 A003 8391 @XDEF LDY #3 tst label def 60A3 B193 8392 LDA (SRCADR),Y 60A5 2901 8393 AND #1 60A7 4901 8394 EOR #1 60A9 AA 8395 TAX 60AA A900 8396 LDA #0 60AC 85A0 8397 STA RES reset resolved 60AE F0E1 8398 BEQ :BR1 8399 ; 60B0 2000A0 8400 @XGRT JSR CMP greater than 60B3 F0E8 8401 BEQ FALSER 60B5 90E6 8402 BCC FALSER 60B7 B0D4 8403 BCS TRUER 8404 ; 60B9 2000A0 8405 @XLS JSR CMP less than 60BC 90CF 8406 BCC TRUER 60BE B0DD 8407 BCS FALSER 8408 ; 60C0 2000A0 8409 @XLEQ JSR CMP less or equ 60C3 F0C8 8410 BEQ TRUER 60C5 90C6 8411 BCC TRUER 60C7 B0D4 8412 BCS FALSER 8413 ; 60C9 207CAC 8414 @XBAND JSR OPOP basic and 60CC 86E0 8415 STX FR1 low 60CE 05E0 8416 ORA FR1 low OR high (in A) 60D0 F0CB 8417 BEQ FALSER 60D2 D009 8418 BNE :XBJ check high 8419 ; 60D4 207CAC 8420 @XBOR JSR OPOP basic Or 60D7 86E0 8421 STX FR1 60D9 05E0 8422 ORA FR1 60DB D0B0 8423 BNE TRUER 60DD A5D4 8424 :XBJ LDA FR0 60DF 05D5 8425 ORA FR0+1 60E1 D0AA 8426 BNE TRUER 60E3 F0B8 8427 BEQ FALSER 8428 ; 60E5 2000A0 8429 @XGEQ JSR CMP greater or equ 60E8 90B3 8430 BCC FALSER 60EA B0A1 8431 BCS TRUER 8432 ; 60EC A003 8433 @XREF LDY #3 label reference 60EE A200 8434 LDX #0 60F0 24A2 8435 BIT EAF get pass # 60F2 700F 8436 BVS @2REF go if pass 2 60F4 A5D2 8437 LDA MPF check Mini 2 60F6 D00B 8438 BNE @2REF yup 60F8 24A0 8439 BIT RES test referenced 60FA 86A0 8440 STX RES inhibit undefined 60FC 3005 8441 BMI @2REF not referenced PAGE 151 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINES D:BANKE0 60FE 20E7A1 8442 JSR :S3BY save 3 bytes 6101 D08A 8443 BNE TRUER unc 8444 ; 6103 B193 8445 @2REF LDA (SRCADR),Y see if ref 6105 86A0 8446 STX RES inhibit undefined 6107 2910 8447 AND #$10 in pass 1 6109 D082 8448 BNE TRUER yup 610B F090 8449 BEQ FALSER 8450 ; 8451 .PAGE PAGE 152 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINES D:BANKE0 610D A900 8452 SEMD LDA #0 set up for 610F 85D6 8453 STA FR0+2 mult & div 6111 85D7 8454 STA FR0+3 6113 A010 8455 LDY #16 6115 60 8456 RTS 8457 ; 6116 207CAC 8458 :XTIMES JSR OPOP multiply 6119 85E1 8459 STA FR1+1 611B 86E0 8460 STX FR1 611D 200DA1 8461 JSR SEMD =A120 8462 :BR0 .= * used 2 6120 46D7 8463 LSR FR0+3 6122 66D6 8464 ROR FR0+2 6124 66D5 8465 ROR FR0+1 6126 66D4 8466 ROR FR0 6128 88 8467 DEY 6129 304B 8468 BMI :DV9 all done 612B 90F3 8469 BCC :BR0 612D 18 8470 CLC 612E A2FE 8471 LDX #-2 =A130 8472 :BR1 .= * used 1 6130 B5E2 8473 LDA FR1+2,X 6132 75D8 8474 ADC FR0+4,X 6134 95D8 8475 STA FR0+4,X 6136 E8 8476 INX 6137 D0F7 8477 BNE :BR1 6139 F0E5 8478 BEQ :BR0 8479 ; 613B 2047A1 8480 :XMOD JSR :XDIV modulo 613E A5D6 8481 LDA FR0+2 remainder is result 6140 85D4 8482 STA FR0 6142 A5D7 8483 LDA FR0+3 6144 85D5 8484 STA FR0+1 6146 60 8485 RTS 8486 ; 6147 A5D4 8487 :XDIV LDA FR0 division 6149 85E0 8488 STA FR1 614B A5D5 8489 LDA FR0+1 614D 85E1 8490 STA FR1+1 614F 207CAC 8491 JSR OPOP 6152 85D5 8492 STA FR0+1 6154 86D4 8493 STX FR0 6156 200DA1 8494 JSR SEMD =A159 8495 :BR0 .= * used 1 6159 06D4 8496 ASL FR0 615B 26D5 8497 ROL FR0+1 615D 26D6 8498 ROL FR0+2 615F 26D7 8499 ROL FR0+3 6161 38 8500 SEC 6162 A5D6 8501 LDA FR0+2 6164 E5E0 8502 SBC FR1 6166 AA 8503 TAX 6167 A5D7 8504 LDA FR0+3 6169 E5E1 8505 SBC FR1+1 616B 9006 8506 BCC :DV2 616D 85D7 8507 STA FR0+3 616F 86D6 8508 STX FR0+2 6171 E6D4 8509 INC FR0 6173 88 8510 :DV2 DEY 6174 D0E3 8511 BNE :BR0 6176 60 8512 :DV9 RTS 8513 ; 8514 .PAGE "OPERATOR PRECEDANCE TABLES" PAGE 153 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR PRECEDANCE TABLES D:BANKE0 8515 ; 8516 ; Going on stack precedance 8517 ; 6177 8518 ONPREC 6177 09 8519 .BYTE $09 ; + 6178 09 8520 .BYTE $09 ; - 6179 0A 8521 .BYTE $0A ; * 617A 0A 8522 .BYTE $0A ; / 617B 08 8523 .BYTE $08 ; & 617C 0F 8524 .BYTE $0F ; operator "(" 617D 07 8525 .BYTE $07 ; = 617E 07 8526 .BYTE $07 ; <= 617F 07 8527 .BYTE $07 ; >= 6180 07 8528 .BYTE $07 ; <> 6181 07 8529 .BYTE $07 ; > 6182 07 8530 .BYTE $07 ; < 6183 0F 8531 .BYTE $0F ; - unary 6184 0F 8532 .BYTE $0F ; [ 6185 04 8533 .BYTE $04 ; ] 6186 000000 8534 .BYTE $00,$00,$00 6189 08 8535 .BYTE $08 ; ! 618A 08 8536 .BYTE $08 ; ^ 618B 00 8537 .BYTE $00 618C 0B 8538 .BYTE $0B ; \ 8539 ; 8540 ; Addressing Mode Type by Terimator 8541 ; The next 8 bytes are an inbedded 8542 ; table, only .REF is used but not 8543 ; needed 8544 ; 618D 03 8545 ENDM .BYTE 3 ; ,X) 1 free 618E 02 8546 .BYTE 2 ; ),Y | 618F 06 8547 .BYTE 6 ; ,Y | 6190 05 8548 .BYTE 5 ; ,X | 6191 04 8549 .BYTE 4 ; ) | 6192 07 8550 .BYTE 7 ; @COMMENT | 6193 07 8551 .BYTE 7 ; @EOL 7 free 6194 FB 8552 .BYTE $FB ; @CMA .REF 8553 ; 8554 ; 6195 0F 8555 .BYTE $0F ; .DEF 6196 0F 8556 .BYTE $0F ; .NOT 6197 06 8557 .BYTE $06 ; .AND 6198 05 8558 .BYTE $05 ; .OR 6199 0F 8559 .BYTE $0F ; < low byte 619A 0F 8560 .BYTE $0F ; > high byte 619B 00000000 8561 .BYTE 0,0,0,0,0,0,0,0,0 619F 00000000 61A3 00 8562 ; 8563 .PAGE PAGE 154 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR PRECEDANCE TABLES D:BANKE0 8564 ; 8565 ; Comming off precedance 8566 ; 61A4 8567 OFPREC 61A4 09 8568 .BYTE $09 ; + 61A5 09 8569 .BYTE $09 ; - 61A6 0A 8570 .BYTE $0A ; * 61A7 0A 8571 .BYTE $0A ; / 61A8 08 8572 .BYTE $08 ; & 61A9 01 8573 .BYTE $01 ; operator "(" 61AA 07 8574 .BYTE $07 ; = 61AB 07 8575 .BYTE $07 ; <= 61AC 07 8576 .BYTE $07 ; >= 61AD 07 8577 .BYTE $07 ; <> 61AE 07 8578 .BYTE $07 ; > 61AF 07 8579 .BYTE $07 ; < 61B0 0D 8580 .BYTE $0D ; - unary 61B1 02 8581 .BYTE $02 ; [ 61B2 0E 8582 .BYTE $0E ; ] 8583 ; 8584 ; String displ table (3 bytes) 8585 ; 61B3 0050A0 8586 :MSTB .BYTE $00,STRMAX,STRMAX*2 8587 ; 61B6 08 8588 .BYTE $08 ; ! 61B7 08 8589 .BYTE $08 ; ^ 61B8 00 8590 .BYTE $00 61B9 0B 8591 .BYTE $0B ; \ 8592 ; 8593 ; Option mask table 8594 ; The next 8 bytes are an inbedded 8595 ; table, only .REF is used but not 8596 ; needed 8597 ; 61BA 40 8598 OPTTAB .BYTE $40 ; obj 1 free 61BB 20 8599 .BYTE $20 ; err | 61BC 01 8600 .BYTE $01 ; eject | 61BD 80 8601 .BYTE $80 ; list | 61BE 02 8602 .BYTE $02 ; Xref | 61BF 04 8603 .BYTE $04 ; mlist | 61C0 08 8604 .BYTE $08 ; clist 7 free 61C1 10 8605 .BYTE $10 ; num .REF 8606 ; 8607 ; 61C2 02 8608 .BYTE $02 ; .DEF 61C3 0D 8609 .BYTE $0D ; .NOT 61C4 06 8610 .BYTE $06 ; .AND 61C5 05 8611 .BYTE $05 ; .OR 61C6 02 8612 .BYTE $02 ; < low byte 61C7 04 8613 .BYTE $04 ; > high byte 61C8 00000000 8614 .BYTE 0,0,0,0,0,0,0,0,0 61CC 00000000 61D0 00 8615 ; 8616 .PAGE "OPERATOR ROUTINE TABLE" PAGE 155 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE OPERATOR ROUTINE TABLE D:BANKE0 8617 ; 8618 ; Operator tab; low bytes 8619 ; 61D1 5E 8620 OPERTRL .BYTE <@XPLUS-1 ; + 61D2 73 8621 .BYTE <@XMINUS-1 ; - 61D3 55 8622 .BYTE <@XTIMES-1 ; * 61D4 58 8623 .BYTE <@XDIV-1 ; / 61D5 25 8624 .BYTE <@XAND-1 ; & binary 61D6 45 8625 .BYTE <@XELP-1 ; operator "(" 61D7 83 8626 .BYTE <@XCEQ-1 ; = compare 61D8 BF 8627 .BYTE <@XLEQ-1 ; <= 61D9 E4 8628 .BYTE <@XGEQ-1 ; >= 61DA 95 8629 .BYTE <@XNEQ-1 ; <> 61DB AF 8630 .BYTE <@XGRT-1 ; > 61DC B8 8631 .BYTE <@XLS-1 ; < 61DD 6E 8632 .BYTE <@XUM-1 ; - unary 61DE 24 8633 .BYTE <@XOLP-1 ; [ 61DF 3B 8634 .BYTE <@XORP-1 ; ] 61E0 000000 8635 .BYTE 0,0,0 null entries 61E3 18 8636 .BYTE <@XORB-1 ; ! binary 61E4 0B 8637 .BYTE <@XXOR-1 ; ^ eor 61E5 00 8638 .BYTE 0 ; REF null 61E6 5B 8639 .BYTE <@XMOD-1 ; \ 8640 ; 8641 ; Inbedded routine for .Ref 8642 ; save 3 bytes (7 bytes long) 8643 ; 61E7 A910 8644 :S3BY LDA #$10 show referenced 61E9 1193 8645 ORA (SRCADR),Y 61EB 9193 8646 STA (SRCADR),Y 61ED 60 8647 RTS 8648 ; 61EE EB 8649 .BYTE <@XREF-1 ; .REF 61EF A0 8650 .BYTE <@XDEF-1 ; .DEF 61F0 86 8651 .BYTE <@XNOT-1 ; .NOT 61F1 C8 8652 .BYTE <@XBAND-1 ; .AND 61F2 D3 8653 .BYTE <@XBOR-1 ; .OR 61F3 36 8654 .BYTE <@XLOW-1 ; < low byte 61F4 32 8655 .BYTE <@XHIGH-1 ; > high byte 8656 ; 8657 .PAGE "DIRECTIVE ROUTINE TABLE" PAGE 156 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE DIRECTIVE ROUTINE TABLE D:BANKE0 8658 ; 8659 ; Execute directive tab 8660 ; =A1F5 8661 XDIRTB = * 61F5 14AB 8662 .WORD @@IF-1 61F7 ACAB 8663 .WORD @@ELSE-1 61F9 98AB 8664 .WORD @@ENDIF-1 61FB 16AA 8665 .WORD @@MACRO-1 61FD CCA9 8666 .WORD @@ENDM-1 61FF F7AE 8667 .WORD @@TITLE-1 6201 D5A8 8668 .WORD @@MACROX-1 6203 3AB8 8669 .WORD @@PAGE-1 6205 D2A6 8670 .WORD @@WORD-1 6207 FEAE 8671 .WORD @@ERROR-1 6209 DEA6 8672 .WORD @@BYTE-1 620B DBA6 8673 .WORD @@SBYTE-1 620D D5A6 8674 .WORD @@DBYTE-1 620F 2BA8 8675 .WORD @@END-1 6211 CFA7 8676 .WORD @@OPT-1 6213 40AF 8677 .WORD @@TAB-1 6215 80BA 8678 .WORD @@INCLUDE-1 6217 7DAF 8679 .WORD @@DS-1 6219 90AF 8680 .WORD @@ASTER-1 621B 87AA 8681 .WORD @@EQUAL-1 8682 ; 621D 87A5 8683 .WORD @@BRA-1 621F EBA5 8684 .WORD @@TRB-1,@@TRB-1 6221 EBA5 8685 ; 6223 97A8 8686 .WORD @@FLOAT-1 6225 CEA6 8687 .WORD @@CBYTE-1 6227 85A8 8688 .WORD @@SEMI-1 6229 DFAE 8689 .WORD @@LOCAL-1 622B 39A8 8690 .WORD @@SET-1 622D 90AF 8691 .WORD @@ASTER-1 622F 87AA 8692 .WORD @@EQUAL-1,@@.EQUAL-1 6231 8AAA 6233 A4A6 8693 .WORD @@JSR-1,@@JMP-1 6235 C0A6 8694 ; 8695 .PAGE "ADRESSING FIELD TABLE" PAGE 157 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE ADRESSING FIELD TABLE D:BANKE0 8696 ; 8697 ; Adr field tab 8698 ; 6237 00 8699 FLDTAB .BYTE 0 null 6238 08 8700 .BYTE $08 immediate 6239 10 8701 .BYTE $10 ind,Y 623A 00 8702 .BYTE $00 ind,X 623B 10 8703 .BYTE $10 zp ind 623C 14 8704 .BYTE $14 zp,X 623D 14 8705 .BYTE $14 zp,Y 623E 04 8706 .BYTE $04 zero page 623F 1C 8707 .BYTE $1C abs,X 6240 18 8708 .BYTE $18 abs,Y 6241 0C 8709 .BYTE $0C absolute 8710 ; 6242 08 8711 .BYTE $08 accumulator 6243 00 8712 .BYTE $00 immediate 6244 000000 8713 .BYTE 0,0,0 null (3) 6247 14 8714 .BYTE $14 zp,X 8715 ; Next 2 bytes are 6248 8716 TRB0 ; for TRB & TSB 6248 14 8717 .BYTE $14 zp,Y 6249 04 8718 .BYTE $04 zero page 624A 1C 8719 .BYTE $1C abs,X 624B 1C 8720 .BYTE $1C abs,Y 624C 0C 8721 .BYTE $0C absolute 8722 ; 8723 .PAGE "INSTRUCTION CODE TABLE" PAGE 158 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE INSTRUCTION CODE TABLE D:BANKE0 8724 ; 8725 ; Op tab 8726 ; 8727 ; instr & type 624D C6 8728 @@CD .BYTE $C6 dec 2 624E E6 8729 .BYTE $E6 inc 2 624F A6 8730 .BYTE $A6 ldx 2 6250 A4 8731 .BYTE $A4 ldy 2 6251 82 8732 .BYTE @@SX stx 1 6252 80 8733 .BYTE @@SY sty 1 6253 E4 8734 .BYTE $E4 cpx 2 6254 C4 8735 .BYTE $C4 cpy 2 6255 20 8736 .BYTE $20 bit 1 8737 ; 8738 ; Implied 8739 ; 6256 00 8740 .BYTE $00 brk 6257 18 8741 .BYTE $18 clc 6258 D8 8742 .BYTE $D8 cld 6259 58 8743 .BYTE $58 cli 625A B8 8744 .BYTE $B8 clv 625B CA 8745 .BYTE $CA dex 625C 88 8746 .BYTE $88 dey 625D E8 8747 .BYTE $E8 inx 625E C8 8748 .BYTE $C8 iny 625F EA 8749 .BYTE $EA nop 6260 48 8750 .BYTE $48 pha 6261 08 8751 .BYTE $08 php 6262 68 8752 .BYTE $68 pla 6263 28 8753 .BYTE $28 plp 6264 40 8754 .BYTE $40 rti 6265 60 8755 .BYTE $60 rts 6266 38 8756 .BYTE $38 sec 6267 F8 8757 .BYTE $F8 sed 6268 78 8758 .BYTE $78 sei 6269 AA 8759 .BYTE $AA tax 626A A8 8760 .BYTE $A8 tay 626B BA 8761 .BYTE $BA tsx 626C 8A 8762 .BYTE $8A txa 626D 9A 8763 .BYTE $9A txs 626E 98 8764 .BYTE $98 tya 8765 ; 8766 ; Branch 8767 ; 626F 90 8768 .BYTE $90 bcc 6270 B0 8769 .BYTE $B0 bcs 6271 F0 8770 .BYTE $F0 beq 6272 30 8771 .BYTE $30 bmi 6273 D0 8772 .BYTE $D0 bne 6274 10 8773 .BYTE $10 bpl 6275 50 8774 .BYTE $50 bvc 6276 70 8775 .BYTE $70 bvs 8776 ; 8777 ; Multi 8778 ; 6277 01 8779 .BYTE $01 ora 1 6278 21 8780 .BYTE $21 and 1 6279 41 8781 .BYTE $41 eor 1 627A 61 8782 .BYTE $61 adc 1 627B 81 8783 .BYTE $81 sta 1 627C A1 8784 .BYTE $A1 lda 1 627D C1 8785 .BYTE $C1 cmp 1 627E E1 8786 .BYTE $E1 sbc 1 627F 06 8787 .BYTE $06 asl 2 6280 26 8788 .BYTE $26 rol 2 6281 46 8789 .BYTE $46 lsr 2 6282 66 8790 .BYTE $66 ror 2 8791 ; 6283 FF 8792 .BYTE -1 R65C02 instrs 6284 80 8793 .BYTE $80 bra (stz slot) 6285 3A 8794 .BYTE $3A dea 6286 1A 8795 .BYTE $1A ina PAGE 159 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKE INSTRUCTION CODE TABLE D:BANKE0 6287 DA 8796 .BYTE $DA phx 6288 5A 8797 .BYTE $5A phy 6289 FA 8798 .BYTE $FA plx 628A 7A 8799 .BYTE $7A ply 8800 ; 8801 ; Instruction Length Table 8802 ; 628B 01020202 8803 LENTAB .BYTE 1,2,2,2 628F 02020202 8804 .BYTE 2,2,2,2 6293 030303 8805 .BYTE 3,3,3 8806 ; 8807 ; 8808 .INCLUDE #D:BANKB0 8809 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB" 8810 .PAGE "EXECUTE ASSEMBLER" PAGE 160 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB EXECUTE ASSEMBLER D:BANKB0 8811 ; Assembler Portion 6296 A2C7 8812 _ASMX LDX #TOSA-1 set ASM stack 6298 9A 8813 TXS 6299 206AA3 8814 JSR ASMINIT initialize 629C A980 8815 LDA #$80 set 1st pass 629E 85C1 8816 STA REAL master pass cntrl 62A0 85A2 8817 STA EAF internal pass # 8818 ; 62A2 208AB5 8819 JSR GTOKEL test @EOL 62A5 F05F 8820 BEQ AX3 yup, all set 62A7 C93B 8821 CMP #@LCMA a comma? 62A9 F013 8822 BEQ AX1 yup, check list device 8823 ; 8824 ; *** SOURCE FILE 62AB 20EBB3 8825 JSR HFI open for read =0000 8826 .IF [ >ASMFM]<>[ >ASMFI] 8827 LDY # >ASMFM 8828 .ENDIF 62AE A24F 8829 LDX # ASMFI] move string for list 62B0 20BEBA 8830 JSR HSTR 8831 ; 62B3 205DAF 8832 JSR VALIDF test check bytes 62B6 2084BB 8833 JSR DONOTE 'Note' start 62B9 208AB5 8834 JSR GTOKEL test @EOL 62BC F048 8835 BEQ AX3 yup, go assemble 8836 ; 62BE 2090B5 8837 AX1 JSR GTOKE next token 62C1 C93B 8838 CMP #@LCMA a comma? 62C3 F012 8839 BEQ AX2 yup, check object device 8840 ; 8841 ; *** LIST FILE 62C5 C913 8842 CMP #@MINUS inhibit list? 62C7 D006 8843 BNE ?OPN must be a "#" 62C9 A980 8844 LDA #$80 master list control 62CB 85FB 8845 STA KLIST 62CD D003 8846 BNE ?IL unc 62CF 20D5B3 8847 ?OPN JSR OPNOUT use list dev 62D2 208AB5 8848 ?IL JSR GTOKEL test @EOL 62D5 F02F 8849 BEQ AX3 yup, all set 8850 ; 62D7 2090B5 8851 AX2 JSR GTOKE next token 62DA C93B 8852 CMP #@LCMA comma? 62DC F00B 8853 BEQ AXX do cross reference 8854 ; 8855 ; *** OBJECT FILE 62DE 20F5B3 8856 JSR FOBJ use obj dev 8857 ; out binary file 62E1 2005B6 8858 JSR OUTFF check bytes 62E4 208AB5 8859 JSR GTOKEL test @EOL 62E7 F01D 8860 BEQ AX3 all set 8861 ; 8862 ; *** X-REF FILE 62E9 E692 8863 AXX INC COX skip # sign 62EB 20B2A9 8864 JSR MSTRLITR filespec in table & Lbuff 62EE 20DDB3 8865 JSR FREF now, CIO stuff 62F1 A58A 8866 LDA ASMRAM+2 set initial addr 62F3 A68B 8867 LDX ASMRAM+3 62F5 85F0 8868 STA BUFFERX 62F7 85BF 8869 STA XREFBUFI 62F9 86F1 8870 STX BUFFERX+1 62FB 86C0 8871 STX XREFBUFI+1 8872 ; 62FD A28A 8873 LDX #ASMRAM+2 now, allocate it 62FF A903 8874 LDA # >BUFSIZE/2 6301 A000 8875 LDY #0 6303 2046B4 8876 JSR EXPAND 8877 ; 8878 .PAGE "FIRST LEVEL ASSEMBLY" PAGE 161 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB FIRST LEVEL ASSEMBLY D:BANKB0 8879 ; 6306 A950 8880 AX3 LDA #$40+$10 no obj, no num 6308 A4D3 8881 LDY OBJDV 630A F002 8882 BEQ ?W4 630C A910 8883 LDA #$10 no num 630E 05FB 8884 ?W4 ORA KLIST and master list 6310 85FC 8885 STA OPTFLAG 8886 ; 8887 ; Main loop 8888 ; 6312 201CA4 8889 ASML JSR ASMLINE assemble a line 6315 2021BB 8890 JSR WRTXREF handle X-Refs 6318 A5CA 8891 LDA EOFFLAG end of pass? 631A 10F6 8892 BPL ASML nope 8893 ; 631C A5C2 8894 LDA SXREF pop X-Ref? 631E F002 8895 BEQ ?RX no 6320 85A8 8896 STA REFDV restore X-Ref 8897 ; 6322 06C1 8898 ?RX ASL REAL done Assembling? 6324 D00E 8899 BNE ASME yup 6326 A940 8900 LDA #$40 no, set pass 2 6328 85C1 8901 STA REAL 632A 85A2 8902 STA EAF 632C 20D3A3 8903 JSR REASM warm init 8904 ; 8905 ; Out title, page... 8906 ; 632F 2013B8 8907 JSR PPASS 6332 F0D2 8908 BEQ AX3 unc, go do it! 8909 ; 8910 .PAGE "TERMINATE ASSEMBLY" PAGE 162 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB TERMINATE ASSEMBLY D:BANKB0 8911 ; 6334 8912 ASME ; E X I T 8913 ; 6334 A5A8 8914 LDA REFDV doing X-Ref? 6336 F023 8915 BEQ ASMF no 6338 A983 8916 LDA #RFEOF eof marker 633A 20D6BA 8917 JSR XROUT 633D 20EDBA 8918 JSR RFWRITE empty buffer 6340 A5A8 8919 LDA REFDV 6342 20EDB6 8920 JSR CLOSEI close X-Ref dev 6345 A003 8921 LDY #3 re-open as ENTDV 6347 A904 8922 LDA #4 6349 84A6 8923 STY ENTDV 634B 2023B6 8924 JSR CIO 634E 18 8925 CLC form filespec addr 634F A58E 8926 LDA SMBLTP 6351 6906 8927 ADC #6 6353 A8 8928 TAY 6354 A58F 8929 LDA SMBLTP+1 6356 6900 8930 ADC #0 6358 203CB6 8931 JSR IO4.S do open 8932 ; 635B 20A9BB 8933 ASMF JSR @@SYMBOL do symbol table 635E 8934 NULLX 635E 20F8B6 8935 ASMEXIT JSR CLSALL close devices 6361 2024BE 8936 JSR SETTAB0 reset list tabs 6364 20F1B0 8937 JSR RESET reset pointers 6367 4C4AB0 8938 JMP PRMPT return to editor 8939 ; 8940 .PAGE "INITIALIZE ASSEMBLER" PAGE 163 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB INITIALIZE ASSEMBLER D:BANKB0 636A 20FAB0 8941 ASMINIT JSR RESET1 8942 ; start string space 636D A58A 8943 LDA ASMRAM+2 636F A68B 8944 LDX ASMRAM+3 6371 85EE 8945 STA STRINGS 6373 86EF 8946 STX STRINGS+1 8947 ; set IO buffer addr 6375 18 8948 CLC 6376 69F0 8949 ADC # STRMAX*3 6386 85ED 8957 STA BUFFERS+1 6388 8D9304 8958 STA BUFFTAB+1 638B 8D9704 8959 STA BUFFTAB+5 8960 ; buffersav addr 638E 18 8961 CLC 638F 6906 8962 ADC # >BUFSIZE 6391 8D9504 8963 STA BUFFTAB+3 8964 ; now, allocate area 6394 A90C 8965 LDA # >[BUFSIZE*2]+[STRMAX*3] 6396 A0F0 8966 LDY # <[BUFSIZE*2]+[STRMAX*3] 6398 A28A 8967 LDX #ASMRAM+2 639A 2046B4 8968 JSR EXPAND 8969 ; 639D A90C 8970 LDA #TOPFORM init Top of form 639F 8D9B04 8971 STA TOPFC 63A2 A950 8972 LDA #80 right margin 63A4 8D9A04 8973 STA RIGHTMAR 63A7 A93A 8974 LDA #66-8 lines/page 8975 ; (physical size-heading) 63A9 8D9C04 8976 STA FORMSZ 63AC A000 8977 LDY #0 63AE 84A7 8978 STY LSTDV clr all dev 63B0 84A6 8979 STY ENTDV 63B2 84D3 8980 STY OBJDV 63B4 84A8 8981 STY REFDV 63B6 8C9904 8982 STY LEFTMAR left margin 63B9 84FB 8983 STY KLIST master list on 8984 ; 63BB A9FF 8985 LDA #-1 63BD A237 8986 LDX #55 clear label pointers 63BF 9DFC04 8987 :CST STA SPOINTER,X 63C2 CA 8988 DEX 63C3 10FA 8989 BPL :CST 8990 ; 63C5 A9A0 8991 LDA #$A0 63C7 8D5405 8992 STA ASMFM main file list 63CA 91EE 8993 STA (STRINGS),Y TITLE string (Y=0) 8994 ; Expand Macro stack 63CC A901 8995 LDA #1 by 1 page (Y=0) 63CE A28C 8996 LDX #STACK+2 63D0 2046B4 8997 JSR EXPAND 8998 ; 63D3 A001 8999 REASM LDY #1 init to zero 63D5 A900 9000 LDA #0 parameters on stack 63D7 918A 9001 STA (STACK),Y 63D9 88 9002 DEY 63DA 918A 9003 STA (STACK),Y 9004 ; 63DC A201 9005 LDX #1 63DE 95AD 9006 :CCL STA ASMPC,X pc 63E0 9D9E04 9007 STA OFFSET,X Object offset 63E3 95F9 9008 STA XREFSZ,X X-Ref file size 63E5 95CD 9009 STA PAGENUM,X set pg # to 0 63E7 95BA 9010 STA BYTCNT,X byte count 63E9 95DD 9011 STA LASTL,X last line number =0001 9012 .IF XRINDX=[SXREF+1] PAGE 164 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB INITIALIZE ASSEMBLER D:BANKB0 63EB 94C2 9013 STY SXREF,X 9014 .ENDIF =0001 9015 .IF EOFFLAG=[PCDEF+1] 63ED 94C9 9016 STY PCDEF,X 9017 .ENDIF =0001 9018 .IF EIX=[EPF+1] 63EF 94A4 9019 STY EPF,X clr err indx 9020 .ENDIF =0001 9021 .IF LOCALIX=[ASMLINO+2] 63F1 94C7 9022 STY ASMLINO+1,X auto-num 9023 .ENDIF 63F3 CA 9024 DEX 63F4 10E8 9025 BPL :CCL 63F6 86CB 9026 STX LINECNT lines on page=-1 9027 ; Y =0 =0000 9028 .IF XRINDX<>[SXREF+1] 9029 STY XRINDX X-Ref buff index 9030 STY SXREF no X-Ref hold 9031 .ENDIF =0000 9032 .IF EOFFLAG<>[PCDEF+1] 9033 STY PCDEF pc def flg 9034 STY EOFFLAG clr pass end 9035 .ENDIF =0000 9036 .IF EIX<>[EPF+1] 9037 STY EIX clr err indx 9038 STY EPF v1.100 safety 9039 .ENDIF =0000 9040 .IF LOCALIX<>[ASMLINO+2] 9041 STY LOCALIX first local field 9042 STY ASMLINO+1 ASM auto-num, hi 9043 .ENDIF 63F8 84A1 9044 STY CURAUG macro params 63FA 84D2 9045 STY MPF mini-pass flag 63FC 84B5 9046 STY INMAC in-process macro 63FE 84B1 9047 STY RSTK run-time stk ptr 6400 849E 9048 STY MCRSK macro stk ptr 6402 84DF 9049 STY ERRORS assembly errors! 9050 ; 6404 A9A0 9051 LDA #$A0 6406 A050 9052 LDY #STRMAX 6408 91EE 9053 STA (STRINGS),Y set PAGEP =0001 9054 .IF [STRMAX*2]=$A0 640A A8 9055 TAY 9056 .ELSE 9057 LDY #STRMAX*2 9058 .ENDIF 640B 91EE 9059 STA (STRINGS),Y set USRMESS 640D 8D6805 9060 STA ASMFI include file list 9061 ; 6410 A964 9062 LDA # <100 6412 85C6 9063 STA ASMLINO 6414 A904 9064 LDA #4 6416 8D9804 9065 STA SETBYTE set byte listing 6419 4C24BE 9066 JMP SETTAB0 go do Tabs 9067 ; 9068 .PAGE "SECOND LEVEL ASSEMBLY" PAGE 165 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB SECOND LEVEL ASSEMBLY D:BANKB0 9069 ; 9070 ; Assemble a line 9071 ; 641C 20E8A4 9072 ASMLINE JSR GSCL get a line 641F B025 9073 BCS ENPASS br end of pass 6421 A900 9074 LDA #0 6423 8599 9075 STA OBJIX obj index 6425 85C3 9076 STA XRINDX X-Ref index 6427 2090B5 9077 JSR GTOKE 642A F059 9078 BEQ SPP3 error l. 642C 100E 9079 BPL :NLAB 642E 2087AE 9080 JSR LABINT prefix label 9081 ; 6431 A002 9082 LDY #2 ck for label, eol 6433 A592 9083 LDA COX 6435 D180 9084 CMP (EXBUF),Y 6437 B00A 9085 BCS SPP9 yup, go list 6439 2090B5 9086 JSR GTOKE 643C C958 9087 :NLAB CMP #@SCOMMENT comment? 643E F045 9088 BEQ SPP3 yup 6440 4CC6A5 9089 JMP OPCODE handle instr 6443 4CF5B8 9090 SPP9 JMP PUTINBUFF 9091 ; 9092 ; Set end of source status 9093 ; 6446 24CA 9094 ENPASS BIT EOFFLAG who issued eof 6448 5003 9095 BVC TRUE not .include 644A A900 9096 LDA #0 else, clr eof 644C 2C 9097 .BYTE $2C 9098 ; 644D A980 9099 TRUE LDA #$80 set eof stat 644F 85CA 9100 STA EOFFLAG 6451 4CB8AF 9101 JMP WRITE clean buffer 9102 ; 9103 .PAGE "SPECIAL LIST ROUTINES" PAGE 166 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB SPECIAL LIST ROUTINES D:BANKB0 9104 ; 9105 ; List entry for non-code sorce, 9106 ; result in FR0 for SPP2 9107 ; SPP1: label eol/*=/end/macro def 9108 ; SPP2: .IF and =, 9109 ; SPP3: comment/error/command 9110 ; 6454 24C1 9111 SPP1 BIT REAL really pass 1? 6456 3062 9112 BMI SPQ yes 6458 20BBA4 9113 JSR SPP0 see if list 645B D05D 9114 BNE SPQ no 9115 ; Fatal err list entry 645D 208FB9 9116 SPPR JSR PAPC print ASM PC +space 6460 A90B 9117 LDA #11 spaces 6462 D02C 9118 BNE SPCEY now do line 9119 ; 6464 24C1 9120 SPP2 BIT REAL really pass 1? 6466 3052 9121 BMI SPQ yes 6468 20BBA4 9122 JSR SPP0 646B D04D 9123 BNE SPQ as above 646D A904 9124 LDA #4 646F 20B1B5 9125 JSR SPACE do spaces 6472 A93D 9126 LDA #'= do = 6474 20C6B5 9127 JSR CHARO 6477 A4D5 9128 LDY FR0+1 6479 A5D4 9129 LDA FR0 647B 207BB7 9130 JSR HEXW pr result 647E A907 9131 LDA #7 6480 D00E 9132 BNE SPCEY pr 7 spaces 9133 ; 6482 200FB4 9134 SP3ER JSR PUTERR list w/error 6485 24C1 9135 SPP3 BIT REAL really pass 1? 6487 3031 9136 BMI SPQ yes 6489 20BBA4 9137 JSR SPP0 listing? 648C D02C 9138 BNE SPQ 648E A910 9139 LDA #16 sixteen spaces 6490 2099A4 9140 SPCEY JSR SPCEZ ck list Macro 6493 20E4BD 9141 JSR ASMLST list source 6496 4CEFB7 9142 JMP TSTERR ret thru here 9143 ; 9144 ; If in Macro, out an "M" 9145 ; & do left margin 9146 ; 6499 9147 SPCEZ 6499 24B5 9148 SPCEM BIT INMAC in macro? 649B 100B 9149 BPL SPCEU nope 9150 ; 649D 38 9151 SEC 649E E901 9152 SBC #1 pop spaces by 1 64A0 20B1B5 9153 JSR SPACE and do 'em 64A3 A94D 9154 LDA #'M do 'M 64A5 4CC6B5 9155 JMP CHARO ret 64A8 4CB1B5 9156 SPCEU JMP SPACE just pad spaces 9157 ; 64AB A5B5 9158 TSTLSTM LDA INMAC active macro? 64AD F00B 9159 BEQ SPQ nope 64AF A5FC 9160 LDA OPTFLAG 64B1 20E2B7 9161 JSR TSTLSS ck errs 64B4 F004 9162 BEQ SPQ err line, list 64B6 A5FC 9163 LDA OPTFLAG ck macro list opt 64B8 2904 9164 AND #4 64BA 60 9165 SPQ RTS 9166 ; 9167 ; Test for list and eject (hairy!) 9168 ; 64BB 20DAB7 9169 SPP0 JSR TSTLST 64BE D00B 9170 BNE SPD no listing 64C0 20ABA4 9171 JSR TSTLSTM macro list 64C3 D006 9172 BNE SPD 64C5 2000B8 9173 JSR TSTEJ test eject 64C8 20A9B5 9174 JSR LEFTMR check left margin 64CB 08 9175 SPD PHP PAGE 167 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB SPECIAL LIST ROUTINES D:BANKB0 64CC 20ABA4 9176 JSR TSTLSTM macro line # 64CF F003 9177 BEQ SPB 64D1 20D6A4 9178 JSR BCKUP 64D4 28 9179 SPB PLP 64D5 60 9180 RTS 9181 ; 9182 ; Reset ASMLINO 9183 ; 64D6 24A2 9184 BCKUP BIT EAF check pass # 64D8 300A 9185 BMI :B5 still in #1 64DA A001 9186 LDY #1 if: in MacroX & 64DC B180 9187 :B6 LDA (EXBUF),Y opt = NO MLIST 64DE 99C600 9188 STA ASMLINO,Y 64E1 88 9189 DEY reset ASMLINO 64E2 10F8 9190 BPL :B6 64E4 60 9191 :B5 RTS ret <>0 9192 .PAGE "GET LINE FOR ASSEMBLER" PAGE 168 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB GET LINE FOR ASSEMBLER D:BANKB0 9193 ; 9194 ; Get a line from something 9195 ; 64E5 4C5EA3 9196 :ABRK JMP ASMEXIT 64E8 2411 9197 GSCL BIT BRKKEY break key? 64EA 10F9 9198 BPL :ABRK yup 9199 ; 64EC A5A6 9200 LDA ENTDV 64EE F012 9201 BEQ MEMORY 64F0 A000 9202 RETRY LDY #0 set exbuf index 64F2 8492 9203 STY COX 64F4 20A4B9 9204 JSR OBJX3 get line # +offset 64F7 B007 9205 BCS EOOF oops! 64F9 69FD 9206 ADC #-3 sub 3; A =offset 64FB 20A6B9 9207 JSR OBJX 64FE 901F 9208 BCC PUTEOL sucess 6500 38 9209 EOOF SEC 6501 60 9210 RTS 9211 ; 6502 A5B5 9212 MEMORY LDA INMAC inprocess macro? 6504 3005 9213 BMI NOTXT don't test text end 6506 20AEB3 9214 JSR ENDL? 6509 B0F5 9215 BCS EOOF 650B A002 9216 NOTXT LDY #2 650D B186 9217 LDA (STMCUR),Y 650F A8 9218 TAY 6510 88 9219 DEY 6511 B186 9220 MVEL LDA (STMCUR),Y 6513 9180 9221 STA (EXBUF),Y 6515 88 9222 DEY 6516 D0F9 9223 BNE MVEL 6518 B186 9224 LDA (STMCUR),Y 651A 9180 9225 STA (EXBUF),Y 9226 ; 651C 2049B2 9227 JSR GTADOFF update "stmcur" 651F A002 9228 PUTEOL LDY #2 6521 B180 9229 LDA (EXBUF),Y 6523 C8 9230 INY 6524 8492 9231 STY COX 6526 A8 9232 TAY y returns with 6527 A93C 9233 LDA #@EOL line len 6529 9180 9234 STA (EXBUF),Y 652B 24C1 9235 BIT REAL pass 2? 652D 301A 9236 BMI :WK1 no 9237 ; 652F A5FC 9238 LDA OPTFLAG num option 6531 2910 9239 AND #$10 6533 D014 9240 BNE :WK1 no num 9241 ; 6535 84AC 9242 STY BFLD safe temp for Y 6537 A001 9243 LDY #1 6539 B9C600 9244 :WK2 LDA ASMLINO,Y do auto num 653C 9180 9245 STA (EXBUF),Y 653E 88 9246 DEY 653F 10F8 9247 BPL :WK2 6541 E6C6 9248 INC ASMLINO bump line num 6543 D002 9249 BNE :WK0 6545 E6C7 9250 INC ASMLINO+1 9251 ; 6547 A4AC 9252 :WK0 LDY BFLD restore Y 6549 18 9253 :WK1 CLC 654A 60 9254 RTS 9255 .PAGE "ASSEMBLY END MESSAGE" PAGE 169 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB ASSEMBLY END MESSAGE D:BANKB0 9256 ; 9257 ; Print Assembly end message 9258 ; 654B 2000B8 9259 ASMMESS JSR TSTEJ test eject 654E 20FDB7 9260 JSR TSTEJCR blank line 6551 20A9B5 9261 JSR LEFTMR handle left margin 9262 ; 6554 A0B8 9263 LDY # >ERRASM 6556 A2D1 9264 LDX # BYTASM final message 6574 A2E2 9277 LDX # 255 er 6729 200AB4 9548 JSR PUTERRASM asm vector 9549 ; 672C A4FF 9550 INRNGE LDY COMMODE at end? 672E 30CD 9551 BMI EVAL0 y minus if comma 9552 ; 6730 A59F 9553 BYTEND LDA MODFYBYT do modifier 6732 F00E 9554 BEQ NOMOD skip if nothing 6734 A499 9555 LDY OBJIX 6736 18 9556 MODLOOP CLC 6737 B90006 9557 LDA TPOBUF,Y 673A 659F 9558 ADC MODFYBYT 673C 990006 9559 STA TPOBUF,Y 673F 88 9560 DEY PAGE 176 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB BYTE DIRECTIVES D:BANKB2 6740 D0F4 9561 BNE MODLOOP 9562 ; 6742 9563 NOMOD ; *** Exit 6742 4CF5B8 9564 JMP PUTINBUFF 9565 ; 6745 C081 9566 WORDS CPY #$81 two byte process 6747 D004 9567 BNE DWORD it is word 9568 ; 6749 A5D4 9569 LDA FR0 674B A6D5 9570 LDX FR0+1 674D 48 9571 DWORD PHA 674E 8A 9572 TXA 674F 2098BE 9573 JSR OBJECT 6752 68 9574 PLA 6753 2098BE 9575 JSR OBJECT 6756 D0D4 9576 BNE INRNGE unc go test nxt 9577 ; 9578 .PAGE "HANDLE STRING BYTES" PAGE 177 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB HANDLE STRING BYTES D:BANKB2 9579 ; 9580 ; String Bytes, literal 9581 ; 6758 2090B5 9582 STR@ JSR GTOKE str literal 675B 297F 9583 AND #$7F str len 675D AA 9584 TAX 675E 2090B5 9585 JJ8 JSR GTOKE 6761 A4AB 9586 LDY DIRFG screen code? 6763 D003 9587 BNE ?AJ1 6765 20B7A7 9588 JSR ADJUST 6768 2098BE 9589 ?AJ1 JSR OBJECT 676B CA 9590 DEX 676C D0F0 9591 BNE JJ8 676E E692 9592 INC COX past other " 9593 ; 9594 ; Is directive .Cbyte? 9595 ; 6770 24AB 9596 STREND BIT DIRFG .Cbyte? 6772 5005 9597 BVC :NOC nope! 9598 ; Y has index from "object" 9599 ; A has last byte too 6774 4980 9600 EOR #$80 toggle last string char 6776 990106 9601 STA TPOBUF+1,Y and store 9602 ; 6779 201FAD 9603 :NOC JSR ENDEXP? 677C 98 9604 TYA y= - if comma 677D 10B1 9605 BPL BYTEND 677F 4CFDA6 9606 JMP EVAL0 another exp 9607 ; 9608 ; Macro strings %$ 9609 ; 6782 C692 9610 STRM@ DEC COX point back to %$ 6784 20CFAB 9611 JSR XSCAN set SRCADR adr 6787 A200 9612 LDX #0 string ofset 6789 A193 9613 LDA (SRCADR,X) 678B 85AF 9614 STA TEMP 678D A006 9615 LDY #6 678F B193 9616 MMSTR LDA (SRCADR),Y move string 6791 9D8005 9617 STA LBUFF,X to lbuff 6794 E8 9618 INX 6795 C8 9619 INY 6796 C4AF 9620 CPY TEMP done? 6798 90F5 9621 BCC MMSTR move another 9622 ; 679A C99B 9623 CMP #EOL was last EOL? 679C D001 9624 BNE MVOUT no! 9625 ; 679E CA 9626 DEX strip the EOL 679F 86AF 9627 MVOUT STX TEMP save length 67A1 A200 9628 LDX #0 67A3 BD8005 9629 ?MOB LDA LBUFF,X get the byte 67A6 A4AB 9630 LDY DIRFG a screen byte? 67A8 D003 9631 BNE ?AJ2 no 67AA 20B7A7 9632 JSR ADJUST do screen code 67AD 2098BE 9633 ?AJ2 JSR OBJECT out it 67B0 E8 9634 INX 67B1 E4AF 9635 CPX TEMP done? 67B3 90EE 9636 BCC ?MOB no 67B5 B0B9 9637 BCS STREND yup, unc 9638 ; 9639 .PAGE "DO SCREEN CONVERSION" PAGE 178 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DO SCREEN CONVERSION D:BANKB2 9640 ; 9641 ; Adjust ASCII to ATARI screen 9642 ; 67B7 9643 ADJUST 67B7 A8 9644 TAY set stat 67B8 08 9645 PHP save stat 67B9 297F 9646 AND #$7F 67BB C960 9647 CMP #'a-1 67BD B00B 9648 BCS F01 67BF C920 9649 CMP #$20 space 67C1 9005 9650 BCC F00 67C3 E920 9651 SBC #$20 67C5 4CCAA7 9652 JMP F01 67C8 6940 9653 F00 ADC #$40 67CA 28 9654 F01 PLP get stat 67CB 1002 9655 BPL F02 67CD 0980 9656 ORA #$80 67CF 60 9657 F02 RTS 9658 ; 9659 .INCLUDE #D:BANKB3 9660 .PAGE "DIRECTIVE .OPT" PAGE 179 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .OPT D:BANKB3 9661 ; 9662 ; Directive opt 9663 ; 67D0 2090B5 9664 @@OPT JSR GTOKE 67D3 C945 9665 CMP #@NO negate option? 67D5 F02A 9666 BEQ OFF@ 67D7 C94A 9667 CMP #@WAIT really X-Ref 67D9 D006 9668 BNE :OT 67DB A6C2 9669 LDX SXREF 67DD F013 9670 BEQ :OT2 nothing to restore 67DF 86A8 9671 STX REFDV 9672 ; 67E1 C946 9673 :OT CMP #@OBJ object? 67E3 D005 9674 BNE :OT1 67E5 48 9675 PHA 67E6 20EEAF 9676 JSR SETOBUF set obj buff 67E9 68 9677 PLA 67EA C947 9678 :OT1 CMP #@ERR err? 67EC D004 9679 BNE :OT2 67EE A000 9680 LDY #0 clr err indx 67F0 84A5 9681 STY EIX 67F2 A8 9682 :OT2 TAY 67F3 B974A1 9683 LDA OPTTAB-@OBJ,Y 67F6 49FF 9684 EOR #$FF 67F8 25FC 9685 AND OPTFLAG 67FA 05FB 9686 ORA KLIST master list control 67FC 85FC 9687 STA OPTFLAG 67FE 4C23A8 9688 JMP :OT4 9689 ; 6801 2090B5 9690 OFF@ JSR GTOKE turn-off option 6804 C94A 9691 CMP #@WAIT really X-Ref 6806 D00A 9692 BNE OQT 9693 ; 6808 A6A8 9694 LDX REFDV save X-Ref device 680A F006 9695 BEQ OQT don't over write 680C 86C2 9696 STX SXREF 680E A200 9697 LDX #0 and inhibit X-Refs 6810 86A8 9698 STX REFDV 9699 ; 6812 C946 9700 OQT CMP #@OBJ object? 6814 D005 9701 BNE :OT3 6816 48 9702 PHA 6817 20B8AF 9703 JSR WRITE write cur buf 681A 68 9704 PLA 681B A8 9705 :OT3 TAY 681C B974A1 9706 LDA OPTTAB-@OBJ,Y 681F 05FC 9707 ORA OPTFLAG 6821 85FC 9708 STA OPTFLAG 6823 2090B5 9709 :OT4 JSR GTOKE get nxt 6826 C93D 9710 CMP #@CMA another option? 6828 F0A6 9711 BEQ @@OPT yup 682A D00B 9712 BNE :Z5 unc, go list 9713 ; 9714 .PAGE "DIRECTIVE .END, .SET and ;" PAGE 180 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .END, .SET and ; D:BANKB3 9715 ; 9716 ; Directive end 9717 ; 682C A5A6 9718 @@END LDA ENTDV get dev 682E D007 9719 BNE :Z5 ignore if dev 6830 20B8AF 9720 JSR WRITE out buffer 6833 A980 9721 LDA #$80 6835 85CA 9722 STA EOFFLAG set eof 6837 4C54A4 9723 :Z5 JMP SPP1 9724 ; 9725 ; Set assembler system variable 9726 ; 683A 20B8AF 9727 @@SET JSR WRITE for .SET 6,exp 683D 20CFAB 9728 JSR XSCAN get ID number 6840 8A 9729 TXA 6841 C907 9730 CMP #SYSMAX illegal? 6843 9005 9731 BCC :SYS0 nope 6845 A91B 9732 LDA #27 invalid .SET 6847 4C82A4 9733 JMP SP3ER 9734 ; 684A 48 9735 :SYS0 PHA save for later 684B E692 9736 INC COX skip comma 684D 20CFAB 9737 JSR XSCAN get set value 6850 68 9738 PLA get index 9739 ; 6851 AA 9740 TAX save sys # 6852 A5D4 9741 LDA FR0 get para 2 6854 E001 9742 CPX #1 6856 F017 9743 BEQ SYSMAR left margin, SET 1 6858 900C 9744 BCC SYSBYTE if SET 0 685A E004 9745 CPX #4 page size? 685C D013 9746 BNE :SYS1 if not 9747 ; form size, SET 4 685E E908 9748 SBC #8 cs 6860 C914 9749 CMP #20 must be >20 6862 B00D 9750 BCS :SYS1 ok 6864 901D 9751 BCC :SYS3 9752 ; 6866 A8 9753 SYSBYTE TAY byte format 6867 F004 9754 BEQ :SYS2 6869 C905 9755 CMP #5 686B 9004 9756 BCC :SYS1 686D A904 9757 :SYS2 LDA #4 9758 ; 686F 291F 9759 SYSMAR AND #$1F left margin 6871 9760 :SYS1 ; just store SETs 6871 9D9804 9761 STA SYSSET,X 6874 E006 9762 CPX #6 set offset? 6876 D00B 9763 BNE :SYS3 6878 A5D5 9764 LDA FR0+1 687A 9D9904 9765 STA SYSSET+1,X 687D 20EEAF 9766 JSR SETOBUF set obj buff 6880 4C64A4 9767 JMP SPP2 different list 6883 4C85A4 9768 :SYS3 JMP SPP3 9769 ; 9770 .PAGE "COMMENT STMT & .FLOAT" PAGE 181 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB COMMENT STMT & .FLOAT D:BANKB3 9771 ; 9772 ; Comment Statements 9773 ; 6886 A003 9774 @@SEMI LDY #3 labeled line? 6888 B180 9775 LDA (EXBUF),Y 688A 10F7 9776 BPL :SYS3 no 688C 4C43A4 9777 JMP SPP9 list with label 9778 ; 9779 ; .Float directive 9780 ; 688F 208AB5 9781 :FMOR JSR GTOKEL done or comma 6892 F03C 9782 BEQ :FD yup 6894 C93B 9783 CMP #@COMMENT end of stmt? 6896 F038 9784 BEQ :FD yup 9785 ; 6898 2090B5 9786 @@FLOAT JSR GTOKE string size 689B 202FAD 9787 JSR PROCESSLAA move to lbuff 689E A99B 9788 LDA #EOL term ASCII # 68A0 9D8005 9789 STA LBUFF,X 68A3 A900 9790 LDA #0 reset lbuff index 68A5 85F2 9791 STA CIX 68A7 2051DA 9792 JSR INTLBF init lbuff 9793 ; 68AA A2FA 9794 LDX #-6 save conflicting ram 68AC B5F2 9795 :SCFR LDA BUFFERS+6,X 68AE 48 9796 PHA 68AF E8 9797 INX 68B0 D0FA 9798 BNE :SCFR 68B2 2000D8 9799 JSR AFP to floating point 68B5 A205 9800 LDX #5 restore 'em now 68B7 68 9801 :RCFR PLA 68B8 95EC 9802 STA BUFFERS,X 68BA CA 9803 DEX 68BB 10FA 9804 BPL :RCFR 9805 ; 68BD 9005 9806 BCC :FPG if legal 9807 ; 68BF A921 9808 LDA #NFPR not floating point! 68C1 200FB4 9809 JSR PUTERR 9810 ; 68C4 A2FA 9811 :FPG LDX #-6 move to obj buff 68C6 B5DA 9812 :FPM LDA FR0+6,X 68C8 2098BE 9813 JSR OBJECT 68CB E8 9814 INX 68CC D0F8 9815 BNE :FPM if more... 68CE F0BF 9816 BEQ :FMOR unc 9817 ; 68D0 AD9804 9818 :FD LDA SETBYTE listing format 68D3 4CF2B8 9819 JMP PUTINBUF0 list & return 9820 ; 9821 .INCLUDE #D:BANKB4 9822 .PAGE "DIRECTIVE MACRO EXECUTION" PAGE 182 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE MACRO EXECUTION D:BANKB4 9823 ; 9824 ; Directive MacroX 9825 ; 68D6 2090B5 9826 @@MACROX JSR GTOKE handle name 68D9 2045AD 9827 JSR PROCESSLAB 68DC B193 9828 LDA (SRCADR),Y defined? 68DE 2904 9829 AND #4 68E0 D008 9830 BNE C1 yup 9831 ; 68E2 A91F 9832 D4 LDA #NESM nesting error 68E4 2C 9833 .BYTE $2C 68E5 A91E 9834 LDA #UDFM undef macro 68E7 4C82A4 9835 JMP SP3ER list w/error 9836 ; 68EA A69E 9837 C1 LDX MCRSK get stk ptr 68EC E044 9838 CPX #TOPSK at top of stk? 68EE B0F2 9839 BCS D4 yup 9840 ; 68F0 A586 9841 LDA STMCUR save next statement 68F2 9DB204 9842 STA SVCUR,X pointers for 68F5 A587 9843 LDA STMCUR+1 return 68F7 9DB304 9844 STA SVCUR+1,X 68FA A5A6 9845 LDA ENTDV save enter dev 68FC 9DB504 9846 STA SVEDV,X 68FF A5A1 9847 LDA CURAUG save aug ptr 6901 9DB404 9848 STA SVAUG,X 9849 ; 6904 8A 9850 TXA cc from "C1" 6905 6904 9851 ADC #4 update stack level 6907 859E 9852 STA MCRSK 9853 .PAGE PAGE 183 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE MACRO EXECUTION D:BANKB4 9854 ; 6909 A002 9855 LDY #2 690B B193 9856 LDA (SRCADR),Y get macro 690D 8587 9857 STA STMCUR+1 exec adress 690F 88 9858 DEY 6910 B193 9859 LDA (SRCADR),Y 6912 8586 9860 STA STMCUR 6914 203FA9 9861 JSR PARSET 6917 2085A4 9862 JSR SPP3 list here 691A 2021BB 9863 JSR WRTXREF references 9864 ; 9865 ; Test & Set Pass 3 9866 ; 691D A5A2 9867 LDA EAF ck asm pass # 691F 3019 9868 BMI P0000 br if pass 1 6921 24D2 9869 BIT MPF ck mini-pass # 6923 3015 9870 BMI P0000 br if pass 3 9871 ; 6925 85D2 9872 STA MPF set mini pass 2 6927 0A 9873 ASL A 6928 85A2 9874 STA EAF set asm pass 1 9875 ; 692A A5AD 9876 LDA ASMPC save cur PC 692C 85DB 9877 STA SVCPC 692E A5AE 9878 LDA ASMPC+1 6930 85DC 9879 STA SVCPC+1 6932 A586 9880 LDA STMCUR save macro start 6934 85DD 9881 STA SVSTM adress 6936 A587 9882 LDA STMCUR+1 6938 85DE 9883 STA SVSTM+1 693A A9FF 9884 P0000 LDA #-1 inprocess Macro 693C 85B5 9885 STA INMAC 693E 60 9886 RTS 9887 .PAGE "GET MACRO PARAMETERS" PAGE 184 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB GET MACRO PARAMETERS D:BANKB4 9888 ; 9889 ; Set-up Parameters & stack 9890 ; 693F A4A1 9891 PARSET LDY CURAUG get cur ptr 6941 B18A 9892 LDA (STACK),Y para cnt of 6943 18 9893 CLC last macro 6944 6901 9894 ADC #1 include %0 6946 0A 9895 ASL A four byte pushes 6947 0A 9896 ASL A 6948 65A1 9897 ADC CURAUG plus pointer 694A B02F 9898 BCS FNEST1 oops! 9899 ; 694C 859B 9900 STA AUGX save curaug ptr 694E A8 9901 TAY 694F A900 9902 LDA #0 6951 85A6 9903 STA ENTDV get from mem 9904 ; 6953 918A 9905 STA (STACK),Y init stack 6955 C8 9906 INY to zero 6956 918A 9907 STA (STACK),Y parameters 6958 C8 9908 INY 6959 A593 9909 LDA SRCADR macro name 695B 918A 9910 STA (STACK),Y adress 695D C8 9911 INY 695E A594 9912 LDA SRCADR+1 6960 918A 9913 STA (STACK),Y 6962 C8 9914 INY 6963 84AC 9915 STY TEM0 save pointer 9916 ; 6965 208AB5 9917 PARGET JSR GTOKEL any parms? 6968 F03E 9918 BEQ PARDONE nope, all done 696A C93B 9919 CMP #@COMMENT 696C F03A 9920 BEQ PARDONE nope, all done 696E C93D 9921 CMP #@CMA a comma? 6970 F0F3 9922 BEQ PARGET yup, get next 6972 C941 9923 CMP #@QU string literal? 6974 D008 9924 BNE PAREXP must be expression 6976 20B2A9 9925 JSR MSTRLITR string literal 6979 F008 9926 BEQ PARSTRV unc 9927 ; 697B 4CADA9 9928 FNEST1 JMP FNEST fatal nest er 9929 ; 697E C692 9930 PAREXP DEC COX pop index 6980 20CFAB 9931 JSR XSCAN get result 6983 48 9932 PARSTRV PHA save high byte 6984 8A 9933 TXA 6985 A4AC 9934 LDY TEM0 get stack ptr 6987 918A 9935 STA (STACK),Y 6989 C8 9936 INY 698A 68 9937 PLA push hi byte 698B 918A 9938 STA (STACK),Y 698D C8 9939 INY 698E A593 9940 LDA SRCADR mv string adress 6990 918A 9941 STA (STACK),Y 6992 C8 9942 INY 6993 A594 9943 LDA SRCADR+1 6995 918A 9944 STA (STACK),Y 6997 C8 9945 INY point to next 6998 84AC 9946 STY TEM0 699A F011 9947 BEQ FNEST wrap-around! 9948 ; 699C A49B 9949 LDY AUGX bump %0 699E B18A 9950 LDA (STACK),Y for this 69A0 18 9951 CLC parameter 69A1 6901 9952 ADC #1 69A3 918A 9953 STA (STACK),Y 69A5 4C65A9 9954 JMP PARGET loop until done 9955 ; 69A8 A59B 9956 PARDONE LDA AUGX set new curaug 69AA 85A1 9957 STA CURAUG 69AC 60 9958 RTS 9959 ; PAGE 185 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB GET MACRO PARAMETERS D:BANKB4 69AD A91F 9960 FNEST LDA #NESM fatal nesting er 69AF 4C64B4 9961 JMP ABORT 9962 ; 9963 ; Macro string literal 9964 ; 69B2 2090B5 9965 MSTRLITR JSR GTOKE 69B5 202FAD 9966 JSR PROCESSLAA set-up string 69B8 A99B 9967 LDA #EOL tack EOL to string 69BA 9D8005 9968 STA LBUFF,X makes it unique!! 9969 ; 69BD E8 9970 INX bump indices 69BE E6B0 9971 INC LTEMP 69C0 2069AD 9972 JSR PROCESSLA do label 69C3 E692 9973 INC COX skip other " 9974 ; 69C5 A6B0 9975 LDX LTEMP get string literal 69C7 CA 9976 DEX length - EOL 69C8 A900 9977 LDA #0 rtn length high, & 69CA 9195 9978 STA (SVESA),Y strings always defined 69CC 60 9979 RTS 9980 ; 9981 .PAGE "DIRECTIVE .ENDM" PAGE 186 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .ENDM D:BANKB4 9982 ; 9983 ; Directive endm 9984 ; 69CD 9985 @@ENDM 69CD A69E 9986 LDX MCRSK get stk ptr 69CF F043 9987 BEQ ME1 nesting err! 69D1 CA 9988 DEX pop stk ptr 69D2 CA 9989 DEX 69D3 CA 9990 DEX 69D4 CA 9991 DEX 69D5 D01D 9992 BNE ACT mini pass still active 9993 ; 9994 ; Mini-Pass 3 9995 ; 69D7 06D2 9996 ASL MPF test end pass 3 69D9 F019 9997 BEQ ACT end pass 3 69DB A940 9998 LDA #$40 reset asm pass 2 69DD 85A2 9999 STA EAF 69DF A5DB 010000 LDA SVCPC restore asmpc 69E1 85AD 010001 STA ASMPC 69E3 A5DC 010002 LDA SVCPC+1 69E5 85AE 010003 STA ASMPC+1 69E7 A5DD 010004 LDA SVSTM pnt back to 1st 69E9 8586 010005 STA STMCUR level macrox 69EB A5DE 010006 LDA SVSTM+1 69ED 8587 010007 STA STMCUR+1 69EF A900 010008 LDA #0 clr errs 69F1 85A5 010009 STA EIX 69F3 60 010010 RTS 010011 ; 69F4 869E 010012 ACT STX MCRSK 69F6 BDB304 010013 LDA SVCUR+1,X restore old 69F9 8587 010014 STA STMCUR+1 pointers 69FB BDB204 010015 LDA SVCUR,X 69FE 8586 010016 STA STMCUR 6A00 BDB404 010017 LDA SVAUG,X 6A03 85A1 010018 STA CURAUG 6A05 BDB504 010019 LDA SVEDV,X 6A08 85A6 010020 STA ENTDV 010021 ; 6A0A 2085A4 010022 JSR SPP3 list 6A0D A59E 010023 LDA MCRSK at macro bottom? 6A0F D002 010024 BNE ?CD no 6A11 85B5 010025 STA INMAC clear Macrox 6A13 60 010026 ?CD RTS ret 010027 ; 6A14 4CE2A8 010028 ME1 JMP D4 nesting err 010029 ; 010030 .PAGE "DIRECTIVE .MACRO" PAGE 187 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .MACRO D:BANKB4 010031 ; 010032 ; Directive macro defination 010033 ; 6A17 010034 @@MACRO 6A17 2090B5 010035 JSR GTOKE 6A1A 2045AD 010036 JSR PROCESSLAB macro name 6A1D 2021BB 010037 JSR WRTXREF references 6A20 A003 010038 LDY #3 6A22 B193 010039 LDA (SRCADR),Y ck for dup 6A24 A6A2 010040 LDX EAF get pass # 6A26 1040 010041 BPL M0 br if pass 2 6A28 2904 010042 AND #4 6A2A D038 010043 BNE DDF a dup macro def 010044 ; 6A2C A904 010045 LDA #4 define macro 6A2E 9193 010046 STA (SRCADR),Y 6A30 88 010047 DEY 6A31 A58F 010048 LDA MACEND+1 adress of start 6A33 9193 010049 STA (SRCADR),Y of macro exc 6A35 88 010050 DEY 6A36 A58E 010051 LDA MACEND 6A38 9193 010052 STA (SRCADR),Y 010053 .PAGE PAGE 188 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .MACRO D:BANKB4 010054 ; 010055 ; Read in rest of defination 010056 ; 6A3A 20E8A4 010057 M4 JSR GSCL get line 6A3D 9005 010058 BCC M5 br if not eof 6A3F A912 010059 :XLMR LDA #LMR linked macro err 6A41 4C64B4 010060 JMP ABORT 010061 ; 6A44 84AC 010062 M5 STY TEM save line len 6A46 A28E 010063 LDX #MACEND expand macro tab 6A48 2044B4 010064 JSR EXPLOW 6A4B A4AC 010065 LDY TEM 6A4D 88 010066 M6 DEY mv line to 6A4E B180 010067 LDA (EXBUF),Y 6A50 9195 010068 STA (SVESA),Y defination 6A52 98 010069 TYA table 6A53 D0F8 010070 BNE M6 010071 ; 6A55 2090B5 010072 JSR GTOKE look for .endm 6A58 C904 010073 CMP #@MACRO ck nested def 6A5A F005 010074 BEQ FNEST2 6A5C C905 010075 CMP #@ENDM done? 6A5E D0DA 010076 BNE M4 6A60 60 010077 RTS 6A61 4CADA9 010078 FNEST2 JMP FNEST 010079 .PAGE PAGE 189 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .MACRO D:BANKB4 010080 ; 010081 ; Macro defination pass 2 010082 ; just list out defination 010083 ; 6A64 A914 010084 DDF LDA #$14 flag dup def 6A66 9193 010085 STA (SRCADR),Y 6A68 2910 010086 M0 AND #$10 a dup def? 6A6A F005 010087 BEQ M2 6A6C A910 010088 LDA #DUPM tell user 6A6E 200FB4 010089 JSR PUTERR 6A71 2085A4 010090 M2 JSR SPP3 list this line 6A74 20E8A4 010091 M8 JSR GSCL get nxt line 010092 ; this branch needed for a 010093 ; Dup name and missing 6A77 B0C6 010094 BCS :XLMR .Endm error! 6A79 2085A4 010095 JSR SPP3 and list 6A7C 2090B5 010096 JSR GTOKE look for .Endm 6A7F C904 010097 CMP #@MACRO 6A81 F0DE 010098 BEQ FNEST2 6A83 C905 010099 CMP #@ENDM 6A85 D0ED 010100 BNE M8 6A87 60 010101 RTS 010102 ; 010103 .PAGE "DIRECTIVE = AND .=" PAGE 190 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE = AND .= D:BANKB4 010104 ; 010105 ; Directive = and .= 010106 ; 6A88 38 010107 @@EQUAL SEC *** flag as equate *** 6A89 B005 010108 BCS EQV 010109 ; 6A8B 18 010110 @@.EQUAL CLC *** flag as set *** 6A8C A900 010111 LDA #0 clear dup err 6A8E 85A5 010112 STA EIX 6A90 A594 010113 EQV LDA SRCADR+1 set "labpt" 6A92 8598 010114 STA LABPT+1 6A94 A593 010115 LDA SRCADR 6A96 8597 010116 STA LABPT 6A98 9008 010117 BCC EQE go if a set 010118 ; 6A9A A003 010119 LDY #3 set primary undefined 6A9C B197 010120 LDA (LABPT),Y 6A9E 0901 010121 ORA #1 6AA0 9197 010122 STA (LABPT),Y 010123 ; 6AA2 A5D2 010124 EQE LDA MPF ck mini-pass 6AA4 F045 010125 BEQ DO if not mini-pass 010126 ; 010127 ; Do internal symbol processing 010128 ; 6AA6 A6B0 010129 LDX LTEMP get lab len 6AA8 A928 010130 LDA #'( assign type char 6AAA 9D8005 010131 STA LBUFF,X 6AAD E6B0 010132 INC LTEMP bump lab len 6AAF E8 010133 INX bump indx 6AB0 2069AD 010134 JSR PROCESSLA handle symbol 010135 ; 6AB3 B193 010136 LDA (SRCADR),Y 6AB5 24D2 010137 BIT MPF get mini-pass # 6AB7 3018 010138 BMI EQMP3 br if pass 3 6AB9 2908 010139 AND #8 lab already set? 6ABB D02E 010140 BNE DO ye, normal process 010141 ; 010142 ; Assign expression to label & label( 010143 ; 6ABD A908 010144 LDA #8 6ABF 9193 010145 STA (SRCADR),Y set it 6AC1 2005AB 010146 JSR PSCAN execute exp 6AC4 A001 010147 LDY #1 move value to 6AC6 8A 010148 TXA 6AC7 9193 010149 STA (SRCADR),Y secondary label( 6AC9 C8 010150 INY 6ACA A5D5 010151 LDA FR0+1 high 6ACC 9193 010152 STA (SRCADR),Y 6ACE 4CEEAA 010153 JMP DASGN assign to primary 010154 ; 010155 ; Re-assign to Primary 010156 ; 6AD1 2908 010157 EQMP3 AND #8 lab reset? 6AD3 F016 010158 BEQ DO yup, go normal 6AD5 A900 010159 LDA #0 6AD7 9193 010160 STA (SRCADR),Y 6AD9 2005AB 010161 JSR PSCAN ex exp 6ADC A001 010162 LDY #1 6ADE B193 010163 LDA (SRCADR),Y restore old 6AE0 AA 010164 TAX result 6AE1 C8 010165 INY 6AE2 B193 010166 LDA (SRCADR),Y 6AE4 85D5 010167 STA FR0+1 so list is correct 6AE6 86D4 010168 STX FR0 6AE8 4CEEAA 010169 JMP DASGN assign to primary 010170 .PAGE "ASSIGN TO PRIMARY" PAGE 191 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB ASSIGN TO PRIMARY D:BANKB4 010171 ; 6AEB 20CFAB 010172 DO JSR XSCAN get # 6AEE A002 010173 DASGN LDY #2 6AF0 9197 010174 STA (LABPT),Y assign val 6AF2 8A 010175 TXA 6AF3 88 010176 DEY 6AF4 9197 010177 STA (LABPT),Y 6AF6 A003 010178 LDY #3 6AF8 B197 010179 LDA (LABPT),Y 6AFA 29FE 010180 AND #$FE clr poss undef 6AFC 05A0 010181 ORA RES set/rest def bit 6AFE 0902 010182 ORA #2 set equated bit 6B00 9197 010183 STA (LABPT),Y 6B02 4C64A4 010184 JMP SPP2 list 010185 ; 6B05 A593 010186 PSCAN LDA SRCADR save secondary 6B07 48 010187 PHA label pointer 6B08 A594 010188 LDA SRCADR+1 6B0A 48 010189 PHA 6B0B 20CFAB 010190 JSR XSCAN ex exp! 6B0E 68 010191 PLA restore pointer 6B0F 8594 010192 STA SRCADR+1 6B11 68 010193 PLA 6B12 8593 010194 STA SRCADR 6B14 60 010195 RTS 010196 ; 010197 .INCLUDE #D:BANKB5 010198 .PAGE "DIRECTIVE .IF" PAGE 192 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .IF D:BANKB5 010199 ; 010200 ; Directive If 010201 ; 6B15 20CFAB 010202 @@IF JSR XSCAN eval exp 6B18 05D4 010203 ORA FR0 test result 6B1A 08 010204 PHP save stat 6B1B 2021BB 010205 JSR WRTXREF references 6B1E 2064A4 010206 JSR SPP2 list line 6B21 28 010207 PLP 6B22 F00E 010208 BEQ IF1 else or endif 010209 ; 6B24 A901 010210 LDA #QELSE else to stop 6B26 4CBDAB 010211 JMP RPUSH assembly 010212 ; 6B29 A5CA 010213 OOPS LDA EOFFLAG 6B2B C940 010214 CMP #$40 ck end .include 6B2D F00B 010215 BEQ RSKMGR0 if .inc, not end 6B2F 4C46A4 010216 JMP ENPASS 010217 ; 6B32 A903 010218 IF1 LDA #QENDIF look for else or 6B34 20BDAB 010219 JSR RPUSH endif to ret 6B37 4C3EAB 010220 JMP RSKMGR go look for match 010221 ; 010222 .PAGE "CONDITIONAL STACK HANDLER" PAGE 193 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB CONDITIONAL STACK HANDLER D:BANKB5 010223 ; 010224 ; Run-Time Stack Handler 010225 ; 6B3A A900 010226 RSKMGR0 LDA #0 clear .include Eof 6B3C 85CA 010227 STA EOFFLAG 6B3E 010228 RSKMGR 6B3E 20E8A4 010229 JSR GSCL get line 6B41 B0E6 010230 BCS OOPS encountered eof 6B43 2090B5 010231 JSR GTOKE test this line 6B46 1006 010232 BPL RM7 br if no label 010233 ; 6B48 204DBE 010234 JSR IFS skip past label 6B4B 2090B5 010235 JSR GTOKE next token 6B4E C901 010236 RM7 CMP #@IF nested if? 6B50 D016 010237 BNE RM2 nope 010238 ; 6B52 A900 010239 LDA #QDUMY push dummy type 6B54 20BDAB 010240 JSR RPUSH 010241 ; 6B57 A5FC 010242 RM1 LDA OPTFLAG test condt option 6B59 2908 010243 AND #8 list conditional? 6B5B F005 010244 BEQ HCLST yup! 6B5D 20D6A4 010245 JSR BCKUP 6B60 D0DC 010246 BNE RSKMGR unc 010247 ; 6B62 2085A4 010248 HCLST JSR SPP3 list this line 6B65 4C3EAB 010249 JMP RSKMGR get nxt 010250 ; 6B68 C902 010251 RM2 CMP #@ELSE it else? 6B6A D01B 010252 BNE RM3 no 6B6C A4B1 010253 LDY RSTK stack ptr 6B6E B9A004 010254 LDA RUNSTK,Y get type 6B71 F0E4 010255 BEQ RM1 br if dummy 6B73 C903 010256 CMP #QENDIF an exit? 6B75 D008 010257 BNE RM4 nest err 6B77 A902 010258 LDA #QSELSE 6B79 99A004 010259 STA RUNSTK,Y set else fnd 6B7C 4C85A4 010260 RM6 JMP SPP3 list & ret 010261 ; 6B7F A909 010262 RM4 LDA #NTPE nesting err 6B81 200FB4 010263 JSR PUTERR 6B84 4C57AB 010264 JMP RM1 010265 ; 6B87 C903 010266 RM3 CMP #@ENDIF terminal? 6B89 F00E 010267 BEQ @@ENDIF yup 6B8B C905 010268 CMP #@ENDM macro end? 6B8D D0C8 010269 BNE RM1 010270 ; 6B8F A5B5 010271 LDA INMAC execute .endm only 6B91 F0C4 010272 BEQ RM1 if doing macrox 6B93 20CDA9 010273 JSR @@ENDM exec endm 6B96 4C3EAB 010274 JMP RSKMGR 010275 ; 010276 .PAGE "DIRECTIVES .ENDIF & .ELSE" PAGE 194 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVES .ENDIF & .ELSE D:BANKB5 010277 ; 010278 ; Directive Endif 010279 ; 6B99 010280 @@ENDIF 6B99 A4B1 010281 LDY RSTK get cur ptr 6B9B F00B 010282 BEQ RM5 nesting err 6B9D C6B1 010283 DEC RSTK pop stack 6B9F F0DB 010284 BEQ RM6 at bottom! 010285 ; 6BA1 B9A004 010286 LDA RUNSTK,Y make sure nxt 6BA4 F014 010287 BEQ EE1 isn't a dummy 6BA6 D0D4 010288 BNE RM6 unc 010289 ; 6BA8 A909 010290 RM5 LDA #NTPE nesting err 6BAA 4C82A4 010291 JMP SP3ER 010292 ; 010293 ; Directive Else 010294 ; 6BAD 010295 @@ELSE 6BAD A4B1 010296 LDY RSTK get stk ptr 6BAF F0F7 010297 BEQ RM5 err! 6BB1 B9A004 010298 LDA RUNSTK,Y get type 6BB4 F0C6 010299 BEQ RM6 null 6BB6 C902 010300 CMP #QSELSE else set? 6BB8 F0EE 010301 BEQ RM5 err! 6BBA 4C57AB 010302 EE1 JMP RM1 look for endif 010303 ; 010304 ; Push To Run-time Conditions Stk 010305 ; 6BBD A4B1 010306 RPUSH LDY RSTK 6BBF C8 010307 INY 6BC0 C013 010308 CPY #SKMX+1 at top of stk? 6BC2 B006 010309 BCS CP1 yup, err 6BC4 99A004 010310 STA RUNSTK,Y 6BC7 84B1 010311 STY RSTK 6BC9 60 010312 RTS 6BCA A90B 010313 CP1 LDA #SOFE stack overflow 6BCC 4C0FB4 010314 JMP PUTERR and ret 010315 ; 010316 .INCLUDE #D:BANKB6 010317 .PAGE "EXECUTE EXPRESSION" PAGE 195 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB EXECUTE EXPRESSION D:BANKB6 010318 ; 010319 ; Execute Expression (Rev 4/15/83) 010320 ; A = high, X = low, Y = adrmode 010321 ; 6BCF A037 010322 XSCAN LDY #TOSE init stack 6BD1 84E4 010323 STY APTR 6BD3 A93C 010324 LDA #@EOL set pseudo end 6BD5 99C801 010325 STA ARGOPS,Y 6BD8 A000 010326 LDY #0 6BDA 84A0 010327 STY RES clear resolved 6BDC 84E5 010328 STY OPTR init operator stack 6BDE 84E3 010329 STY TOPSTK FR0 push flag 010330 ; 010331 ; Simple expression? (faster) 010332 ; 6BE0 2089AC 010333 JSR GETN try get value 6BE3 B032 010334 BCS XS2 no, an op 6BE5 86D4 010335 STX FR0 possible result 6BE7 85D5 010336 STA FR0+1 6BE9 A492 010337 LDY COX test end exp 6BEB B180 010338 LDA (EXBUF),Y 6BED C936 010339 CMP #@PCMAX a terminator? 6BEF B064 010340 BCS QUIF yup, all done *** 6BF1 C6E3 010341 DEC TOPSTK set push FR0 flag 010342 ; 010343 ; Not simple expression 010344 ; 6BF3 010345 XS9 6BF3 2089AC 010346 XS1 JSR GETN get # 6BF6 B01F 010347 BCS XS2 010348 ; 6BF8 24E3 010349 BIT TOPSTK at top of stack? 6BFA 1012 010350 BPL TSK 6BFC 48 010351 PHA push FR0 to stack 6BFD A4E5 010352 LDY OPTR 6BFF A5D5 010353 LDA FR0+1 6C01 99C801 010354 STA ARGOPS,Y 6C04 C8 010355 INY 6C05 A5D4 010356 LDA FR0 6C07 99C801 010357 STA ARGOPS,Y 6C0A C8 010358 INY 6C0B 84E5 010359 STY OPTR 6C0D 68 010360 PLA 6C0E 86D4 010361 TSK STX FR0 set new FR0 6C10 85D5 010362 STA FR0+1 6C12 C6E3 010363 DEC TOPSTK 6C14 4CF3AB 010364 JMP XS1 010365 ; 6C17 85B3 010366 XS2 STA SVOP save oper 6C19 AA 010367 TAX 6C1A BD65A1 010368 LDA ONPREC-@PLUS,X 6C1D 85B4 010369 STA SVNP save precedance 6C1F A4E4 010370 XS8 LDY APTR 6C21 BEC801 010371 LDX ARGOPS,Y get old 6C24 BD92A1 010372 LDA OFPREC-@PLUS,X 6C27 C5B4 010373 CMP SVNP 6C29 9013 010374 BCC XS3 push oper 6C2B A8 010375 TAY 6C2C F029 010376 BEQ QUIT done 6C2E E6E4 010377 XS7 INC APTR 6C30 2036AC 010378 JSR XS4 6C33 4C1FAC 010379 JMP XS8 010380 ; 010381 ; Execute Operator 010382 ; 6C36 A9A0 010383 XS4 LDA # >@XPLUS-1 6C38 48 010384 PHA 6C39 BDBFA1 010385 LDA OPERTRL-@PLUS,X 6C3C 48 010386 PHA 6C3D 60 010387 RTS 010388 ; 6C3E A5B3 010389 XS3 LDA SVOP push operator: PAGE 196 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB EXECUTE EXPRESSION D:BANKB6 6C40 88 010390 DEY bump index 6C41 C4E5 010391 CPY OPTR stack overflow? 6C43 9008 010392 BCC QUITR yup!! 6C45 99C801 010393 STA ARGOPS,Y ok, so save it 6C48 84E4 010394 STY APTR 6C4A 4CF3AB 010395 JMP XS1 010396 ; 6C4D A906 010397 QUITR LDA #6 exp complex err 6C4F 200AB4 010398 JSR PUTERRASM 6C52 4C57AC 010399 JMP QUIT 010400 ; 6C55 E692 010401 QUIF INC COX adjust Cox, fast exit 6C57 A5A0 010402 QUIT LDA RES exp resolved? 6C59 F005 010403 BEQ XS5 yup 6C5B A905 010404 LDA #5 else, undef error 6C5D 200AB4 010405 JSR PUTERRASM 010406 ; 6C60 C692 010407 XS5 DEC COX pop index 6C62 A492 010408 LDY COX get adressing mode 6C64 B180 010409 LDA (EXBUF),Y 6C66 AA 010410 TAX 6C67 BC57A1 010411 LDY ENDM-@PCMAX,X mode in Y 010412 ; 010413 ; Determind absolute or z page 010414 ; 6C6A A6D4 010415 NOUDF LDX FR0 res low 6C6C A5D5 010416 LDA FR0+1 res hi 6C6E 05A0 010417 ORA RES force non Z page 6C70 F007 010418 BEQ EXX0 z pg anyway 6C72 C005 010419 CPY #5 non z instr? 6C74 9003 010420 BCC EXX0 no 6C76 C8 010421 INY bump mode to abs 6C77 C8 010422 INY 6C78 C8 010423 INY 6C79 A5D5 010424 EXX0 LDA FR0+1 restore high byte 6C7B 60 010425 RTS 010426 ; 010427 ; Pop entry from ARGOPS 010428 ; 6C7C A4E5 010429 OPOP LDY OPTR get stack pointer 6C7E 88 010430 DEY pop index 6C7F BEC801 010431 LDX ARGOPS,Y get low byte in X 6C82 88 010432 DEY pop index 6C83 B9C801 010433 LDA ARGOPS,Y get high byte 6C86 84E5 010434 STY OPTR save new pointer 6C88 60 010435 RTS 010436 ; 010437 .PAGE "GET NUMBER" PAGE 197 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB GET NUMBER D:BANKB6 010438 ; 010439 ; Get num, A = high; X = low CC 010440 ; A = operator token CS 010441 ; 6C89 A492 010442 GETN LDY COX get next token 6C8B E692 010443 INC COX 6C8D B180 010444 LDA (EXBUF),Y 6C8F 3027 010445 BMI ISSYMB branch if label 6C91 C90B 010446 GETNE CMP #@APOST+1 other type? 6C93 B011 010447 BCS GN1 yup, go test 6C95 4A 010448 NOMP LSR A status: word or byte 6C96 A492 010449 LDY COX get low byte 6C98 E692 010450 INC COX 6C9A B180 010451 LDA (EXBUF),Y 6C9C AA 010452 TAX in X 6C9D B003 010453 BCS GN2 if carry, then get high 6C9F A900 010454 LDA #0 else, high =0 6CA1 60 010455 RTS 6CA2 18 010456 GN2 CLC set no-operator status 6CA3 4C90B5 010457 JMP GTOKE get high 010458 ; 6CA6 C90D 010459 GN1 CMP #@CPC pc? 6CA8 F003 010460 BEQ DOPC 6CAA 9031 010461 BCC DOMP do macro param 6CAC 60 010462 RTS cs =operator 010463 ; 6CAD 18 010464 DOPC CLC 6CAE A5AD 010465 LDA ASMPC 6CB0 6599 010466 ADC OBJIX add in cur 6CB2 AA 010467 TAX 6CB3 A5AE 010468 LDA ASMPC+1 6CB5 6900 010469 ADC #0 6CB7 60 010470 RTS return, carry is clear 010471 ; 010472 .PAGE "NON-NUMERIC TYPES" PAGE 198 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB NON-NUMERIC TYPES D:BANKB6 010473 ; 010474 ; Process Symbol 010475 ; 6CB8 2045AD 010476 ISSYMB JSR PROCESSLAB v1.103 6CBB B193 010477 LDA (SRCADR),Y defined byte 6CBD 9005 010478 BCC YESDF go if not newly inserted 6CBF A981 010479 LDA #$81 special for .REF 6CC1 18 010480 CLC 6CC2 9004 010481 BCC YESRF unc 010482 ; 6CC4 2901 010483 YESDF AND #1 just move status 6CC6 05A0 010484 ORA RES to resolved flag 6CC8 85A0 010485 YESRF STA RES 6CCA A001 010486 LDY #1 get value 6CCC B193 010487 LDA (SRCADR),Y 6CCE AA 010488 TAX 6CCF C8 010489 INY 6CD0 B193 010490 LDA (SRCADR),Y 6CD2 60 010491 RTS carry is clear 010492 ; =ACD3 010493 :BR0 .= * used 3 6CD3 A920 010494 LDA #32 bad parameter 6CD5 200FB4 010495 JSR PUTERR err & ret 6CD8 A900 010496 LDA #0 ret zero 6CDA AA 010497 TAX 6CDB 18 010498 CLC 6CDC 60 010499 RTS 010500 ; 010501 ; Get parameter from a Macro call 010502 ; 6CDD 2090B5 010503 DOMP JSR GTOKE 6CE0 C940 010504 CMP #@LP is it %(exp)? 6CE2 D003 010505 BNE B4 nope 010506 ; 6CE4 A917 010507 LDA #@ELP special operator 6CE6 60 010508 RTS carry set 010509 ; 6CE7 2095AC 010510 B4 JSR NOMP get param # 6CEA C900 010511 VALUEP CMP #0 no param >255 6CEC D0E5 010512 BNE :BR0 val > 255 6CEE 8A 010513 TXA 6CEF A4A1 010514 LDY CURAUG get aug pointer 6CF1 D18A 010515 CMP (STACK),Y test param range 6CF3 F002 010516 BEQ B3 6CF5 B0DC 010517 BCS :BR0 out of range 010518 ; 6CF7 A69E 010519 B3 LDX MCRSK ck for zero stk 6CF9 F0D8 010520 BEQ :BR0 6CFB 0A 010521 ASL A form stack indx 6CFC 0A 010522 ASL A multiples of 4 6CFD 18 010523 CLC as offset from 6CFE 65A1 010524 ADC CURAUG cur aug ptr 6D00 A8 010525 TAY x 6D01 B18A 010526 LDA (STACK),Y get low 6D03 C8 010527 INY 6D04 AA 010528 TAX 6D05 B18A 010529 LDA (STACK),Y get high 6D07 48 010530 PHA save high 6D08 C8 010531 INY 6D09 B18A 010532 LDA (STACK),Y string adress 6D0B 8593 010533 STA SRCADR 6D0D C8 010534 INY 6D0E B18A 010535 LDA (STACK),Y 6D10 8594 010536 STA SRCADR+1 010537 ; 6D12 A003 010538 LDY #3 get defined stat 6D14 B193 010539 LDA (SRCADR),Y 6D16 05A0 010540 ORA RES 6D18 2901 010541 AND #1 out other stuff 6D1A 85A0 010542 STA RES 6D1C 68 010543 PLA restore high =AD1D 010544 :BR0 .= * used 1 next page PAGE 199 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB NON-NUMERIC TYPES D:BANKB6 6D1D 18 010545 CLC 6D1E 60 010546 RTS 010547 ; 010548 .PAGE "TEST EXPRESSION END" PAGE 200 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB TEST EXPRESSION END D:BANKB6 010549 ; 010550 ; Test for exp end: 010551 ; CS = end, Y = adr mode 010552 ; CC = operator, or number type 010553 ; 6D1F A492 010554 ENDEXP? LDY COX get token 6D21 B180 010555 LDA (EXBUF),Y 6D23 C936 010556 CMP #@PCMAX tst first term 6D25 B001 010557 BCS ENDP br if terminal 6D27 60 010558 RTS an operator 010559 ; 6D28 AA 010560 ENDP TAX indx to mode tab 6D29 30F2 010561 BMI :BR0 test for label 6D2B BC57A1 010562 LDY ENDM-@PCMAX,X get mode in Y 6D2E 60 010563 RTS 010564 ; 010565 .INCLUDE #D:BANKB7 010566 .PAGE "HANDLE SYMBOLS" PAGE 201 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB HANDLE SYMBOLS D:BANKB7 010567 ; 010568 ; Process labels 010569 ; returns Y=3 010570 ; pointing to define byte 010571 ; 6D2F 297F 010572 PROCESSLAA AND #$7F lab len 6D31 85B0 010573 STA LTEMP sav 6D33 A200 010574 LDX #0 clr indx 6D35 A492 010575 LDY COX 6D37 B180 010576 :LALP LDA (EXBUF),Y move to 6D39 9D8005 010577 STA LBUFF,X text buff 6D3C E8 010578 INX 6D3D C8 010579 INY 6D3E E4B0 010580 CPX LTEMP 6D40 90F5 010581 BCC :LALP 6D42 8492 010582 STY COX point to nxt 6D44 60 010583 RTS 010584 ; 010585 ; 6D45 202FAD 010586 PROCESSLAB JSR PROCESSLAA 6D48 AD8005 010587 LDA LBUFF check LOCAL =0001 010588 .IF SORCIM 6D4B C93A 010589 CMP #': 6D4D D005 010590 BNE ?RC1 6D4F A93F 010591 LDA #'? 6D51 8D8005 010592 STA LBUFF 6D54 BC7F05 010593 ?RC1 LDY LBUFF-1,X last a ":"? 6D57 C03A 010594 CPY #': 6D59 D003 010595 BNE ?RC2 6D5B CA 010596 DEX ignore the colon 6D5C C6B0 010597 DEC LTEMP 6D5E 010598 ?RC2 010599 .ENDIF 6D5E C93F 010600 CMP #'? 6D60 D007 010601 BNE PROCESSLA nope 010602 ; 6D62 A5C8 010603 LDA LOCALIX 6D64 F003 010604 BEQ PROCESSLA first unchanged 6D66 8D8005 010605 STA LBUFF do local counter 010606 ; 6D69 8A 010607 PROCESSLA TXA form exp size 6D6A 18 010608 CLC 6D6B 6906 010609 ADC #6 6D6D 859A 010610 STA LABOF 010611 ; 010612 ; Get label character address 010613 ; 6D6F AD8005 010614 LDA LBUFF set-up 6D72 C93F 010615 CMP #'? less, use "?" 6D74 B004 010616 BCS LIMITH 6D76 A93F 010617 LDA #'? 6D78 D006 010618 BNE GETADDR unc 6D7A C95B 010619 LIMITH CMP #'Z+1 test top 6D7C 9002 010620 BCC GETADDR 6D7E A95A 010621 LDA #'Z 010622 ; 6D80 0A 010623 GETADDR ASL A 2x index & CC 6D81 AA 010624 TAX 6D82 BC7F04 010625 LDY SPOINTER-'?*2+1,X high 6D85 3036 010626 BMI NWLBL yup, a first 010627 ; 010628 ; Search LOOP 010629 ; 6D87 BD7E04 010630 LDA SPOINTER-'?*2,X low 6D8A 010631 NXTLK ; carry is clear! 6D8A 658E 010632 ADC SMBLTP add in absolute 6D8C 8593 010633 STA SRCADR 6D8E 98 010634 TYA 6D8F 658F 010635 ADC SMBLTP+1 add in high 6D91 8594 010636 STA SRCADR+1 010637 ; 6D93 A200 010638 LDX #0 compare offsets PAGE 202 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB HANDLE SYMBOLS D:BANKB7 6D95 A59A 010639 LDA LABOF 6D97 C193 010640 CMP (SRCADR,X) 6D99 D009 010641 BNE TESTLINK 010642 ; 6D9B A006 010643 LDY #6 do characters 6D9D B193 010644 SY1 LDA (SRCADR),Y 6D9F 597A05 010645 EOR LBUFF-6,Y 6DA2 F010 010646 BEQ SY2 a match 010647 ; 6DA4 A004 010648 TESTLINK LDY #4 get link low 6DA6 B193 010649 LDA (SRCADR),Y 6DA8 AA 010650 TAX 6DA9 C8 010651 INY 6DAA B193 010652 LDA (SRCADR),Y 6DAC A8 010653 TAY 6DAD 8A 010654 TXA 6DAE C0FF 010655 CPY #-1 6DB0 90D8 010656 BCC NXTLK no other choice 6DB2 F01C 010657 BEQ NOINTAB 010658 ; 6DB4 C8 010659 SY2 INY 6DB5 C49A 010660 CPY LABOF 6DB7 90E4 010661 BCC SY1 6DB9 18 010662 CLC 6DBA 4C2CAE 010663 JMP RIGHTONE 010664 ; 010665 .PAGE PAGE 203 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB HANDLE SYMBOLS D:BANKB7 010666 ; 010667 ; Insert Symbol in Table 010668 ; X is index to "spointer" 010669 ; 6DBD A590 010670 NWLBL LDA SMBLEND 6DBF 8593 010671 STA SRCADR set 'srcadr' 6DC1 38 010672 SEC 6DC2 E58E 010673 SBC SMBLTP 'spointer' entry 6DC4 9D7E04 010674 STA SPOINTER-'?*2,X link 6DC7 A591 010675 LDA SMBLEND+1 6DC9 8594 010676 STA SRCADR+1 6DCB E58F 010677 SBC SMBLTP+1 6DCD 9D7F04 010678 STA SPOINTER-'?*2+1,X high 010679 ; 6DD0 010680 NOINTAB ; Fast Expand 6DD0 A590 010681 LDA SMBLEND set "Svesa" 6DD2 8595 010682 STA SVESA 6DD4 18 010683 CLC add low expand 6DD5 659A 010684 ADC LABOF 6DD7 A8 010685 TAY for mem test 6DD8 A591 010686 LDA SMBLEND+1 6DDA 8596 010687 STA SVESA+1 6DDC 6900 010688 ADC #0 010689 ; 6DDE CDE602 010690 CMP MTP+1 within? 6DE1 900A 010691 BCC ESAFE 6DE3 CCE502 010692 CPY MTP low within? 6DE6 9005 010693 BCC ESAFE yes 6DE8 F003 010694 BEQ ESAFE 6DEA 4C62B4 010695 JMP EXXI out of memory 010696 ; 6DED 8591 010697 ESAFE STA SMBLEND+1 6DEF 8490 010698 STY SMBLEND 010699 ; 010700 ; Link this entry to last entry 010701 ; "srcadr" points to last 010702 ; 6DF1 A004 010703 LDY #4 subtract "smblpt" 6DF3 38 010704 SEC 6DF4 A595 010705 LDA SVESA 6DF6 AA 010706 TAX 6DF7 E58E 010707 SBC SMBLTP 6DF9 9193 010708 STA (SRCADR),Y 6DFB C8 010709 INY 6DFC A596 010710 LDA SVESA+1 6DFE E58F 010711 SBC SMBLTP+1 6E00 9193 010712 STA (SRCADR),Y 6E02 A596 010713 LDA SVESA+1 make "svesa"="srcadr" 6E04 8594 010714 STA SRCADR+1 6E06 8693 010715 STX SRCADR 010716 ; 6E08 A000 010717 LDY #0 6E0A A59A 010718 LDA LABOF offset to nxt lab 6E0C 9195 010719 STA (SVESA),Y 6E0E 98 010720 TYA a =0 6E0F C8 010721 INY y =1 6E10 AA 010722 TAX x =0 6E11 9195 010723 STA (SVESA),Y zero adress 6E13 C8 010724 INY 6E14 9195 010725 STA (SVESA),Y 6E16 A901 010726 LDA #1 6E18 C8 010727 INY 6E19 9195 010728 STA (SVESA),Y set undef 010729 ; 6E1B C8 010730 INY set last label link 6E1C C8 010731 INY 6E1D A9FF 010732 LDA #-1 6E1F 9195 010733 STA (SVESA),Y high byte is flag 010734 ; 6E21 C8 010735 MVELP INY move symbol 6E22 BD8005 010736 LDA LBUFF,X 6E25 9195 010737 STA (SVESA),Y PAGE 204 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB HANDLE SYMBOLS D:BANKB7 6E27 E8 010738 INX 6E28 E4B0 010739 CPX LTEMP past last one? 6E2A 90F5 010740 BCC MVELP no, get next 6E2C A5A8 010741 RIGHTONE LDA REFDV build X-Ref? 6E2E D003 010742 BNE BUILDRF yup 6E30 A003 010743 LDY #3 6E32 60 010744 RTS 010745 ; 010746 ; Build X-Reference Data 010747 ; 6E33 08 010748 BUILDRF PHP save carry 6E34 24A2 010749 BIT EAF pass 2? 6E36 5043 010750 BVC :NXFL no 6E38 A006 010751 LDY #6 6E3A B193 010752 LDA (SRCADR),Y is it a Local? 6E3C C940 010753 CMP #'?+1 =0000 010754 .IF DOLOCAL 010755 BCS :NXFL only Locals 010756 .ELSE 6E3E 903B 010757 BCC :NXFL yup 010758 .ENDIF 010759 ; =0001 010760 .IF SPLIT added in ver 1.05 6E40 CD8504 010761 CMP SPLO X-Ref a range 6E43 9036 010762 BCC :NXFL no 6E45 CD8704 010763 CMP SPHI+1 (this is limit +1) 6E48 B031 010764 BCS :NXFL 010765 .ENDIF 6E4A A6C3 010766 LDX XRINDX buffer full? 6E4C E021 010767 CPX #XRMAX+1 6E4E B02F 010768 BCS XRFER yup 010769 ; 6E50 38 010770 SEC 6E51 A593 010771 LDA SRCADR 6E53 E58E 010772 SBC SMBLTP dump table link 6E55 9D3505 010773 STA XREFBUF+1,X format: 6E58 A594 010774 LDA SRCADR+1 High/Low 6E5A E58F 010775 SBC SMBLTP+1 6E5C 9D3405 010776 STA XREFBUF,X 010777 ; 010778 ; Already referenced? 010779 ; 6E5F A4C3 010780 LDY XRINDX 6E61 88 010781 :DRFX DEY pop to last entry 6E62 88 010782 DEY 6E63 3012 010783 BMI NEWRFX no match, new entry 6E65 B93405 010784 LDA XREFBUF,Y high 6E68 DD3405 010785 CMP XREFBUF,X 6E6B D0F4 010786 BNE :DRFX try next entry 6E6D B93505 010787 LDA XREFBUF+1,Y 6E70 DD3505 010788 CMP XREFBUF+1,X 6E73 D0EC 010789 BNE :DRFX next entry 6E75 F004 010790 BEQ :NXFL don't update index 010791 ; 6E77 E8 010792 NEWRFX INX point to next 6E78 E8 010793 INX 6E79 86C3 010794 STX XRINDX 6E7B A003 010795 :NXFL LDY #3 6E7D 28 010796 PLP get carry status 6E7E 60 010797 RTS 010798 ; 6E7F A91C 010799 XRFER LDA #XRERR too many X-Refs 6E81 200FB4 010800 JSR PUTERR 6E84 4C7BAE 010801 JMP :NXFL 010802 ; 010803 .PAGE "LABELED LINE HANDLER" PAGE 205 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB LABELED LINE HANDLER D:BANKB7 010804 ; 010805 ; Label at start of line 010806 ; 6E87 2045AD 010807 LABINT JSR PROCESSLAB 6E8A B193 010808 LDA (SRCADR),Y 6E8C 29FE 010809 AND #$FE clr undef bit 6E8E 48 010810 PHA save 6E8F 300D 010811 BMI LT1 already there 6E91 A5AE 010812 LDA ASMPC+1 define it 6E93 88 010813 DEY 6E94 9193 010814 STA (SRCADR),Y 6E96 A5AD 010815 LDA ASMPC 6E98 88 010816 DEY 6E99 9193 010817 STA (SRCADR),Y 6E9B 4CB5AE 010818 JMP LT3 6E9E 2902 010819 LT1 AND #2 equated? 6EA0 D013 010820 BNE LT3 yes 6EA2 A5AE 010821 LDA ASMPC+1 must match PC 6EA4 88 010822 DEY 6EA5 D193 010823 CMP (SRCADR),Y 6EA7 D007 010824 BNE LT2 6EA9 A5AD 010825 LDA ASMPC 6EAB 88 010826 DEY 6EAC D193 010827 CMP (SRCADR),Y 6EAE F005 010828 BEQ LT3 ok 6EB0 A90D 010829 LT2 LDA #13 phase error 6EB2 200AB4 010830 JSR PUTERRASM 6EB5 68 010831 LT3 PLA get define byte 6EB6 48 010832 PHA 6EB7 0A 010833 ASL A 6EB8 1005 010834 BPL LT4 6EBA A907 010835 LDA #7 duplicate label 6EBC 200AB4 010836 JSR PUTERRASM 6EBF A003 010837 LT4 LDY #3 6EC1 68 010838 PLA 6EC2 24B5 010839 BIT INMAC in macro exec? 6EC4 1003 010840 BPL LT6 no, regular lab 010841 ; 6EC6 AA 010842 TAX def byte must =0 6EC7 F002 010843 BEQ LT5 don't set flag 010844 ; 6EC9 05A2 010845 LT6 ORA EAF set pass # 6ECB 9193 010846 LT5 STA (SRCADR),Y 6ECD A5A8 010847 LDA REFDV doing X-Ref? 6ECF F00E 010848 BEQ LT7 no 6ED1 24A2 010849 BIT EAF only if pass 2 6ED3 300A 010850 BMI LT7 6ED5 2C8005 010851 BIT LBUFF locals will clear V =0000 010852 .IF DOLOCAL 010853 BVS LT7 010854 .ELSE 6ED8 5005 010855 BVC LT7 don't flag 010856 .ENDIF 6EDA A984 010857 LDA #RFLAB flag labeled line 6EDC 20D6BA 010858 JSR XROUT 6EDF 60 010859 LT7 RTS 010860 ; 010861 .PAGE "BUMP LOCAL COUNTER" PAGE 206 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB BUMP LOCAL COUNTER D:BANKB7 010862 ; 6EE0 E6C8 010863 @@LOCAL INC LOCALIX tough!! 6EE2 A5C8 010864 LDA LOCALIX get fancy... 6EE4 C93F 010865 CMP #'? at max? 6EE6 9007 010866 BCC LSAFE yup 6EE8 A91D 010867 LDA #HLOCER tell user 6EEA 200FB4 010868 JSR PUTERR 6EED A93F 010869 LDA #'? 010870 ; 6EEF 85D4 010871 LSAFE STA FR0 6EF1 A900 010872 LDA #0 6EF3 85D5 010873 STA FR0+1 6EF5 4C64A4 010874 JMP SPP2 list & return 010875 ; 010876 .INCLUDE #D:BANKB8 010877 .PAGE "DIRECTIVE .TITLE and .ERROR" PAGE 207 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .TITLE and .ERROR D:BANKB8 010878 ; 010879 ; Directive title 010880 ; 6EF8 A200 010881 @@TITLE LDX #0 string statement 6EFA 200CAF 010882 JSR MSRG 6EFD D00A 010883 BNE :PP0 unc 010884 ; 010885 ; Directive error 010886 ; 6EFF A202 010887 @@ERROR LDX #2 6F01 200CAF 010888 JSR MSRG 6F04 A900 010889 LDA #0 force error "0" 6F06 200AB4 010890 JSR PUTERRASM 6F09 4C85A4 010891 :PP0 JMP SPP3 010892 ; 010893 ; Put .Page, .Title, & .Error strings in memory 010894 ; 6F0C 2090B5 010895 MSRG JSR GTOKE 6F0F C941 010896 CMP #@QU string? 6F11 F001 010897 BEQ G0 yup 6F13 60 010898 RTS 010899 ; 6F14 18 010900 G0 CLC 6F15 A5EE 010901 LDA STRINGS 6F17 7DB3A1 010902 ADC :MSTB,X 6F1A 8593 010903 STA SRCADR 6F1C A5EF 010904 LDA STRINGS+1 6F1E 6900 010905 ADC #0 6F20 8594 010906 STA SRCADR+1 6F22 2036B6 010907 JSR GTOKE7 get str len 6F25 AA 010908 TAX 6F26 A900 010909 LDA #0 6F28 85AF 010910 STA TEMP 6F2A E051 010911 CPX #STRMAX+1 check length 6F2C 9002 010912 BCC PTMOV 6F2E A250 010913 LDX #STRMAX 010914 ; 6F30 2036B6 010915 PTMOV JSR GTOKE7 get 7 bit char 6F33 A4AF 010916 LDY TEMP 6F35 E6AF 010917 INC TEMP 6F37 9193 010918 STA (SRCADR),Y to buffer 6F39 CA 010919 DEX 6F3A D0F4 010920 BNE PTMOV 6F3C 0980 010921 PM80 ORA #$80 flag last char 6F3E 9193 010922 STA (SRCADR),Y 6F40 60 010923 RTS 010924 ; 010925 .PAGE "DIRECTIVE .TAB" PAGE 208 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE .TAB D:BANKB8 010926 ; 010927 ; Directive tab 010928 ; 6F41 20CFAB 010929 @@TAB JSR XSCAN get first # 6F44 8E8A04 010930 STX TAB1 6F47 E692 010931 INC COX skip , 6F49 20CFAB 010932 JSR XSCAN get second # 6F4C 8E8B04 010933 STX TAB2 6F4F E692 010934 INC COX skip , 6F51 20CFAB 010935 JSR XSCAN get third # 6F54 8E8C04 010936 STX TAB3 6F57 203FBE 010937 JSR SETZTAB reset zp tabs 6F5A 4C85A4 010938 JMP SPP3 go list 010939 ; 010940 ; Test for Save File & pop file size 010941 ; 6F5D 20BBB5 010942 VALIDF JSR GOBJ test ck byte 6F60 C9FE 010943 CMP #CKBYT 6F62 D015 010944 BNE IFAIL oops! 6F64 20BBB5 010945 JSR GOBJ test ck byte 6F67 C9FE 010946 CMP #CKBYT 6F69 D00E 010947 BNE IFAIL oops! 010948 ; 6F6B 20BBB5 010949 POPSIZEF JSR GOBJ file size 6F6E 85BC 010950 STA FILESIZE 6F70 20BBB5 010951 JSR GOBJ 6F73 85BD 010952 STA FILESIZE+1 store & return 6F75 60 010953 RTS 010954 ; 6F76 A90E 010955 :AE9 LDA #14 PC undefined 6F78 2C 010956 .BYTE $2C 6F79 A917 010957 IFAIL LDA #23 not save error 6F7B 4C64B4 010958 STOPASM JMP ABORT 010959 ; 010960 .PAGE "DIRECTIVE DS and *=" PAGE 209 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB DIRECTIVE DS and *= D:BANKB8 010961 ; 010962 ; Directive DS 010963 ; 6F7E 20CFAB 010964 @@DS JSR XSCAN get number 6F81 24C9 010965 BIT PCDEF PC defined? 6F83 10F1 010966 BPL :AE9 no! 6F85 8A 010967 TXA calculate new PC 6F86 18 010968 CLC 6F87 65AD 010969 ADC ASMPC 6F89 AA 010970 TAX low in X 6F8A A5D5 010971 LDA FR0+1 6F8C 65AE 010972 ADC ASMPC+1 6F8E 4C94AF 010973 JMP :AE0 join *= 010974 ; 010975 ; Directive *= 010976 ; 6F91 20CFAB 010977 @@ASTER JSR XSCAN get num 6F94 A4A0 010978 :AE0 LDY RES defined? 6F96 D0DE 010979 BNE :AE9 no! 010980 ; 6F98 88 010981 :AE1 DEY set Y =$FF 6F99 84C9 010982 STY PCDEF set PC defined 6F9B 24A2 010983 BIT EAF get pass # 6F9D 1007 010984 BPL :AE2 branch if pass 2 6F9F 85AE 010985 STA ASMPC+1 else, just set new 6FA1 86AD 010986 STX ASMPC pc adress 6FA3 4C54A4 010987 JMP SPP1 all done 010988 ; 6FA6 48 010989 :AE2 PHA save new PC 6FA7 8A 010990 TXA 6FA8 48 010991 PHA 6FA9 20B8AF 010992 JSR WRITE write, if any 6FAC 2054A4 010993 JSR SPP1 list line 6FAF 68 010994 PLA get new PC 6FB0 85AD 010995 STA ASMPC 6FB2 68 010996 PLA 6FB3 85AE 010997 STA ASMPC+1 6FB5 4CEEAF 010998 JMP SETOBUF set obj PC & return 010999 ; 011000 .INCLUDE #D:BANKB9 011001 .PAGE "WRITE OBJECT BUFFER" PAGE 210 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB WRITE OBJECT BUFFER D:BANKB9 011002 ; 011003 ; Writes object to device 011004 ; 6FB8 A5BE 011005 WRITE LDA OBJPTR 6FBA C904 011006 CMP #4 test null 6FBC F02F 011007 BEQ :EMPT 6FBE 38 011008 SEC 6FBF E905 011009 SBC #5 for end adress 6FC1 18 011010 CLC compute end adress 6FC2 A000 011011 LDY #0 6FC4 7182 011012 ADC (OBJBUF),Y 6FC6 A002 011013 LDY #2 6FC8 9182 011014 STA (OBJBUF),Y 6FCA 88 011015 DEY 6FCB B182 011016 LDA (OBJBUF),Y 6FCD 6900 011017 ADC #0 6FCF A003 011018 LDY #3 6FD1 9182 011019 STA (OBJBUF),Y 6FD3 48 011020 PHA save end adress 6FD4 88 011021 DEY 6FD5 B182 011022 LDA (OBJBUF),Y 6FD7 48 011023 PHA 011024 ; 6FD8 206CBA 011025 JSR RUNOUT write it 6FDB 68 011026 PLA 6FDC 18 011027 CLC set new start adress 6FDD 6901 011028 ADC #1 011029 .PAGE PAGE 211 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKB WRITE OBJECT BUFFER D:BANKB9 011030 ; 011031 ; High byte on stack, carry 011032 ; must be clear at entry 011033 ; 6FDF A000 011034 :SOVX LDY #0 6FE1 9182 011035 STA (OBJBUF),Y 6FE3 68 011036 PLA 6FE4 6900 011037 ADC #0 6FE6 C8 011038 INY 6FE7 9182 011039 STA (OBJBUF),Y 6FE9 A004 011040 LDY #4 reset pointer 6FEB 84BE 011041 STY OBJPTR 6FED 60 011042 :EMPT RTS 011043 ; 011044 ; Set up object buffer 011045 ; =AFEE 011046 SETOBUF = * 6FEE A5AD 011047 LDA ASMPC 6FF0 18 011048 CLC 6FF1 6D9E04 011049 ADC OFFSET 6FF4 AA 011050 TAX 6FF5 A5AE 011051 LDA ASMPC+1 6FF7 6D9F04 011052 ADC OFFSET+1 6FFA 48 011053 PHA 6FFB 8A 011054 TXA 6FFC 18 011055 CLC 6FFD 90E0 011056 BCC :SOVX 011057 ; 011058 @ =AFFF M011061 :BR0 .= *+%1 żERROR - 32,BAD PARAMETER 6FFF 011062 *= ROMF+$0FFF 6FFF 04 011063 .BYTE BANK2&$0F 011064 ; 011065 BANK BANK3 =0001 011072 .IF EPROM =9000 011073 .SET 6,-[$A000-@@BASE] 011074 .ENDIF 011075 ; =0001 011076 .IF DDT? needs page boundry 011077 .INCLUDE #D2:DDTBANK5 011078 .TITLE "MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C'" 011079 .PAGE "DISPLAY ADDRESSING MODES" PAGE 212 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' DISPLAY ADDRESSING MODES D2:DDTBANK5 011080 ; 3000 FF00 011081 :HILO .BYTE -1,0 3002 20A2A0 011082 INDX JSR LPAR 3005 202DA0 011083 JSR :SV3 do Nxby & Comx 3008 D035 011084 BNE :C.R unc 011085 ; 300A 20A2A0 011086 INDY JSR LPAR 300D 208FA0 011087 JSR NXBY 3010 20AAA0 011088 JSR RPAR 3013 D021 011089 BNE :C.Y unc 011090 ; 3015 A903 011091 IMM LDA #3 ; # 3017 918D 011092 STA (DINDIR),Y 3019 C8 011093 INY 301A C8 011094 INY 301B 20A6A0 011095 JSR DOLLAR 301E A59E 011096 LDA STEMP 3020 4C67A8 011097 JMP SHHEX 011098 ; 3023 A594 011099 ZX LDA ITEMP 3025 C996 011100 CMP #$96 ;CK IF EXCEPTION 3027 F00A 011101 BEQ ZY 3029 C9B6 011102 CMP #$B6 302B F006 011103 BEQ ZY 302D 208FA0 011104 :SV3 JSR NXBY 3030 4CB2A0 011105 JMP COMX 011106 ; 3033 208FA0 011107 ZY JSR NXBY 3036 4CBCA0 011108 :C.Y JMP COMY 011109 ; 3039 20A2A0 011110 IND JSR LPAR 303C 2095A0 011111 JSR NXAD 303F 4CAAA0 011112 :C.R JMP RPAR 011113 ; 3042 A594 011114 ABSX LDA ITEMP 3044 C9BE 011115 CMP #$BE 3046 F071 011116 BEQ ABSY 3048 2095A0 011117 JSR NXAD 304B 4CB2A0 011118 JMP COMX 011119 ; 304E A59E 011120 REL LDA STEMP ;NOW OFFSET 3050 2980 011121 AND #$80 3052 4980 011122 EOR #$80 3054 0A 011123 ASL A SC if back branch 3055 695C 011124 ADC #92 makes Up or Down 3057 918D 011125 STA (DINDIR),Y show the arrow 3059 AA 011126 TAX for addr displ 011127 ; 305A A59E 011128 LDA STEMP get offset again 305C 658F 011129 ADC DNDR2 CC from above 305E A8 011130 TAY save Lo 305F A590 011131 LDA DNDR2+1 get high 3061 7DA49F 011132 ADC :HILO-92,X with direction 3064 AA 011133 TAX save high 3065 98 011134 TYA get Lo 3066 18 011135 CLC 3067 6902 011136 ADC #2 adjustment 3069 48 011137 PHA save low 306A 8A 011138 TXA get high 306B 6900 011139 ADC #0 306D A00F 011140 LDY #15 306F 2067A8 011141 JSR SHHEX 3072 68 011142 PLA get low again 3073 4C67A8 011143 JMP SHHEX 011144 ; 3076 A921 011145 ACC LDA #33 ; A 3078 D047 011146 BNE SETCH 011147 ; 307A 20A2A0 011148 IZPG JSR LPAR 307D 208FA0 011149 JSR NXBY 3080 4CAAA0 011150 JMP RPAR 011151 ; PAGE 213 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' DISPLAY ADDRESSING MODES D2:DDTBANK5 3083 20A2A0 011152 ABSIX JSR LPAR 3086 2095A0 011153 JSR NXAD 3089 20B2A0 011154 JSR COMX 308C 4CAAA0 011155 JMP RPAR 011156 ; =A08F 011157 Z .EQU * 011158 ; 308F 20A6A0 011159 NXBY JSR DOLLAR 3092 D009 011160 BNE NXBY1 011161 ; 3094 60 011162 IMP RTS 011163 ; =A095 011164 ABS .EQU * 011165 ; 3095 20A6A0 011166 NXAD JSR DOLLAR 011167 ; 3098 A59F 011168 LDA STEMP+1 309A 2067A8 011169 JSR SHHEX 309D A59E 011170 NXBY1 LDA STEMP 309F 4C67A8 011171 JMP SHHEX 011172 ; 30A2 A908 011173 LPAR LDA #8 ;( 30A4 D01B 011174 BNE SETCH 011175 ; 30A6 A904 011176 DOLLAR LDA #4 ; $ 30A8 D017 011177 BNE SETCH 011178 ; 30AA A909 011179 RPAR LDA #9 ; ) 30AC D013 011180 BNE SETCH 011181 ; 30AE A90C 011182 COM LDA #12 ; , 30B0 D00F 011183 BNE SETCH 011184 ; 30B2 20AEA0 011185 COMX JSR COM 30B5 A938 011186 LDA #56 ; X 30B7 D008 011187 BNE SETCH 011188 ; 30B9 2095A0 011189 ABSY JSR NXAD 30BC 20AEA0 011190 COMY JSR COM 30BF A939 011191 LDA #57 ; Y 011192 ; 30C1 918D 011193 SETCH STA (DINDIR),Y 30C3 C8 011194 INY 30C4 60 011195 RTS 011196 ; =0000 011197 .IF [ >INDX+1]<>[ >*] 011198 .ERROR "OOPS!!! INDX" 011199 .ENDIF 011200 ; 011201 .ENDIF 011202 .INCLUDE #D:BANKC0 011203 .TITLE "MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC" 011204 .PAGE "SORT SYMBOL TABLE" PAGE 214 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC SORT SYMBOL TABLE D:BANKC0 011205 ; 011206 ; Symbol table sorter 011207 ; 30C5 011208 SORTSYMBOLS 30C5 A900 011209 SORT0 LDA #0 clear exchange 30C7 85E0 011210 STA SWAPSORT 30C9 A93F 011211 LDA #'@-1 init index 30CB 85E2 011212 STA SINDEX 011213 ; 30CD A5E2 011214 SORT1 LDA SINDEX get index 30CF E6E2 011215 INC SINDEX bump 30D1 C95B 011216 CMP #'Z+1 done a pass? 30D3 9005 011217 BCC SORT2 no 30D5 A5E0 011218 LDA SWAPSORT do another? 30D7 D0EC 011219 BNE SORT0 yup 30D9 60 011220 RTS 011221 ; 30DA 0A 011222 SORT2 ASL A double index 30DB AA 011223 TAX 30DC BC7F04 011224 LDY SPOINTER-'?*2+1,X high link 30DF 30EC 011225 BMI SORT1 nothing 011226 ; 30E1 200ABE 011227 JSR FORMTOP form topsort 011228 ; 30E4 18 011229 CLC form labelptr 30E5 8A 011230 TXA 30E6 697A 011231 ADC # SPOINTER-'?*2-4 30EB 6900 011234 ADC #0 011235 ; 011236 ; A = high X = low 011237 ; 30ED 85D9 011238 SORT11 STA BCKPTR+1 30EF 86D8 011239 STX BCKPTR 011240 ; 30F1 A005 011241 LDY #5 last? 30F3 B1E4 011242 LDA (LABELPTR),Y 30F5 30D6 011243 BMI SORT1 yup 011244 ; 30F7 2018BE 011245 JSR FORMLAB form fwd pointer 30FA 84D6 011246 STY FWDPTR 30FC 85D7 011247 STA FWDPTR+1 011248 ; 011249 ; Comparison 011250 ; 30FE A000 011251 LDY #0 compare offsets 3100 B1E4 011252 LDA (LABELPTR),Y 3102 D1D6 011253 CMP (FWDPTR),Y 3104 9005 011254 BCC SORT7 3106 F003 011255 BEQ SORT7 3108 B1D6 011256 LDA (FWDPTR),Y 310A 88 011257 DEY set Y =$FF 011258 ; 310B 85AF 011259 SORT7 STA MAXSORT 310D C6AF 011260 DEC MAXSORT 310F 84E1 011261 STY HILOSORT 3111 A006 011262 LDY #6 compare chars 3113 D009 011263 BNE SORT9 skip 1st char 011264 ; 3115 C8 011265 SORT8 INY bump to next 3116 B1E4 011266 LDA (LABELPTR),Y 3118 D1D6 011267 CMP (FWDPTR),Y 311A 902B 011268 BCC NOTSWAP 311C D008 011269 BNE YESSWAP 011270 ; 311E C4AF 011271 SORT9 CPY MAXSORT at length? 3120 90F3 011272 BCC SORT8 no 3122 A5E1 011273 LDA HILOSORT by offset 3124 F021 011274 BEQ NOTSWAP smaller in place 011275 ; 3126 A005 011276 YESSWAP LDY #5 index for exchange PAGE 215 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC SORT SYMBOL TABLE D:BANKC0 3128 84E0 011277 STY SWAPSORT show exch (<>0) 011278 ; 312A B1E4 011279 SORT6 LDA (LABELPTR),Y 312C AA 011280 TAX 312D B1D8 011281 LDA (BCKPTR),Y 312F 91E4 011282 STA (LABELPTR),Y 3131 48 011283 PHA ff 3132 8A 011284 TXA 3133 91D8 011285 STA (BCKPTR),Y 011286 ; 3135 B1D6 011287 LDA (FWDPTR),Y 3137 91E4 011288 STA (LABELPTR),Y 3139 68 011289 PLA ff 313A 91D6 011290 STA (FWDPTR),Y 011291 ; 313C 88 011292 DEY 313D C004 011293 CPY #4 313F B0E9 011294 BCS SORT6 011295 ; 3141 A6D6 011296 LDX FWDPTR save fwd pointer 3143 A5D7 011297 LDA FWDPTR+1 3145 D0A6 011298 BNE SORT11 unc 011299 ; 3147 011300 NOTSWAP 3147 A6E4 011301 LDX LABELPTR save topsort 3149 A5E5 011302 LDA LABELPTR+1 011303 ; 314B A4D6 011304 LDY FWDPTR point to new 314D 84E4 011305 STY LABELPTR topsort 314F A4D7 011306 LDY FWDPTR+1 3151 84E5 011307 STY LABELPTR+1 3153 D098 011308 BNE SORT11 unc 011309 .INCLUDE #D:BANKC1 011310 .PAGE "CONVERT TOKEN LINE TO ASCII" PAGE 216 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT TOKEN LINE TO ASCII D:BANKC1 011311 ; 011312 ; Decode & move text line pointed 011313 ; to by STMCUR to inbuff 011314 ; 3155 011315 _EDTV 3155 85B0 011316 STA CMDLG save line length 3157 8697 011317 STX LABPT pointer to 3159 8498 011318 STY LABPT+1 tokenized line 315B A000 011319 LDY #0 clear text index 315D 84F2 011320 STY CIX 315F 2051DA 011321 JSR INTLBF 3162 A6A9 011322 LDX SUPR do line #? 3164 D03B 011323 BNE COV2 nope! 011324 ; 3166 C8 011325 INY move line # (Y=1) 3167 B197 011326 LDA (LABPT),Y to FR0 for 3169 85D5 011327 STA FR0+1 conversion to ASCII 316B A197 011328 LDA (LABPT,X) (X=0) 316D 85D4 011329 STA FR0 316F 2075B7 011330 JSR INII integer to ascii 3172 2051DA 011331 JSR INTLBF 3175 A0FF 011332 LDY #-1 011333 ; 3177 C8 011334 :CC1 INY find end of number 3178 B1F3 011335 LDA (INBUFF),Y 317A 10FB 011336 BPL :CC1 317C 297F 011337 AND #$7F mask 7th bit 317E 91F3 011338 STA (INBUFF),Y 3180 C8 011339 INY 3181 84F2 011340 STY CIX start of text index 3183 24CF 011341 BIT SYSTEM bump colunm? 3185 3001 011342 BMI :CC2 3187 C8 011343 INY 3188 84B2 011344 :CC2 STY RPSP char past l. # 318A A5A2 011345 LDA EAF in Asm mode? 318C F010 011346 BEQ :REGL no 011347 ; 318E A5B5 011348 LDA INMAC in Macrox? 3190 F00C 011349 BEQ :REGL no 3192 A5FC 011350 LDA OPTFLAG option 'no num'? 3194 2910 011351 AND #$10 3196 F006 011352 BEQ :REGL 011353 ; 3198 0A 011354 ASL A A=$20, change 3199 91F3 011355 :CGI STA (INBUFF),Y line # to spaces 319B 88 011356 DEY 319C 10FB 011357 BPL :CGI 011358 ; 319E 207FB4 011359 :REGL JSR P20 always leading space 31A1 A002 011360 COV2 LDY #2 init labpt ptr 31A3 84FD 011361 STY TTIX 011362 .PAGE PAGE 217 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT TOKEN LINE TO ASCII D:BANKC1 011363 ; 011364 ; Convert tokens to text 011365 ; 31A5 20BCA2 011366 PU1 JSR IFD get token 31A8 B059 011367 BCS PU9 br if end 31AA F05A 011368 BEQ CVER convert error 31AC 1012 011369 BPL CVST a statement 31AE 20D4A2 011370 JSR CVLB convert label =0001 011371 .IF __PRT 31B1 A4A9 011372 LDY SUPR user want PRINT? 31B3 F0F0 011373 BEQ PU1 no 31B5 C93A 011374 CMP #': already do ':'? 31B7 F0EC 011375 BEQ PU1 yup 31B9 A93A 011376 LDA #': else, tack it on 31BB 2083B4 011377 JSR P58 31BE D0E5 011378 BNE PU1 unc 011379 .ELSE 011380 BEQ PU1 unc, get nxt 011381 .ENDIF 011382 ; 31C0 C958 011383 CVST CMP #@SCOMMENT comment? 31C2 F055 011384 BEQ STMC statement commt 31C4 AA 011385 TAX save code 31C5 20F0A2 011386 JSR IFSTU handle IF indent 011387 ; do 1st tab 31C8 011388 :TB1 =0000 011389 .IF .NOT __PRT 011390 JSR P20 pad spaces 011391 CPY ZTAB1 at nxt colunm? 011392 BCC :TB1 no 011393 .ELSE 31C8 2084AF 011394 JSR __PRTT1 011395 .ENDIF 011396 ; 31CB 8A 011397 TXA the code 31CC A0A0 011398 LDY # >STATEMENT 31CE A23A 011399 LDX # ERES 320C 85D5 011450 STA FR0+1 320E 2080BE 011451 JSR LOO3 mv error string 3211 3017 011452 BMI DOCMTS unc 011453 ; 3213 011454 DOCMTF ; do 3rd tab 3213 011455 :TB3 =0000 011456 .IF .NOT __PRT 011457 JSR P20 fill spaces 011458 CPY TAB3 at column? 011459 BCC :TB3 no 011460 BCS DOCMTS 011461 .ELSE 3213 2090AF 011462 JSR __PRTT3 3216 4C2AA2 011463 JMP DOCMTS 011464 .ENDIF 011465 ; 3219 AE9D04 011466 STMC LDX CPAD pad with spaces? 321C F00C 011467 BEQ DOCMTS no 321E 20BCA2 011468 JSR IFD get leading char 3221 2083B4 011469 JSR P58 out it 3224 207FB4 011470 :STMC JSR P20 do padding now 3227 CA 011471 DEX 3228 D0FA 011472 BNE :STMC 011473 ; 322A 20BCA2 011474 DOCMTS JSR IFD out ascii text 322D B0D4 011475 BCS PU9 br if at end 322F 2083B4 011476 JSR P58 put to buffer 3232 D0F6 011477 BNE DOCMTS unc, get nxt 011478 .PAGE "CONVERT NUMBER TOKENS" PAGE 219 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT NUMBER TOKENS D:BANKC1 011479 ; 011480 ; Convert Number Tokens 011481 ; 3234 C907 011482 CVNM CMP #TDW Dec or Hex? 3236 08 011483 PHP save answer 3237 20C5A2 011484 JSR GVL get interger 323A 86D4 011485 STX FR0 low byte 323C 85D5 011486 STA FR0+1 high byte 323E 28 011487 PLP pop num type 323F B006 011488 BCS DODC br if dec 3241 209CA2 011489 JSR HEX1 else, hex # 3244 4CE0A1 011490 JMP CVFUNT get nxt 011491 ; 011492 ; Decimal # 011493 ; 3247 011494 DODC ; mv interger to 3247 85EA 011495 STA ZTE4 holding area 3249 86EB 011496 STX ZTE4+1 X=Fr0 324B A900 011497 LDA #0 clear result 324D 85D5 011498 STA FR0+1 324F 85D6 011499 STA FR0+2 3251 85D7 011500 STA FR0+3 011501 ; 3253 A00F 011502 LDY #15 convert to 3 3255 F8 011503 SED byte packed BCD 3256 06EB 011504 DC2 ASL ZTE4+1 format 3258 26EA 011505 ROL ZTE4 325A A203 011506 LDX #3 325C B5D4 011507 DC3 LDA FR0,X 325E 75D4 011508 ADC FR0,X 3260 95D4 011509 STA FR0,X 3262 CA 011510 DEX 3263 D0F7 011511 BNE DC3 3265 88 011512 DEY 3266 10EE 011513 BPL DC2 if not 16 times 3268 D8 011514 CLD clear dec mode 011515 ; 3269 E8 011516 INX X=1 326A A5D5 011517 LDA FR0+1 speed up for #s 326C 05D6 011518 ORA FR0+2 less than 100 326E D00B 011519 BNE UNPACK no, go unpack 3270 E8 011520 INX point to last BCD 011521 ; 3271 E8 011522 UNPH INX high nibble 3272 B5D4 011523 LDA FR0,X 3274 4A 011524 LSR A shift in position 3275 4A 011525 LSR A 3276 4A 011526 LSR A 3277 4A 011527 LSR A 3278 208FA2 011528 JSR OUT 011529 ; 327B B5D4 011530 UNPACK LDA FR0,X low nibble 327D E003 011531 CPX #3 set end? status 327F 08 011532 PHP save it 3280 9002 011533 BCC CVR1 don't force 0 3282 A000 011534 LDY #0 end, always do 0 011535 ; 3284 290F 011536 CVR1 AND #$0F mask off high 3286 208FA2 011537 JSR OUT make it ascii 3289 28 011538 PLP get end? status 328A 90E5 011539 BCC UNPH no, more to do 328C 4CE0A1 011540 JMP CVFUNT get nxt function 011541 ; 328F D003 011542 OUT BNE ?O? if non-zero, else 3291 98 011543 TYA ck supress flag 3292 D007 011544 BNE ?K? br, skip leading 0 011545 ; 3294 0930 011546 ?O? ORA #$30 for ascii 3296 2083B4 011547 JSR P58 to buffer 3299 A000 011548 LDY #0 clear supress flag 329B 60 011549 ?K? RTS return 011550 .PAGE PAGE 220 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT NUMBER TOKENS D:BANKC1 011551 ; 011552 ; Hex # 011553 ; 329C A924 011554 HEX1 LDA #'$ leading $ sign 329E 2083B4 011555 JSR P58 32A1 A5D5 011556 LDA FR0+1 skip high if 0 32A3 F003 011557 BEQ HXL 32A5 20AAA2 011558 JSR HEXC high byte 011559 ; 32A8 A5D4 011560 HXL LDA FR0 low byte 011561 ; 32AA 48 011562 HEXC PHA save byte 32AB 4A 011563 LSR A shift high 32AC 4A 011564 LSR A into position 32AD 4A 011565 LSR A 32AE 4A 011566 LSR A 32AF 20B5A2 011567 JSR HXS do nibble 011568 ; 32B2 68 011569 PLA pop byte 32B3 290F 011570 AND #$0F mask high 32B5 A8 011571 HXS TAY index into convr 32B6 B992B7 011572 LDA HEXT,Y tab, and to buff 32B9 4C83B4 011573 JMP P58 unc 011574 .PAGE "CONVERT ROUTINE MISC" PAGE 221 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT ROUTINE MISC D:BANKC1 011575 ; 011576 ; Increment List Token Pointer 011577 ; 32BC E6FD 011578 IFD INC TTIX bump index 32BE A4FD 011579 LDY TTIX get index 32C0 C4B0 011580 CPY CMDLG set end status 32C2 B197 011581 LDA (LABPT),Y get token 32C4 60 011582 RTS 011583 ; 011584 ; Get nums for cvnm 011585 ; 32C5 4A 011586 GVL LSR A single or double? 32C6 08 011587 PHP cc=single 32C7 20BCA2 011588 JSR IFD get token 32CA AA 011589 TAX low byte 32CB 28 011590 PLP x 32CC B0EE 011591 BCS IFD get high & rtn 32CE A900 011592 LDA #0 set high =0 32D0 60 011593 RTS 011594 ; 011595 ; Convert Token Symbols 011596 ; 32D1 20BCA2 011597 CVMR JSR IFD for macrox name 32D4 011598 CVLB 32D4 297F 011599 AND #$7F count +128 in A 32D6 AA 011600 TAX use as cntr =0001 011601 .IF __PRT 32D7 A5A9 011602 LDA SUPR 32D9 F00B 011603 BEQ :VL1 32DB 20BCA2 011604 JSR IFD convert LOCALs 32DE C93A 011605 CMP #': to ST type LOCALs 32E0 D007 011606 BNE :VL2 32E2 A92E 011607 LDA #'. 32E4 D003 011608 BNE :VL2 011609 .ENDIF 32E6 20BCA2 011610 :VL1 JSR IFD get char 32E9 2083B4 011611 :VL2 JSR P58 put char 32EC CA 011612 DEX pop cnt 32ED D0F7 011613 BNE :VL1 br if not done 32EF 60 011614 RTS 011615 .PAGE PAGE 222 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC CONVERT ROUTINE MISC D:BANKC1 011616 ; 011617 ; Do Structered Listing Format 011618 ; 32F0 E001 011619 IFSTU CPX #@IF is it if? 32F2 D01A 011620 BNE :ATA no 32F4 20F7A2 011621 JSR :IF0 bump tabs 32F7 E6B6 011622 :IF0 INC ZTAB1 by 2 spaces 32F9 E6B7 011623 INC ZTAB2 32FB 60 011624 RTS 011625 ; 32FC E003 011626 EFSTU CPX #@ENDIF Endif? 32FE D00E 011627 BNE :ATA 3300 A5B6 011628 LDA ZTAB1 tst for 3302 CD8A04 011629 CMP TAB1 bottom 3305 F007 011630 BEQ :ATA don't pop tabs 3307 200AA3 011631 JSR :IF1 330A C6B6 011632 :IF1 DEC ZTAB1 330C C6B7 011633 DEC ZTAB2 330E 60 011634 :ATA RTS 011635 ; 011636 .PAGE "HANDLE RIGHT MARGIN" PAGE 223 MAC XL CARTRIDGE (C) 1982,1983 Stephen D. Lawrow BANKC HANDLE RIGHT MARGIN D:BANKC1 011637 ; 330F 011638 RIGHTMR 330F A5F2 011639 LDA CIX form line length 3311 18 011640 CLC 3312 6D9904 011641 ADC LEFTMAR left margin 3315 6910 011642 ADC #16 object field 3317 CD9A04 011643 CMP RIGHTMAR 331A F002 011644 BEQ *+4 331C B003 011645 BCS HRGHT greater than, go process 011646 ; 331E 4C4BB5 011647 JMP INBOUT it's within margins 011648 ; 3321 AD9A04 011649 HRGHT LDA RIGHTMAR form lbuff index 3324 ED9904 011650 SBC LEFTMAR 3327 E910 011651 SBC #16 3329 A8 011652 TAY search back index 332A 48 011653 PHA in case fail 332B A20E 011654 LDX #14 limit of twelve characters 011655 ; 332D 88 011656 LOO6 DEY 332E CA 011657 DEX 332F 302B 011658 BMI LOO7 no space! 3331 B1F3 011659 LDA (INBUFF),Y 3333 C920 011660 CMP #$20 3335 D0F6 011661 BNE LOO6 011662 ; 3337 68 011663 PLA balance stack 3338 A99B 011664 LDA #EOL rep space with Eol 333A 91F3 011665 STA (INBUFF),Y 333C C8 011666 INY 333D 84FD 011667 STY TTIX character past Eol 333F 204BB5 011668 JSR INBOUT print this portion 011669 ; 3342 011670 VECT1 3342 A5FD 011671 LDA TTIX save buffer index 3344 48 011672 PHA 3345 2000B8 011673 JSR TSTEJ new line stuff 3348 2051DA 011674 JSR INTLBF if eject, reset inbuff 334B AD9904 011675 LDA LEFTMAR 334E 18 011676 CLC 334F 6911 011677 ADC #17 3351 6D8C04 011678 ADC TAB3 begin at comment column 3354 20B1B5 011679 JSR SPACE 3357 68 011680 PLA 3358 A8 011681 TAY dump remainder of line 3359 4C4DB5 011682 JMP INBOUT1 011683 ; 011684 ; No space, just chop 011685 ; 335C 68 011686 LOO7 PLA saved index 335D A8 011687 TAY 335E 88 011688 DEY 335F 84FD 011689 STY TTIX 3361 B1F3 011690 LDA (INBUFF),Y 3363 48 011691 PHA replace with Eol 3364 A99B 011692 LDA #EOL 3366 91F3 011693 STA (INBUFF),Y 3368 204BB5 011694 JSR INBOUT print first segment 336B 68 011695 PLA restore clobbered char 336C A4FD 011696 LDY TTIX 336E 91F3 011697 STA (INBUFF),Y 3370 4C42A3 011698 JMP VECT1 go print rest 011699 ; =0001 011700 .IF DDT? 011701 .INCLUDE #D2:DDTBANK1 011702 .TITLE "MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C'" 011703 .PAGE "MAIN LOOP" PAGE 224 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' MAIN LOOP D2:DDTBANK1 =0001 011704 .LOCAL 011705 ; 011706 ; THIS IS THE MAIN ACTIVE 011707 ; DDT LOOP 011708 ; 3373 20ABAB 011709 DBND5 JSR SETPU ;CLEAR THE COMMAND BUFFER 011710 * 3376 A00E 011711 LDY #14 ;NUM. OF SPACES TO CLEAR 3378 A900 011712 LDA #0 337A 918D 011713 CLRC1 STA (DINDIR),Y 337C 88 011714 DEY 337D 10FB 011715 BPL CLRC1 337F C8 011716 INY 3380 A980 011717 LDA #$80 3382 918D 011718 STA (DINDIR),Y 3384 8495 011719 STY CHCOL 011720 ; 3386 AD1004 011721 DBND5A LDA SSFLG ;CK IF IN AUTO MODE 3389 F030 011722 BEQ DBN56 338B A511 011723 LDA BRKKEY ;CK IF BREAK HAS BEEN HIT 338D D024 011724 BNE DBN55 338F E611 011725 INC BRKKEY ;TURN OFF BREAK INDICATOR 3391 A900 011726 DBN60 LDA #0 3393 8D1004 011727 STA SSFLG ;OK, SO TURN OFF SS AUTO FLAG 3396 AD0D04 011728 LDA CRSTAT 3399 8DF002 011729 STA CRSINH ;ALSO RESTORE CURSOR STATE 339C A58C 011730 LDA POKSAV 339E 057F 011731 ORA $7F 33A0 2510 011732 AND POKMSK 33A2 8510 011733 STA POKMSK 33A4 8D0ED2 011734 STA IRQEN 33A7 A591 011735 LDA DSCNFL ;SET SCREEN TODBUG 33A9 D010 011736 BNE DBN56 33AB 2058A5 011737 JSR PCSEXA 33AE 2065A5 011738 JSR SCTOG 33B1 D008 011739 BNE DBN56 33B3 200FAB 011740 DBN55 JSR GTNXIN ;CK NEXT INST 33B6 F0D9 011741 BEQ DBN60 33B8 4CEDA9 011742 JMP SSTEP1 ;SO, GO DO NEXT INSTR. 33BB A901 011743 DBN56 LDA #1 ;CK IF START PRESSED 33BD 2C1FD0 011744 BIT CONSOL 33C0 D006 011745 BNE DCON2 33C2 2066A7 011746 JSR DEBOUN 33C5 4C0AA4 011747 JMP DCONT 011748 ; 011749 ; 33C8 AD1FD0 011750 DCON2 LDA CONSOL ;CK IF SELECT 33CB 2902 011751 AND #2 33CD D008 011752 BNE DCON1 33CF 2065A5 011753 JSR SCTOG ;TOGGLE SCREEN 33D2 2066A7 011754 JSR DEBOUN 33D5 F09C 011755 BEQ DBND5 011756 ; 33D7 A904 011757 DCON1 LDA #4 33D9 2C1FD0 011758 BIT CONSOL ;CK IF OPTION 33DC D006 011759 BNE DCMDI 33DE 2066A7 011760 JSR DEBOUN 33E1 4CE3A9 011761 JMP SSTEP 011762 ; 33E4 2077AB 011763 DCMDI JSR CKGETC ;CK KEYPRESS 33E7 B09D 011764 BCS DBND5A 33E9 A20D 011765 LDX #13 ;NUM OF VALUES TO TRY 33EB DD2AA4 011766 ONLI1 CMP KEYTB,X ;CK VALUE 33EE F006 011767 BEQ ONLI2 33F0 CA 011768 DEX ;IF NOT IT, GET READY FOR NEXT 33F1 10F8 011769 BPL ONLI1 33F3 4C86A3 011770 JMP DBND5A 011771 ; 33F6 8A 011772 ONLI2 TXA 33F7 0A 011773 ASL A 33F8 A8 011774 TAY 33F9 B947A4 011775 LDA KEYRU+1,Y PAGE 225 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' MAIN LOOP D2:DDTBANK1 33FC 48 011776 PHA 33FD B946A4 011777 LDA KEYRU,Y 3400 48 011778 PHA 3401 BD38A4 011779 LDA CMDCD,X ;GET THE INTERNAL REP. 3404 2061AB 011780 JSR CLICK ;CLICK 3407 4C9AAB 011781 JMP PUTCH ;PUT CHAR & CALL KEY ROUTINE 011782 ; 011783 ; 340A 2061A5 011784 DCONT JSR USERSC 340D A9C0 011785 LDA #$C0 340F 8D0ED4 011786 STA NMIEN ;RESTORE NMI S 3412 A688 011787 LDX SPSAV ;RESTORE STACK POINTER 3414 9A 011788 TXS 3415 A58B 011789 LDA PCSAV+1 ;NOW RESTORE STATE 3417 48 011790 PHA 3418 A58A 011791 LDA PCSAV 341A 48 011792 PHA 341B A589 011793 LDA PSAV 341D 48 011794 PHA 341E A686 011795 LDX XSAV 3420 A487 011796 LDY YSAV 3422 A953 011797 LDA #83 3424 8D0F04 011798 STA DDTACT ;ENABLE FLASH ENTRY 3427 A585 011799 LDA ASAV 3429 40 011800 RTI 011801 ; 011802 .PAGE PAGE 226 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' MAIN LOOP D2:DDTBANK1 342A 2A3D1528 011803 KEYTB .BYTE 42,61,21,40,58,15,13 342E 3A0F0D 3431 2E0E3E07 011804 .BYTE 46,14,62,7,35,$2F 3435 232F 3437 25 011805 .BYTE $25 011806 ; 3438 25272232 011807 CMDCD .BYTE 37,39,34,50,36,93,41 343C 245D29 343F 375C330A 011808 .BYTE 55,92,51,10,46,49 3443 2E31 3445 2D 011809 .BYTE $2D 011810 ; 011811 ; 3446 28AC 011812 KEYRU .WORD EXAM-1,GO-1,STBRK-1,REGIS-1,DEPOS-1 3448 E2AC 344A CAAD 344C FAAD 344E 01AD 3450 B3AB 011813 .WORD PULLWI-1,INTERP-1,CHWIN-1 3452 F7AB 3454 88AE 3456 D4AB 011814 .WORD PUSHW-1,SERCH-1,PCSET-1,NEXT-1,QUITDDT-1 3458 59AD 345A 67AE 345C 12AC 345E F5BE 3460 99AD 011815 .WORD MOVE-1 011816 ; 011817 .PAGE "FLASH (KEYBOARD) ENTRY" PAGE 227 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' FLASH (KEYBOARD) ENTRY D2:DDTBANK1 011818 * 011819 * FLASH (KEYBOARD) ENTRY 011820 * 3462 AD09D2 011821 _NKYBD LDA KBCODE ;GET KEYBOARD CHARACTER 3465 C99C 011822 CMP #DBCHR 3467 D019 011823 BNE NKYB3 ;IF NOT DBUG ENTRY CHAR. CONTINUE 3469 A9FF 011824 LDA #$FF 346B 8DFC02 011825 STA CHR 346E AD0F04 011826 LDA DDTACT ;CK IF DDT ALREADY ACTIVE 3471 C945 011827 CMP #69 ;ALREADY THERE 3473 D004 011828 BNE NKYB4 3475 A99C 011829 LDA #DBCHR 3477 D009 011830 BNE NKYB3 3479 68 011831 NKYB4 PLA 347A 28 011832 PLP 347B 2087A4 011833 JSR SAVE 347E 68 011834 PLA 347F 4C36BF 011835 JMP DDTX1A 011836 ; 3482 6C0B04 011837 NKYB3 JMP (VKEYSV) 011838 ; 3485 ACBE 011839 KEYLD .WORD NKYBD 011840 ; 011841 * ********************************** 011842 * 011843 * SAVE CALLER'S STATUS 011844 * (EXCEPT STACK REGISTER) 011845 * 3487 8585 011846 SAVE STA ASAV ;A 3489 08 011847 PHP 348A A945 011848 LDA #69 348C 8D0F04 011849 STA DDTACT ;DISABLE FLASH ENTRY 348F 68 011850 PLA 3490 8589 011851 STA PSAV ;P 3492 8686 011852 STX XSAV ;X 3494 8487 011853 STY YSAV ;Y 3496 D8 011854 CLD ;NO DECIMAL MODE 3497 38 011855 SEC ;FOR PC MANIPULATION 3498 60 011856 RTS ;RETURN 011857 ; 3499 222324 011858 SAVAD .BYTE DDTLST 34B0 8D3102 011872 STA SDLSTL+1 34B3 60 011873 RTS 011874 ; =0020 011875 :DIF = DSCD3-DSCD2 34B4 04090E13 011876 SEPTB .BYTE 4,9,14,19,28 34B8 1C 34B9 24272A 011877 .BYTE :DIF+4,:DIF+7,:DIF+10 34BC 2D30 011878 .BYTE :DIF+13,:DIF+16 011879 ; 011880 * ************** 011881 * 011882 * SUBROUTINE SETBP 011883 * (SET BREAKPOINT) 011884 * 011885 * ACC = BREAKPOINT # 011886 * BTEMP = BREAKPOINT LOC. 011887 * 34BE 2051A5 011888 SETBP JSR TIMES3 34C1 BD6D05 011889 LDA BRKP0,X ;CK IF SET 34C4 1D6E05 011890 ORA BRKP0+1,X 34C7 F01D 011891 BEQ SETB2 34C9 A592 011892 LDA BTEMP 34CB 48 011893 PHA ;SAVE TEMP 34CC A593 011894 LDA BTEMP+1 34CE 48 011895 PHA 34CF BD6D05 011896 LDA BRKP0,X ;IF NOT, FIRST RESTORE 34D2 8592 011897 STA BTEMP 34D4 BD6E05 011898 LDA BRKP0+1,X 34D7 8593 011899 STA BTEMP+1 34D9 8A 011900 TXA 34DA 48 011901 PHA 34DB 2017A5 011902 JSR RESTOR 34DE 68 011903 PLA 34DF AA 011904 TAX 34E0 68 011905 PLA ;NOW RESTORE BTEMP 34E1 8593 011906 STA BTEMP+1 34E3 68 011907 PLA 34E4 8592 011908 STA BTEMP 34E6 A000 011909 SETB2 LDY #0 ;SET=0 FOR DINDIR 34E8 A593 011910 LDA BTEMP+1 34EA 858E 011911 STA DINDIR+1 34EC 9D6E05 011912 STA BRKP0+1,X ;SET UP POINTER TO BREAKPOINT 34EF A592 011913 LDA BTEMP 34F1 858D 011914 STA DINDIR 34F3 9D6D05 011915 STA BRKP0,X 34F6 B18D 011916 LDA (DINDIR),Y ;GET CURRENT VALUE 34F8 9D6F05 011917 STA BRKP0+2,X ;AND SAVE 34FB A900 011918 LDA #0 34FD 918D 011919 STA (DINDIR),Y ;SET BREAKPOINT 011920 ; 34FF A92B 011921 SDDTX LDA # DDTX 3506 8D0702 011924 STA VBREAK+1 3509 60 011925 :RSTE RTS 011926 * *************** 011927 * CLEAR BREAKPOINT 011928 * 011929 * ACC=BRKPT TO CLEAR 011930 * 350A 2051A5 011931 CLBRK JSR TIMES3 350D BD6D05 011932 LDA BRKP0,X 3510 8592 011933 STA BTEMP 3512 BD6E05 011934 LDA BRKP0+1,X 3515 8593 011935 STA BTEMP+1 PAGE 229 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' FLASH (KEYBOARD) ENTRY D2:DDTBANK2+3 011936 ; 011937 * ************** 011938 * RESTORE BREAKPOINT 011939 * 3517 A592 011940 RESTOR LDA BTEMP 3519 858D 011941 STA DINDIR 351B A593 011942 LDA BTEMP+1 351D 858E 011943 STA DINDIR+1 351F 2036A5 011944 JSR STBPP ;SET POINTER 3522 B0E5 011945 BCS :RSTE ;IF NOT FOUND, EXIT 011946 ; 3524 BD6F05 011947 REST6 LDA BRKP0+2,X ;GET PROPER INSTRUCTION 3527 A000 011948 LDY #0 ;SET UP Y FOR DINDIRECT 3529 918D 011949 STA (DINDIR),Y ;RESTORE 352B 98 011950 TYA ;MOVE 0 TO ACC 352C 9D6D05 011951 STA BRKP0,X 352F 9D6E05 011952 STA BRKP0+1,X ;CLEAR OUT BREAKPOINT 3532 9D6F05 011953 STA BRKP0+2,X 3535 60 011954 RTS 011955 ; 011956 * ************** 011957 * 011958 * SUBROUTINE STBPP 011959 * (SET BREAKPOINT POINTER) 011960 * 3536 A200 011961 STBPP LDX #0 ;GET READY TO RESTORE INSTRUCTION 3538 A592 011962 REST0 LDA BTEMP ;LOAD A WITH LOW BYTE OF BRKP LOC 353A DD6D05 011963 CMP BRKP0,X ;THIS SHOULD EQUAL ONE OF THE BRKPs 353D F009 011964 BEQ REST1 ;IS THIS IT? 353F E8 011965 REST3 INX ; NO. INCREMENT X AND TRY AGAIN 3540 E8 011966 INX 3541 E8 011967 INX 3542 E00F 011968 CPX #15 ;CK IF AT END OF TABLE 3544 D0F2 011969 BNE REST0 3546 38 011970 SEC ;SET NOT FOUND FLAG 3547 60 011971 RTS 011972 ; 011973 ; FIRST BYTE WAS EQUAL 011974 ; 3548 A593 011975 REST1 LDA BTEMP+1 ;GET HIGH BYTE OF PC 354A DD6E05 011976 CMP BRKP0+1,X ;IS THIS IT? 354D D0F0 011977 BNE REST3 ;NO, TRY AGAIN 011978 ; 011979 ; SECOND BYTE EQUAL 354F 18 011980 CLC 3550 60 011981 RTS 011982 * ************ 011983 * TIMES 3 011984 * 011985 * MULTIPLY BY 3 AND PUT IN X REG 011986 * 3551 85A0 011987 TIMES3 STA ITBYTE ;SAVE VALUE TEMPORARILY 3553 0A 011988 ASL A ;MULTIPLY *2 3554 65A0 011989 ADC ITBYTE 3556 AA 011990 TAX 3557 60 011991 RTS 011992 ; 011993 * ************************** 011994 * MOVE PCSAV TO EXAMWI 011995 * 3558 A58A 011996 PCSEXA LDA PCSAV 355A 8596 011997 STA EXAMWI 355C A58B 011998 LDA PCSAV+1 355E 8597 011999 STA EXAMWI+1 3560 60 012000 USER1 RTS 012001 * 012002 * SET USER SCREEN 012003 * 3561 A591 012004 USERSC LDA DSCNFL ;CK STATE OF DISPLAY 3563 F0FB 012005 BEQ USER1 ;TOGGLE SCREEN IF NECESSARY 012006 * 012007 * TOGGLES BETWEEN DDT SCREEN & PAGE 230 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' FLASH (KEYBOARD) ENTRY D2:DDTBANK2+3 012008 * THE NORMAL ONE 012009 * =A565 012010 SCTOG = * 3565 A200 012011 LDX #0 3567 8E0ED4 012012 STX NMIEN zap all interrupts 356A A591 012013 LDA DSCNFL 356C F020 012014 BEQ DBSC1 ;CK WHAT STATE THE SCREEN IS IN 356E 8691 012015 STX DSCNFL 012016 ; 3570 A20C 012017 LDX #12 restore graphics 3572 BC99A4 012018 :RSGR LDY SAVAD,X 3575 BDFD03 012019 LDA GRSAV,X 3578 990002 012020 STA $0200,Y 357B CA 012021 DEX 357C 10F4 012022 BPL :RSGR 012023 ; =0000 012024 .IF 0 not needed??? 012025 LDA SDLSTL 012026 STA DLISTL 012027 LDA SDLSTL+1 012028 STA DLISTL+1 012029 .ENDIF 357E AD2F02 012030 LDA SDMCTL 012031 ; STA DMACTL not needed??? 3581 290C 012032 AND #$0C 3583 4A 012033 LSR A 3584 4A 012034 LSR A 3585 8D1DD0 012035 STA GRACTL 3588 A9C0 012036 LDA #$C0 358A 8D0ED4 012037 STA NMIEN ;ALLOW DMA 358D 60 012038 RTS 012039 ; 358E E691 012040 DBSC1 INC DSCNFL 3590 A20D 012041 LDX #13 save graphics 3592 BC98A4 012042 :SVGP LDY SAVAD-1,X 3595 B90002 012043 LDA $0200,Y 3598 9DFC03 012044 STA GRSAV-1,X 359B CA 012045 DEX 359C D0F4 012046 BNE :SVGP 012047 ; X=0 359E 8E6F02 012048 STX GPRIOR ;SET PRIORITY 012049 ; 012050 ; CLEAR AND SET UP THE SCREEN 012051 ; 35A1 8A 012052 TXA Set A=0 35A2 9D1104 012053 :CDSC STA DSCD1,X 35A5 9D2D04 012054 STA DSCD1+[284-256],X 35A8 CA 012055 DEX 35A9 D0F7 012056 BNE :CDSC 012057 ; 012058 ; NOW DRAW SEPARATOR LINES 012059 ; 35AB A20A 012060 LDX #10 =0001 012061 .IF TEXT=10 35AD 8EC502 012062 STX COLOR1 012063 .ENDIF 35B0 A97C 012064 LDA #124 35B2 BCB3A4 012065 :DLI3 LDY SEPTB-1,X 35B5 992D05 012066 STA DSCD2,Y 35B8 CA 012067 DEX 35B9 D0F7 012068 BNE :DLI3 X=0 012069 ; 012070 ; AND SET UP DBUG COLOR REGS 012071 ; =0000 012072 .IF BORDR<>4 012073 LDA #BORDR 012074 STA COLOR4 012075 .ENDIF =0000 012076 .IF TEXT<>10 012077 LDA #TEXT 012078 STA COLOR1 012079 .ENDIF PAGE 231 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' FLASH (KEYBOARD) ENTRY D2:DDTBANK2+3 =0000 012080 .IF BKGND<>0 012081 LDA #BKGND 012082 STA COLOR2 012083 .ENDIF 35BB A902 012084 LDA # KCHACT 35C2 8DF402 012087 STA CHACT+1 35C5 20A6A4 012088 JSR SETDL 35C8 A204 012089 LDX #4 35CA A900 012090 LDA #0 =0001 012091 .IF BORDR=4 35CC 8EC802 012092 STX COLOR4 012093 .ENDIF =0001 012094 .IF BKGND=0 35CF 8DC602 012095 STA COLOR2 012096 .ENDIF 35D2 8D1DD0 012097 STA GRACTL 35D5 9D0DD0 012098 :TOG1 STA GRAFP0,X 35D8 CA 012099 DEX 35D9 10FA 012100 BPL :TOG1 35DB A921 012101 LDA #$21 narrow screen 35DD 8D2F02 012102 STA SDMCTL 012103 ; STA DMACTL not needed??? 012104 ; 35E0 A95F 012105 LDA # KVVBKI 35E7 8E2302 012108 STX VVBLKI+1 35EA A962 012109 LDA # KVVBKD]<>[ >KVVBKI] 012112 LDX # >KVVBKD 012113 .ENDIF 35EF 8E2502 012114 STX VVBLKD+1 35F2 A940 012115 LDA #$40 35F4 8D0ED4 012116 STA NMIEN 012117 ; AND UPDATE DYNAMIC PARTS 012118 ; 012119 .PAGE "SHOW SCREEN" PAGE 232 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK2+3 012120 ; 012121 ; SHOW SCREEN 012122 ; 35F7 A92D 012123 SSCRN LDA # DSCD2 35FD 858E 012126 STA DINDIR+1 35FF A203 012127 LDX #3 3601 A900 012128 LDA #0 3603 A01D 012129 LDY #29 3605 918D 012130 SHBK0 STA (DINDIR),Y 3607 C8 012131 INY 3608 CA 012132 DEX 3609 D0FA 012133 BNE SHBK0 360B A8 012134 TAY 360C BD7105 012135 SHBK1 LDA BRKP0+4,X ;GET FIRST BYTE OF ADDRESS 360F 2067A8 012136 JSR SHHEX 3612 BD7005 012137 LDA BRKP0+3,X 3615 2067A8 012138 JSR SHHEX 3618 E8 012139 INX 3619 E8 012140 INX 361A E8 012141 INX 361B C8 012142 INY 361C C014 012143 CPY #20 361E D0EC 012144 BNE SHBK1 3620 2029A8 012145 JSR SHSTAT ;AND REGISTER STATE 012146 ; AND FALL INTO DWIND 012147 * ******************************** 012148 * DISPLAY WINDOW 012149 * 3623 A596 012150 DWIND LDA EXAMWI 012151 ; SEC 012152 ; SBC #2 3625 858F 012153 STA DNDR2 ;BACK WINDOW UP 2 3627 A597 012154 LDA EXAMWI+1 012155 ; SBC #0 3629 8590 012156 STA DNDR2+1 362B A917 012157 LDA # <[DSCD1+6] 362D 858D 012158 STA DINDIR ;PT TO 1ST DATA AREA 362F A904 012159 LDA # >[DSCD1+6] 3631 858E 012160 STA DINDIR+1 3633 A91E 012161 LDA #$1E 3635 8D1504 012162 STA DSCD1+4 3638 A582 012163 LDA WINDF ;CK WHICH FILTER IS IN 363A F003 012164 BEQ DWIN1 363C 4CE8A6 012165 JMP DHEXW 363F A90A 012166 DWIN1 LDA #10 3641 859D 012167 STA TBYTE ;BYTES TO SHOW 3643 A900 012168 DIS1 LDA #0 3645 859C 012169 STA MPROT ;BYTES TO PROTECT INITIALLY 3647 205AA7 012170 DIS11 JSR CLIN ;CLEAR LINE 364A A590 012171 LDA DNDR2+1 ;HIGH BYTE OF ADDRESS LOC 364C 2067A8 012172 JSR SHHEX 364F A58F 012173 LDA DNDR2 3651 2067A8 012174 JSR SHHEX 3654 A002 012175 LDY #2 3656 B18F 012176 LDA (DNDR2),Y ;NOW GET 3 VALUES 3658 859F 012177 STA STEMP+1 365A 88 012178 DEY 365B B18F 012179 LDA (DNDR2),Y 365D 859E 012180 STA STEMP 365F 88 012181 DEY 3660 B18F 012182 LDA (DNDR2),Y 3662 8594 012183 STA ITEMP 3664 A006 012184 LDY #6 3666 2067A8 012185 JSR SHHEX 012186 ; 012187 ; NOW DO THE DISASSEMBLY 012188 ; 3669 A59C 012189 LDA MPROT ;CHECK IF BYTE IS PROTECTED 366B D03E 012190 BNE NXINS 366D 8584 012191 STA UNDFF ;CLEAR UNDEFINED FLAG PAGE 233 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK2+3 366F 8D0A04 012192 STA BRKOR ;AND BRK DISPLAY FLAG 3672 A594 012193 LDA ITEMP 3674 D00C 012194 BNE DIS2 ;MAKE SURE IT'S NOT A BRK 3676 2091A7 012195 JSR BRINS 3679 8594 012196 STA ITEMP 367B A980 012197 LDA #$80 367D 8D0A04 012198 STA BRKOR 3680 A594 012199 LDA ITEMP 3682 20A0A7 012200 DIS2 JSR DETLEN ;GET LENGTH OF INS. 3685 859C 012201 STA MPROT 3687 A009 012202 LDY #$09 3689 B033 012203 BCS UNDEF 368B A29E 012204 LDX #$9E ;TRY TO FIND OPCODE PATTERN 368D A594 012205 PATL1 LDA ITEMP ;GET OPCODE 368F 3DA4A8 012206 AND PATTAB,X ;MASK OFF DON'T CARES 3692 DDA5A8 012207 CMP PATTAB+1,X ;SEE IF IT MATCHES 3695 F005 012208 BEQ PATFD 3697 CA 012209 DEX 3698 CA 012210 DEX 3699 4C8DA6 012211 JMP PATL1 012212 ; 369C 8A 012213 PATFD TXA ;YEP, THIS IS IT 369D 4A 012214 LSR A ;DIVIDE BY 2 369E C938 012215 CMP #56 36A0 B02C 012216 BCS PAT65C 36A2 2051A5 012217 JSR TIMES3 36A5 2098BF 012218 JSR GMNETAB get table bank 36A8 2080A8 012219 PATJN JSR SHWAD ;AND THE ADDRESS MODE 36AB 204EA7 012220 NXINS JSR NXLINE 36AE E68F 012221 INC DNDR2 ;AND MEMORY ADDRESS 36B0 D002 012222 BNE NXI2 36B2 E690 012223 INC DNDR2+1 36B4 C69C 012224 NXI2 DEC MPROT 36B6 C69D 012225 DEC TBYTE 36B8 F003 012226 BEQ SSCR9 36BA 4C47A6 012227 JMP DIS11 36BD 60 012228 SSCR9 RTS 012229 ; 36BE A901 012230 UNDEF LDA #1 36C0 859C 012231 STA MPROT 36C2 A203 012232 LDX #3 36C4 A93F 012233 UNDF1 LDA #'? 36C6 20C1BF 012234 JSR SHLET 36C9 CA 012235 DEX 36CA D0F8 012236 BNE UNDF1 36CC F0DD 012237 BEQ NXINS 012238 ; 36CE E938 012239 PAT65C SBC #56 36D0 2051A5 012240 JSR TIMES3 36D3 BD59BF 012241 LDA MNCTAB,X ;SHOW MNEM. 36D6 20C1BF 012242 JSR SHLET 36D9 BD5ABF 012243 LDA MNCTAB+1,X 36DC 20C1BF 012244 JSR SHLET 36DF BD5BBF 012245 LDA MNCTAB+2,X 012246 ; ;AND #$7F ;STRIP OFF STEVE'S BIT 7 36E2 20C1BF 012247 JSR SHLET 36E5 4CA8A6 012248 JMP PATJN 012249 ; 36E8 012250 DHEXW 36E8 A58F 012251 LDA DNDR2 36EA 2903 012252 AND #3 36EC 49FF 012253 EOR #$FF 36EE 18 012254 CLC 36EF 6905 012255 ADC #5 36F1 2008A7 012256 JSR DHLIN ;SHOW CURRENT LINE 36F4 F001 012257 BEQ DHXW0 36F6 60 012258 RTS 36F7 A909 012259 DHXW0 LDA #9 36F9 859E 012260 STA STEMP 36FB 204EA7 012261 DHXW1 JSR NXLINE 36FE A904 012262 LDA #4 ;SHOW 4 BYTES FROM HERE ON 3700 2008A7 012263 JSR DHLIN PAGE 234 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK2+3 3703 C69E 012264 DEC STEMP 3705 D0F4 012265 BNE DHXW1 3707 60 012266 RTS 012267 ; 3708 859D 012268 DHLIN STA TBYTE ;BYTE TO SHOW 370A 859C 012269 STA MPROT 370C 205AA7 012270 JSR CLIN 370F A590 012271 LDA DNDR2+1 3711 48 012272 PHA 3712 2067A8 012273 JSR SHHEX 3715 A58F 012274 LDA DNDR2 3717 48 012275 PHA 3718 2067A8 012276 JSR SHHEX 371B A006 012277 LDY #6 371D A200 012278 LDX #0 371F A18F 012279 DHLN1 LDA (DNDR2,X) ;THIS GETS NEXT VALUE TO SHOW 3721 2067A8 012280 JSR SHHEX 3724 C8 012281 INY 3725 E68F 012282 INC DNDR2 3727 D002 012283 BNE DHLN15 3729 E690 012284 INC DNDR2+1 372B C69D 012285 DHLN15 DEC TBYTE 372D D0F0 012286 BNE DHLN1 ;IF ANY MORE SHOW 372F A59C 012287 LDA MPROT 3731 859D 012288 STA TBYTE 3733 A012 012289 LDY #18 ;NOW DO ATASCII DECODING 3735 68 012290 PLA 3736 858F 012291 STA DNDR2 3738 68 012292 PLA 3739 8590 012293 STA DNDR2+1 373B A18F 012294 DHLN2 LDA (DNDR2,X) 373D 200FA8 012295 JSR INTREP 3740 918D 012296 STA (DINDIR),Y 3742 C8 012297 INY 3743 E68F 012298 INC DNDR2 3745 D002 012299 BNE DHLN25 3747 E690 012300 INC DNDR2+1 3749 C69D 012301 DHLN25 DEC TBYTE 374B D0EE 012302 BNE DHLN2 374D 60 012303 RTS 012304 ; 012305 * **************************** 012306 * NEXT LINE 012307 * 374E 18 012308 NXLINE CLC 374F A58D 012309 LDA DINDIR 3751 691C 012310 ADC #28 3753 858D 012311 STA DINDIR 3755 9002 012312 BCC NXL1 3757 E68E 012313 INC DINDIR+1 3759 60 012314 NXL1 RTS 012315 * ****************************** 012316 * CLEAR DISPLAY WINDOW LINE =0002 012317 CLIN .LOCAL 375A A900 012318 LDA #0 375C A8 012319 TAY 375D 918D 012320 :CLIN1 STA (DINDIR),Y 375F C8 012321 INY 3760 C01A 012322 CPY #26 3762 D0F9 012323 BNE :CLIN1 3764 A8 012324 TAY 3765 60 012325 RTS 012326 ; 012327 * ******************************* 012328 * DEBOUNCES THE CONSOLE. 012329 * 3766 A514 012330 DEBOUN LDA RTCLOK 3768 18 012331 CLC 3769 6920 012332 ADC #$20 376B 85A0 012333 STA ITBYTE 376D A908 012334 DEBOS1 LDA #8 376F 8D1FD0 012335 STA CONSOL PAGE 235 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK2+3 3772 AD1FD0 012336 LDA CONSOL 3775 C907 012337 CMP #7 3777 F007 012338 BEQ DEBOU1 3779 A514 012339 LDA RTCLOK 377B C5A0 012340 CMP ITBYTE 377D D0EE 012341 BNE DEBOS1 377F 60 012342 RTS 012343 ; 3780 A514 012344 DEBOU1 LDA RTCLOK 3782 18 012345 CLC 3783 6903 012346 ADC #3 3785 C514 012347 DB2 CMP RTCLOK 3787 D0FC 012348 BNE DB2 3789 AD1FD0 012349 LDA CONSOL 378C C907 012350 CMP #7 378E D0D6 012351 BNE DEBOUN 3790 60 012352 RTS 012353 ; 012354 * ******************************** 012355 * THIS ROUTINE RETRIEVES 012356 * THE PROPER BREAKPOINT 012357 * INSTRUCTION 012358 * 3791 20FEA7 012359 BRINS JSR DNDBTE 3794 2036A5 012360 JSR STBPP 3797 9003 012361 BCC BRI2 3799 A900 012362 LDA #0 379B 60 012363 RTS 379C BD6F05 012364 BRI2 LDA BRKP0+2,X 379F 60 012365 RTS 012366 ; 012367 * ******************************** 012368 * (DETERMINE LENGTH) 012369 * 012370 * THIS ROUTINE DETERMINES 012371 * THE LENGTH OF THE OPCODE 012372 * PASSED IN THE ACC 012373 * 37A0 48 012374 DETLEN PHA 37A1 4A 012375 LSR A ;THIS COMPUTES PROPER TABLE BYTE 37A2 4A 012376 LSR A 37A3 AA 012377 TAX 37A4 68 012378 PLA 37A5 2903 012379 AND #3 ;MASK OFF DOUBLET COUNTER 37A7 A8 012380 TAY 37A8 BDBEA7 012381 LDA LIM,X ;GET PROPER BYTE FROM TABLE 37AB C000 012382 CPY #0 ;CHECK IF 0 DOUBLET SELECTED 37AD F005 012383 BEQ DETL2 37AF 4A 012384 DETL1 LSR A 37B0 4A 012385 LSR A ;SHIFT DOUBLET TO 0'TH POSITION 37B1 88 012386 DEY ;DECREMENT DOUBLET CTR 37B2 D0FB 012387 BNE DETL1 ;LOOP IF NECESSARY 37B4 18 012388 DETL2 CLC 37B5 2903 012389 AND #3 ;MASK OFF THE 0'TH DOUBLET 37B7 D003 012390 BNE DETL3 37B9 A901 012391 LDA #1 37BB 38 012392 SEC 37BC A8 012393 DETL3 TAY ;NEEDED FOR SSTEP 37BD 60 012394 RTS 012395 ; 37BE 092A193F 012396 LIM .BYTE $09,$2A,$19,$3F 37C2 2A2A1D3F 012397 .BYTE $2A,$2A,$1D,$3F 37C6 0B2A193F 012398 .BYTE $0B,$2A,$19,$3F 37CA 2A2A1D3F 012399 .BYTE $2A,$2A,$1D,$3F 37CE 0928193F 012400 .BYTE $09,$28,$19,$3F 37D2 2A281D3C 012401 .BYTE $2A,$28,$1D,$3C 37D6 092A193F 012402 .BYTE $09,$2A,$19,$3F 37DA 2A2A1D3F 012403 .BYTE $2A,$2A,$1D,$3F 37DE 0A2A113F 012404 .BYTE $0A,$2A,$11,$3F 37E2 2A2A1D3F 012405 .BYTE $2A,$2A,$1D,$3F 37E6 2A2A193F 012406 .BYTE $2A,$2A,$19,$3F 37EA 2A2A1D3F 012407 .BYTE $2A,$2A,$1D,$3F PAGE 236 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK2+3 37EE 0A2A193F 012408 .BYTE $0A,$2A,$19,$3F 37F2 2A281D3C 012409 .BYTE $2A,$28,$1D,$3C 37F6 0A2A193F 012410 .BYTE $0A,$2A,$19,$3F 37FA 2A281D3C 012411 .BYTE $2A,$28,$1D,$3C 012412 ; 012413 * **************************** 012414 * MOVE DNDR2 TO BTEMP 012415 * 37FE A58F 012416 DNDBTE LDA DNDR2 3800 8592 012417 STA BTEMP 3802 A590 012418 LDA DNDR2+1 3804 8593 012419 STA BTEMP+1 3806 60 012420 RTS 012421 ; 012422 .INCLUDE #D2:DDTBANK4 012423 .PAGE PAGE 237 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK4 012424 * ************** 012425 * VSYNC 012426 * 3807 012427 VSYNC 3807 A97B 012428 LDA #$7B 3809 CD0BD4 012429 :VSYN1 CMP VCOUNT 380C D0FB 012430 BNE :VSYN1 380E 60 012431 RTS 012432 ; 012433 * *************** 012434 * INTERNAL REPRESENTATION 012435 * 380F 48 012436 INTREP PHA 3810 2980 012437 AND #$80 3812 85A0 012438 STA ITBYTE 3814 68 012439 PLA 3815 297F 012440 AND #$7F 3817 C920 012441 CMP #32 3819 3009 012442 BMI :INTR1 381B C960 012443 CMP #96 381D 1007 012444 BPL INRAM 381F 38 012445 SEC 3820 E920 012446 SBC #32 3822 1002 012447 BPL INRAM 3824 0940 012448 :INTR1 ORA #64 3826 05A0 012449 INRAM ORA ITBYTE 3828 60 012450 RTS 012451 * *************** 012452 * (SHOW STATE) 012453 * 012454 * THIS ROUTINE IS USED TO 012455 * SHOW THE VALUES OF THE 012456 * REGISTER STATES 012457 * 3829 A94D 012458 SHSTAT LDA # DSCD3 382F 858E 012461 STA DINDIR+1 3831 A000 012462 LDY #0 3833 A58B 012463 LDA PCSAV+1 ;NOW SHOW VALUES 3835 2067A8 012464 JSR SHHEX 3838 A58A 012465 LDA PCSAV 383A 2067A8 012466 JSR SHHEX 383D C8 012467 INY 383E A200 012468 LDX #0 3840 B585 012469 SHST1 LDA ASAV,X 3842 2067A8 012470 JSR SHHEX 3845 C8 012471 INY 3846 E8 012472 INX 3847 E004 012473 CPX #4 3849 D0F5 012474 BNE SHST1 384B A941 012475 LDA # DSCD2+20 3851 858E 012478 STA DINDIR+1 3853 A000 012479 LDY #0 3855 A589 012480 LDA PSAV 3857 A208 012481 LDX #8 ;SET UP COUNTER FOR DIGITS 3859 0A 012482 SHB2 ASL A ;SHIFT LEFT TO GET BIT IN CARRY 385A 48 012483 PHA ;SAVE TEMP 385B A910 012484 LDA #16 ;LOAD VALUE FOR 0 385D 6900 012485 ADC #0 ;VALUE IS 17 FOR 1 385F 918D 012486 STA (DINDIR),Y 3861 C8 012487 INY 3862 68 012488 PLA 3863 CA 012489 DEX 3864 D0F3 012490 BNE SHB2 3866 60 012491 RTS 012492 .PAGE PAGE 238 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW SCREEN D2:DDTBANK4 012493 * **************** 012494 * 012495 * SUBROUTINE SHHEX 012496 * (SHOW HEX) 012497 * 012498 * THIS ROUTINE IS USED TO 012499 * SHOW A VALUE IN THE ACC 012500 * IN HEX NOTATION 012501 * 012502 * THE ROUTINE ASSUMES DINDIR 012503 * & Y ARE SET TO POINT TO 012504 * LOCATION FOR SHOW 012505 * 012506 * **************** 3867 48 012507 SHHEX PHA ;SAVE TEMP 3868 4A 012508 LSR A 3869 4A 012509 LSR A 386A 4A 012510 LSR A ;GET LEFT NIBBLE TO RIGHT 386B 4A 012511 LSR A 386C 2072A8 012512 JSR HXDIG 386F 68 012513 PLA 3870 290F 012514 AND #$0F ;NOW MASK OFF RIGHT NIBBLE 012515 ; AND FALL THRU INTO HXDIG 012516 ; 012517 ; 3872 18 012518 HXDIG CLC 3873 6910 012519 ADC #16 ;ADD OFFSET FOR NUMBERS 3875 C91A 012520 CMP #26 ;CK IF > 10 3877 9003 012521 BCC HX0 3879 18 012522 CLC 387A 6907 012523 ADC #7 ;ADD HEX OFFSET 387C 918D 012524 HX0 STA (DINDIR),Y 387E C8 012525 INY 387F 60 012526 RTS 012527 ; 012528 * **************** 012529 * (SHOW LETTER) 012530 * 012531 * PUTS LETTER, IN REVERSE 012532 * VIDEO IF OVERLAYED BY BRK 012533 * 012534 ; SHLET in main bank 012535 .PAGE "SHOW ADDRESS MODE" PAGE 239 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK4 012536 * **************** 012537 * (SHOW ADDRESS MODE) 012538 * 3880 A584 012539 SHWAD LDA UNDFF ;CHECK IF INSTRUCTION UNDEFINED 3882 F001 012540 BEQ SHAD1 3884 60 012541 RTS 3885 A200 012542 SHAD1 LDX #0 3887 A594 012543 SHAD2 LDA ITEMP ;GET OP CODE 3889 3D4DA9 012544 AND ADPAT,X ;MASK OFF DONT CARES 388C E8 012545 INX 388D DD4DA9 012546 CMP ADPAT,X ;DOES IT MATCH THE MANDATORY PART? 3890 F004 012547 BEQ ADFND ;YES 3892 E8 012548 INX 3893 E8 012549 INX 3894 D0F1 012550 BNE SHAD2 ;NO, TRY NEXT 012551 ; 3896 E8 012552 ADFND INX 3897 BD4DA9 012553 LDA ADPAT,X ;GET ADDRESS MODE 389A AA 012554 TAX 389B A9A0 012555 LDA # >INDX 389D 48 012556 PHA 389E BD3EA9 012557 LDA ADROU,X ;GET LOW BYTE 38A1 48 012558 PHA 38A2 C8 012559 INY 38A3 60 012560 RTS ;GO TO MODE ROUTINE 012561 ; 012562 .PAGE PAGE 240 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK4 38A4 FF20DF4C 012563 PATTAB .BYTE $FF,$20,$DF,$4C,$E7,$C6,$E7,$E6,$E3,$A2 38A8 E7C6E7E6 38AC E3A2 38AE E3A0E786 012564 .BYTE $E3,$A0,$E7,$86,$E7,$84,$F3,$E0,$F3,$C0 38B2 E784F3E0 38B6 F3C0 38B8 F724FF00 012565 .BYTE $F7,$24,$FF,$00,$FF,$18,$FF,$D8,$FF,$58 38BC FF18FFD8 38C0 FF58 38C2 FFB8FFCA 012566 .BYTE $FF,$B8,$FF,$CA,$FF,$88,$FF,$E8,$FF,$C8 38C6 FF88FFE8 38CA FFC8 38CC FFEAFF48 012567 .BYTE $FF,$EA,$FF,$48,$FF,$08,$FF,$68,$FF,$28 38D0 FF08FF68 38D4 FF28 38D6 FF40FF60 012568 .BYTE $FF,$40,$FF,$60,$FF,$38,$FF,$F8,$FF,$78 38DA FF38FFF8 38DE FF78 38E0 FFAAFFA8 012569 .BYTE $FF,$AA,$FF,$A8,$FF,$BA,$FF,$8A,$FF,$9A 38E4 FFBAFF8A 38E8 FF9A 38EA FF98FF90 012570 .BYTE $FF,$98,$FF,$90,$FF,$B0,$FF,$F0,$FF,$30 38EE FFB0FFF0 38F2 FF30 38F4 FFD0FF10 012571 .BYTE $FF,$D0,$FF,$10,$FF,$50,$FF,$70,$E3,$01 38F8 FF50FF70 38FC E301 38FE E321E341 012572 .BYTE $E3,$21,$E3,$41,$E3,$61,$E3,$81,$E3,$A1 3902 E361E381 3906 E3A1 3908 E3C1E3E1 012573 .BYTE $E3,$C1,$E3,$E1,$E3,$02,$E3,$22,$E3,$42 390C E302E322 3910 E342 3912 E362 012574 .BYTE $E3,$62 012575 ; 012576 ; ** START OF 6502C PATTERNS ** 3914 FF80FF3A 012577 .BYTE $FF,$80,$FF,$3A,$FF,$1A,$FF,$DA,$FF,$5A 3918 FF1AFFDA 391C FF5A 391E FFFAFF7A 012578 .BYTE $FF,$FA,$FF,$7A,$FD,$9C,$EF,$64,$F7,$14,$F7,$04 3922 FD9CEF64 3926 F714F704 012579 ; 012580 ; AND THE FUNNY ADDRESS MODES 392A FF72FF32 012581 .BYTE $FF,$72,$FF,$32,$F7,$34,$FF,$D2,$FF,$52,$FF,$7C 392E F734FFD2 3932 FF52FF7C 3936 FFB2FF12 012582 .BYTE $FF,$B2,$FF,$12,$FF,$F2,$FF,$92 393A FFF2FF92 012583 ; 393E 01091422 012584 ADROU .BYTE SSJMP-1 ;GET ADDRESS OF ROUTINE 39FE 48 012640 PHA 39FF BD13AB 012641 LDA SSROUL-9,X 3A02 48 012642 PHA 3A03 60 012643 RTS ;GOTO ROUTINE 012644 ; 3A04 A58A 012645 SSBC LDA PCSAV 3A06 6902 012646 ADC #2 3A08 858A 012647 STA PCSAV 3A0A 9002 012648 BCC SSBC1 3A0C E68B 012649 INC PCSAV+1 3A0E 2087AA 012650 SSBC1 JSR PTBED 3A11 A594 012651 LDA ITEMP 3A13 8DF505 012652 STA TBED ;PUT IN TEST BED 3A16 A904 012653 LDA #4 ;OFFSET TO 2ND JMP INS. 3A18 8DF605 012654 STA TBED+1 3A1B D031 012655 BNE SST2 ;UNCONDITIONAL 012656 ; 3A1D CA 012657 NFND DEX 3A1E 10D3 012658 BPL TFOR2 3A20 2087AA 012659 JSR PTBED ;PREPARE TEST BED 3A23 A594 012660 LDA ITEMP 3A25 20A0A7 012661 JSR DETLEN ;GET LENGTH 3A28 9009 012662 BCC SST01 3A2A E68A 012663 INC PCSAV 3A2C D03F 012664 BNE SSRT2 3A2E E68B 012665 INC PCSAV+1 3A30 4C6DAA 012666 :2RT2 JMP SSRT2 unc 3A33 98 012667 SST01 TYA 3A34 AA 012668 TAX 3A35 CA 012669 DEX 3A36 88 012670 DEY 3A37 18 012671 CLC 3A38 658A 012672 ADC PCSAV ;SET PC AFTER INSTR. 3A3A 858A 012673 STA PCSAV 3A3C 9002 012674 BCC SST1 3A3E E68B 012675 INC PCSAV+1 3A40 B18F 012676 SST1 LDA (DNDR2),Y ;MOVE INSTR. TO TEST BED 3A42 9DF505 012677 STA TBED,X 3A45 CA 012678 DEX 3A46 88 012679 DEY 3A47 10F7 012680 BPL SST1 3A49 A594 012681 LDA ITEMP ;JUST IN CASE IT WAS A BRK 3A4B 8DF505 012682 STA TBED 3A4E A688 012683 SST2 LDX SPSAV 3A50 9A 012684 TXS 3A51 A686 012685 LDX XSAV ;RESTORE REGISTER STATE 3A53 A487 012686 LDY YSAV 3A55 A589 012687 LDA PSAV 3A57 48 012688 PHA 3A58 A585 012689 LDA ASAV 3A5A 28 012690 PLP 3A5B 4CF505 012691 JMP TBED ;EXECUTE INSTRUCTION 012692 ; 012693 ; 3A5E 8585 012694 SSRET STA ASAV ;SAVE REGISTER STATE AGAIN 3A60 8686 012695 STX XSAV PAGE 243 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK6 3A62 8487 012696 STY YSAV 3A64 08 012697 PHP 3A65 68 012698 PLA 3A66 8589 012699 STA PSAV 3A68 D8 012700 CLD ;FORCE BINARY MODE 3A69 58 012701 CLI 3A6A BA 012702 SSRT1 TSX 3A6B 8688 012703 STX SPSAV 3A6D A591 012704 SSRT2 LDA DSCNFL ;CK IF WE NEED TO UPDATE 3A6F F013 012705 BEQ SSRT3 3A71 2007A8 012706 JSR VSYNC 3A74 2029A8 012707 JSR SHSTAT ;UPDATE REGISTER STATE 3A77 2058A5 012708 JSR PCSEXA ;SET MEMORY WINDOW INDEX 3A7A A900 012709 LDA #0 3A7C 8582 012710 STA WINDF 3A7E 2007A8 012711 JSR VSYNC 3A81 20F7A5 012712 JSR SSCRN 3A84 4C86A3 012713 SSRT3 JMP DBND5A ;GO BACK AND CHECK CONSOLE 012714 ; 012715 ; 3A87 A208 012716 PTBED LDX #8 3A89 BDA2AE 012717 PTB1 LDA TBEDX,X 3A8C 9DF505 012718 STA TBED,X 3A8F CA 012719 DEX 3A90 10F7 012720 BPL PTB1 3A92 60 012721 RTS 012722 ; 012723 ; 3A93 20B6AA 012724 SSJMP JSR PCAD ;SET PC TO NEXT ADD 3A96 4C6DAA 012725 JMP SSRT2 012726 ; 3A99 2003AB 012727 SSJMI JSR SSSIND Y returns =1 =AA9C 012728 :BR0 .= * used 3 3A9C B18D 012729 LDA (DINDIR),Y 3A9E 998A00 012730 STA PCSAV,Y 3AA1 88 012731 DEY 3AA2 10F8 012732 BPL :BR0 3AA4 30C7 012733 BMI SSRT2 unc 012734 ; 3AA6 2003AB 012735 SSJII JSR SSSIND Y returns =1 3AA9 A58D 012736 LDA DINDIR 3AAB 18 012737 CLC 3AAC 6586 012738 ADC XSAV 3AAE 858D 012739 STA DINDIR 3AB0 90EA 012740 BCC :BR0 3AB2 E68E 012741 INC DINDIR+1 3AB4 B0E6 012742 BCS :BR0 unc 012743 ; 3AB6 A001 012744 PCAD LDY #1 3AB8 B18F 012745 LDA (DNDR2),Y 3ABA 858A 012746 STA PCSAV 3ABC C8 012747 INY 3ABD B18F 012748 LDA (DNDR2),Y 3ABF 858B 012749 STA PCSAV+1 3AC1 60 012750 RTS 012751 ; 3AC2 68 012752 SSRTS PLA ;NOTE: CARRY IS SET... 3AC3 6900 012753 ADC #0 ;CORRECT FOR JSR WEIRDNESS 3AC5 858A 012754 STA PCSAV 3AC7 68 012755 PLA 3AC8 6900 012756 ADC #0 3ACA 858B 012757 STA PCSAV+1 3ACC 4C6AAA 012758 JMP SSRT1 012759 ; 3ACF 20B6AA 012760 SSJSR JSR PCAD 3AD2 18 012761 CLC 3AD3 A58F 012762 LDA DNDR2 3AD5 6902 012763 ADC #2 3AD7 A8 012764 TAY 3AD8 A590 012765 LDA DNDR2+1 3ADA 6900 012766 ADC #0 3ADC 48 012767 PHA PAGE 244 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK6 3ADD 98 012768 TYA 3ADE 48 012769 PHA 3ADF 4C6AAA 012770 :SSRT1 JMP SSRT1 012771 ; 3AE2 D8 012772 SSBC2 CLD 3AE3 58 012773 CLI 3AE4 A001 012774 LDY #1 3AE6 B18F 012775 LDA (DNDR2),Y 3AE8 1001 012776 BPL SSBC3 ;THIS SETS FOR FOR POS & NEG OFFSET 3AEA 88 012777 DEY 3AEB 88 012778 SSBC3 DEY 3AEC 18 012779 CLC 3AED 658A 012780 ADC PCSAV 3AEF 858A 012781 STA PCSAV 3AF1 98 012782 TYA 3AF2 658B 012783 ADC PCSAV+1 3AF4 858B 012784 STA PCSAV+1 3AF6 4C6DAA 012785 JMP SSRT2 012786 ; 3AF9 A2FD 012787 SSRTI LDX #-3 3AFB 68 012788 SSRTI2 PLA 3AFC 958C 012789 STA PSAV+3,X 3AFE E8 012790 INX 3AFF D0FA 012791 BNE SSRTI2 3B01 F0DC 012792 BEQ :SSRT1 012793 ; 012794 * ************************** 012795 * SET SINGLE STEP INDIRECT 012796 * 3B03 A002 012797 SSSIND LDY #2 3B05 B18F 012798 LDA (DNDR2),Y 3B07 858E 012799 STA DINDIR+1 3B09 88 012800 DEY 3B0A B18F 012801 LDA (DNDR2),Y ;SET DINDIR TO NEXT AD 3B0C 858D 012802 STA DINDIR 3B0E 60 012803 RTS note: Y =1 012804 ; 012805 * *************** 012806 * GET NEXT INSTRUCTION 012807 * 3B0F A58A 012808 GTNXIN LDA PCSAV 3B11 858F 012809 STA DNDR2 3B13 A58B 012810 LDA PCSAV+1 3B15 8590 012811 STA DNDR2+1 3B17 A000 012812 LDY #0 3B19 B18F 012813 LDA (DNDR2),Y ;GET INSTRUCTION 3B1B 60 012814 RTS 012815 ; 3B1C 9298 012816 SSROUL .BYTE SSJMP-1]<>[ >SSRTI-1]] 012820 .ERROR "SSJMP <> SSRTI DDT #6" 012821 .ENDIF 012822 ; 3B22 90B0F0D0 012823 FORB .BYTE $90,$B0,$F0,$D0 3B26 30105070 012824 .BYTE $30,$10,$50,$70 3B2A 804C6C20 012825 .BYTE $80,$4C,$6C,$20 3B2E 40607C 012826 .BYTE $40,$60,$7C 012827 ; 012828 .INCLUDE #D2:DDTBANK7 012829 .PAGE PAGE 245 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK7 012830 * ******************************* 012831 * 3B31 2077AB 012832 GETCH JSR CKGETC 3B34 B0FB 012833 BCS GETCH 3B36 A20F 012834 LDX #15 3B38 DD85AB 012835 GETC0 CMP KEYCD,X ;CK IF IN KEY CODE TABLE 3B3B F016 012836 BEQ GETC2 3B3D CA 012837 DEX 3B3E 10F8 012838 BPL GETC0 3B40 A204 012839 LDX #4 ;CK IF IN DELIMITER TABLE 3B42 DD95AB 012840 GETC3 CMP DELCD,X 3B45 F019 012841 BEQ GETC4 3B47 CA 012842 DEX 3B48 10F8 012843 BPL GETC3 3B4A C934 012844 CMP #52 ;CK IF DELETE 3B4C D0E3 012845 BNE GETCH 3B4E A900 012846 LDA #0 ;SET DELETE INDICATOR 3B50 38 012847 SEC ;SET CONTROL FLAG 3B51 B00E 012848 BCS GETC7 012849 ; 3B53 8A 012850 GETC2 TXA 3B54 18 012851 CLC 3B55 6910 012852 ADC #16 ;CONVERT TO HEX 3B57 C91A 012853 CMP #26 3B59 9006 012854 BCC GETC7 3B5B 18 012855 CLC 3B5C 6907 012856 ADC #7 3B5E D001 012857 BNE GETC7 3B60 38 012858 GETC4 SEC ;SET DELIMITER FLAG =AB61 012859 GETC7 .EQU * 012860 ; 012861 ; NOTE FALL THROUGH 012862 ; 012863 * ********************************* 012864 * CLICK ROUTINE 012865 * =0003 012866 CLICK .LOCAL 3B61 08 012867 PHP 3B62 A27E 012868 LDX #$7E 3B64 48 012869 PHA 3B65 8E1FD0 012870 :CLIK1 STX CONSOL 3B68 AD0BD4 012871 LDA VCOUNT 3B6B CD0BD4 012872 :CLIK2 CMP VCOUNT 3B6E F0FB 012873 BEQ :CLIK2 3B70 CA 012874 DEX 3B71 CA 012875 DEX 3B72 10F1 012876 BPL :CLIK1 3B74 68 012877 PLA 3B75 28 012878 PLP 3B76 60 012879 RTS 012880 ; 012881 * ******************************** 012882 * CHECK AND GET CHARACTER 012883 * 3B77 ADFC02 012884 CKGETC LDA CHR 3B7A C9FF 012885 CMP #$FF 3B7C D001 012886 BNE CKGT1 3B7E 60 012887 RTS 3B7F A2FF 012888 CKGT1 LDX #$FF 3B81 8EFC02 012889 STX CHR 3B84 60 012890 RTS 012891 ; 012892 * ********************************* 012893 * CONSTANT TABLES 012894 * 3B85 321F1E1A 012895 KEYCD .BYTE 50,31,30,26,24,29,27,51,53,48 3B89 181D1B33 3B8D 3530 012896 ; 0 1 2 3 4 5 6 7 8 9 3B8F 3F15123A 012897 .BYTE 63,21,18,58,42,56 3B93 2A38 012898 ; A B C D E F PAGE 246 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK7 3B95 21200C37 012899 DELCD .BYTE 33,32,12,55,7 3B99 07 012900 ; SP , CR > * 012901 ; 012902 * ******************************* 012903 * PUTCH 012904 * 3B9A 48 012905 PUTCH PHA 3B9B 20ABAB 012906 JSR SETPU 3B9E A495 012907 LDY CHCOL 3BA0 68 012908 PLA 3BA1 918D 012909 STA (DINDIR),Y 3BA3 C8 012910 INY 3BA4 A980 012911 LDA #$80 3BA6 918D 012912 STA (DINDIR),Y 3BA8 8495 012913 STY CHCOL 3BAA 60 012914 RTS 012915 ; 012916 * ******************************* 012917 * SETPU 012918 * 3BAB A95E 012919 SETPU LDA # DSCD3+17 3BB1 858E 012922 STA DINDIR+1 3BB3 60 012923 RTS 012924 ; 012925 * ******************************* 012926 * PULL MEMORY WINDOW DOWN 012927 * 3BB4 A582 012928 PULLWI LDA WINDF 3BB6 C901 012929 CMP #1 3BB8 D009 012930 BNE PULL1 3BBA E696 012931 INC EXAMWI 3BBC D011 012932 BNE PULL3 3BBE E697 012933 INC EXAMWI+1 3BC0 18 012934 CLC 3BC1 900C 012935 BCC PULL3 3BC3 20E0AB 012936 PULL1 JSR EINSIZ 3BC6 18 012937 CLC 3BC7 6596 012938 ADC EXAMWI 3BC9 8596 012939 STA EXAMWI 3BCB 9002 012940 BCC PULL3 3BCD E697 012941 INC EXAMWI+1 3BCF 2023A6 012942 PULL3 JSR DWIND 3BD2 4C73A3 012943 JMP DBND5 012944 ; 012945 * ******************************* 012946 * 012947 * PUSHW 012948 * 012949 * THIS ROUTINE PUSHES THE 012950 * WINDOW UP 1 BYTE 012951 * 3BD5 A596 012952 PUSHW LDA EXAMWI 3BD7 D002 012953 BNE PUSH0 3BD9 C697 012954 DEC EXAMWI+1 3BDB C696 012955 PUSH0 DEC EXAMWI 3BDD 4CCFAB 012956 JMP PULL3 012957 ; 012958 * ******************************* 012959 * EXAM WINDOW INSTRUCTION SIZE 012960 * =0004 012961 EINSIZ .LOCAL 3BE0 20EFAB 012962 JSR EXADND 3BE3 A000 012963 LDY #0 3BE5 B18F 012964 LDA (DNDR2),Y 3BE7 D003 012965 BNE :EIN1 3BE9 2091A7 012966 JSR BRINS 3BEC 4CA0A7 012967 :EIN1 JMP DETLEN 012968 ; 012969 * ****************************** PAGE 247 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK7 012970 * MOVE EXAMWI TO DNDR2 012971 * 3BEF A596 012972 EXADND LDA EXAMWI 3BF1 858F 012973 STA DNDR2 3BF3 A597 012974 LDA EXAMWI+1 3BF5 8590 012975 STA DNDR2+1 3BF7 60 012976 RTS 012977 ; 012978 * ******************************* 012979 * 012980 * INTERP 012981 * 012982 * TURN THE INTERPRETIVE 012983 * FLAG ON 012984 * 3BF8 EE1004 012985 INTERP INC SSFLG 3BFB A900 012986 LDA #0 3BFD 8582 012987 STA WINDF 3BFF ADF002 012988 LDA CRSINH 3C02 8D0D04 012989 STA CRSTAT 3C05 A510 012990 LDA POKMSK 3C07 858C 012991 STA POKSAV 3C09 0980 012992 ORA #$80 3C0B 8510 012993 STA POKMSK 3C0D 8D0ED2 012994 STA IRQEN 3C10 4C73A3 012995 JMP DBND5 012996 ; 012997 * ******************************* 012998 * NEXT 012999 * 3C13 20E0AB 013000 NEXT JSR EINSIZ ;GET SIZE OF INST IN EXAMWI 3C16 18 013001 CLC 3C17 658A 013002 ADC PCSAV 3C19 8592 013003 STA BTEMP 3C1B A58B 013004 LDA PCSAV+1 3C1D 6900 013005 ADC #0 3C1F 8593 013006 STA BTEMP+1 3C21 A900 013007 LDA #0 ;FOR INTERNAL BKP 3C23 20BEA4 013008 JSR SETBP 3C26 4C0AA4 013009 JMP DCONT 013010 ; 013011 * ******************************* 013012 * EXAM (EXAMINE) 013013 * =0005 013014 EXAM .LOCAL 3C29 20CEAC 013015 JSR OGTADD ;SPACE OVER 1 AND GET ADD 3C2C B00B 013016 BCS :EXAM1 ;CK IF NULL ADDRESS 3C2E A59A 013017 LDA HEXVAL 3C30 8596 013018 STA EXAMWI ;MOVE ADDRESS TO EXAM WINDOW 3C32 A59B 013019 LDA HEXVAL+1 3C34 8597 013020 STA EXAMWI+1 3C36 2023A6 013021 JSR DWIND ;SHOW WINDOW 3C39 4C73A3 013022 :EXAM1 JMP DBND5 013023 ; 013024 * ******************************* 013025 * 013026 * GETVAL (GET VALUE) 013027 * 3C3C A900 013028 GETVAL LDA #0 3C3E 8598 013029 STA CC ;SET CHAR. COUNTER TO 0 3C40 2031AB 013030 GTV1 JSR GETCH ;GET CHAR. 3C43 B00D 013031 BCS DELIM ;IF DELIMITER 3C45 A698 013032 LDX CC 3C47 E499 013033 CPX FSIZE 3C49 F0F5 013034 BEQ GTV1 3C4B 209AAB 013035 JSR PUTCH ;PUT CHAR ON SCREEN 3C4E E698 013036 INC CC ;INCREMENT CHAR. COUNT 3C50 D0EE 013037 BNE GTV1 013038 ; 3C52 C900 013039 DELIM CMP #0 3C54 F001 013040 BEQ DELI2 3C56 60 013041 RTS PAGE 248 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK7 013042 ; 3C57 A698 013043 DELI2 LDX CC 3C59 D007 013044 BNE DELI3 3C5B 68 013045 PLA ;CLEAR RTS VALUE 3C5C 68 013046 PLA 3C5D 68 013047 PLA 3C5E 68 013048 PLA 3C5F 4C73A3 013049 JMP DBND5 3C62 C698 013050 DELI3 DEC CC 3C64 A495 013051 LDY CHCOL 3C66 918D 013052 STA (DINDIR),Y 3C68 88 013053 DEY 3C69 A980 013054 LDA #$80 3C6B 918D 013055 STA (DINDIR),Y 3C6D C695 013056 DEC CHCOL 3C6F D0CF 013057 BNE GTV1 013058 ; 013059 * ******************************* 013060 * 013061 * GTADD (GET ADDRESS) 013062 * 3C71 209AAB 013063 GTADD JSR PUTCH 3C74 A904 013064 LDA #4 3C76 8599 013065 STA FSIZE ;SET FIELD SIZE 3C78 203CAC 013066 JSR GETVAL ;GET ADDRESS VALUE 3C7B 209BAC 013067 JSR CONVRT 3C7E 901A 013068 BCC GTADX 3C80 C937 013069 CMP #$37 ;CK FOR > 3C82 F00D 013070 BEQ GTAW ;YES, BRANCH 3C84 C907 013071 CMP #$07 ;CK FOR * 3C86 D012 013072 BNE GTADX ;NO, EXIT (CARRY SET) 3C88 A58A 013073 LDA PCSAV ;PC -> RESULT 3C8A 859A 013074 STA HEXVAL 3C8C A58B 013075 LDA PCSAV+1 3C8E 4C97AC 013076 JMP GTAW1 3C91 A596 013077 GTAW LDA EXAMWI ;WINDOW POS'N -> RESULT 3C93 859A 013078 STA HEXVAL 3C95 A597 013079 LDA EXAMWI+1 3C97 859B 013080 GTAW1 STA HEXVAL+1 3C99 18 013081 CLC 3C9A 60 013082 GTADX RTS 013083 ; 013084 * ******************************* 013085 * 013086 * CONVRT 013087 * (CONVER* ATASCII TO HEX) 013088 * 3C9B 38 013089 CONVRT SEC 3C9C A698 013090 LDX CC 3C9E F0FA 013091 BEQ GTADX ;CS FLAGS NULL VAL 3CA0 A595 013092 LDA CHCOL 3CA2 E598 013093 SBC CC ;CS from above 3CA4 A8 013094 TAY 3CA5 20ABAB 013095 JSR SETPU ;SET POINTER 3CA8 A900 013096 LDA #0 3CAA 859A 013097 STA HEXVAL 3CAC 859B 013098 STA HEXVAL+1 3CAE B18D 013099 CONV4 LDA (DINDIR),Y ;GET HEX VAL 3CB0 C920 013100 CMP #$20 3CB2 9002 013101 BCC GTH1 3CB4 6908 013102 ADC #8 ;CS -add 9 3CB6 290F 013103 GTH1 AND #$0F 3CB8 48 013104 PHA 3CB9 C8 013105 INY ;SET Y TO NEXT CHARACTER 3CBA A204 013106 LDX #4 3CBC 069A 013107 ROTV1 ASL HEXVAL 3CBE 269B 013108 ROL HEXVAL+1 3CC0 CA 013109 DEX 3CC1 D0F9 013110 BNE ROTV1 3CC3 68 013111 PLA 3CC4 059A 013112 ORA HEXVAL 3CC6 859A 013113 STA HEXVAL PAGE 249 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK7 3CC8 C698 013114 DEC CC 3CCA D0E2 013115 BNE CONV4 3CCC 18 013116 :SMNO CLC 3CCD 60 013117 RTS 013118 ; 013119 * ****************************** 013120 * SPACE OVER 1 AND GET ADD. 013121 * 3CCE A900 013122 OGTADD LDA #0 ;SPACE OVER 1 CHAR. 3CD0 4C71AC 013123 JMP GTADD 013124 ; 013125 ; Search routine 013126 ; 3CD3 A000 013127 SMTCH LDY #0 3CD5 B9A200 013128 :SMT2 LDA SSTR,Y 3CD8 D18D 013129 CMP (DINDIR),Y 3CDA D0F0 013130 BNE :SMNO 3CDC C8 013131 INY 3CDD C4A1 013132 CPY SSSIZ 3CDF 30F4 013133 BMI :SMT2 3CE1 38 013134 SEC 3CE2 60 013135 RTS 013136 .INCLUDE #D2:DDTBANK8 013137 .PAGE PAGE 250 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK8 013138 ; 013139 * ******************* 013140 * 013141 * GO 013142 * 3CE3 20CEAC 013143 GO JSR OGTADD ;GET ADDRESS VALUE 3CE6 9003 013144 BCC :GG 3CE8 4C97AD 013145 JMP GO1 013146 ; 3CEB A59A 013147 :GG LDA HEXVAL 3CED 858A 013148 STA PCSAV 3CEF A59B 013149 LDA HEXVAL+1 3CF1 858B 013150 STA PCSAV+1 3CF3 4C0AA4 013151 JMP DCONT 013152 ; 013153 * ******************* 013154 * 013155 * SUBROUTINE DEPOSIT 013156 * 3CF6 A9A2 013157 DEPX.X LDA # SSTR 3CFC 8590 013160 STA DNDR2+1 3CFE A901 013161 LDA #1 3D00 D005 013162 BNE DEPXX 013163 ; 3D02 20EFAB 013164 DEPOS JSR EXADND ;SET UP INDIRECT POINTER 3D05 A900 013165 LDA #0 3D07 8D0E04 013166 DEPXX STA DEPSW 3D0A 4A 013167 LSR A sets A=0 3D0B 209AAB 013168 JSR PUTCH ;GET HEX STRING 3D0E A90C 013169 LDA #12 3D10 8599 013170 STA FSIZE 3D12 203CAC 013171 JSR GETVAL 3D15 A595 013172 LDA CHCOL 3D17 38 013173 SEC 3D18 E598 013174 SBC CC 3D1A 8595 013175 STA CHCOL 3D1C A598 013176 LDA CC 3D1E 859D 013177 STA TBYTE 3D20 4A 013178 LSR A ;COMPUTE STRING SIZE 3D21 6900 013179 ADC #0 3D23 85A1 013180 STA SSSIZ 3D25 A59D 013181 DEPO0 LDA TBYTE 3D27 38 013182 SEC 3D28 E902 013183 SBC #2 3D2A 301B 013184 BMI DEPO2 3D2C 859D 013185 STA TBYTE 3D2E A902 013186 LDA #2 3D30 8598 013187 STA CC 3D32 18 013188 DEPO4 CLC 3D33 6595 013189 ADC CHCOL 3D35 8595 013190 STA CHCOL 3D37 209BAC 013191 JSR CONVRT 3D3A A000 013192 LDY #0 3D3C 918F 013193 STA (DNDR2),Y 3D3E E68F 013194 INC DNDR2 3D40 D002 013195 BNE DEPO45 3D42 E690 013196 INC DNDR2+1 3D44 4C25AD 013197 DEPO45 JMP DEPO0 013198 ; 3D47 18 013199 DEPO2 CLC 3D48 6901 013200 ADC #1 3D4A 3008 013201 BMI DEPO3 3D4C 859D 013202 STA TBYTE 3D4E A901 013203 LDA #1 3D50 8598 013204 STA CC 3D52 D0DE 013205 BNE DEPO4 013206 ; 3D54 AD0E04 013207 DEPO3 LDA DEPSW 3D57 F03B 013208 BEQ DEPO5 3D59 60 013209 RTS PAGE 251 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK8 013210 ; 013211 * ******************* 013212 * 013213 * SERCH 013214 * 3D5A A5A1 013215 SERCH LDA SSSIZ 3D5C 48 013216 PHA 3D5D 20F6AC 013217 JSR DEPX.X 3D60 A5A1 013218 LDA SSSIZ 3D62 D007 013219 BNE SER0 3D64 68 013220 PLA ;GET OLD VAL 3D65 F030 013221 BEQ GO1 3D67 85A1 013222 STA SSSIZ 3D69 D001 013223 BNE SER05 3D6B 68 013224 SER0 PLA 3D6C A596 013225 SER05 LDA EXAMWI 3D6E 18 013226 CLC 3D6F 6901 013227 ADC #1 3D71 858D 013228 STA DINDIR 3D73 A597 013229 LDA EXAMWI+1 3D75 6900 013230 ADC #0 3D77 858E 013231 STA DINDIR+1 3D79 20D3AC 013232 SER1 JSR SMTCH 3D7C B00E 013233 BCS SFND 3D7E E68D 013234 INC DINDIR 3D80 D0F7 013235 BNE SER1 3D82 E68E 013236 INC DINDIR+1 3D84 A58E 013237 LDA DINDIR+1 3D86 C9D0 013238 CMP #$D0 3D88 D0EF 013239 BNE SER1 3D8A F00B 013240 BEQ GO1 go DBND5 013241 ; 3D8C A58D 013242 SFND LDA DINDIR 3D8E A68E 013243 LDX DINDIR+1 3D90 8596 013244 STA EXAMWI 3D92 8697 013245 STX EXAMWI+1 3D94 20F7A5 013246 DEPO5 JSR SSCRN 3D97 4C73A3 013247 GO1 JMP DBND5 013248 * 013249 * MOVE (from addr, to addr, length) 013250 * 3D9A 20F6AC 013251 MOVE JSR DEPX.X 3D9D A6A1 013252 LDX SSSIZ 3D9F E006 013253 CPX #6 must be 3 words! 3DA1 D055 013254 BNE STBR6 go "DBND5" 013255 ; 3DA3 CA 013256 DEX make low-high pairs 3DA4 B5A2 013257 :LH LDA SSTR,X get low 3DA6 B4A1 013258 LDY SSTR-1,X get high 3DA8 95A1 013259 STA SSTR-1,X store low 3DAA 94A2 013260 STY SSTR,X store high 3DAC CA 013261 DEX point to next 3DAD CA 013262 DEX 3DAE 10F4 013263 BPL :LH 013264 ; 3DB0 A5A6 013265 LDA SSTR+4 get length 3DB2 A8 013266 TAY 3DB3 05A7 013267 ORA SSTR+5 3DB5 F041 013268 BEQ STBR6 no zero lengths! 3DB7 A6A7 013269 LDX SSTR+5 get high 3DB9 E8 013270 INX 3DBA 88 013271 :DMV1 DEY 3DBB B1A2 013272 LDA (SSTR),Y 3DBD 91A4 013273 STA (SSTR+2),Y 3DBF 98 013274 TYA 3DC0 D0F8 013275 BNE :DMV1 3DC2 E6A3 013276 INC SSTR+1 3DC4 E6A5 013277 INC SSTR+3 3DC6 CA 013278 DEX 3DC7 D0F1 013279 BNE :DMV1 3DC9 F0C9 013280 BEQ DEPO5 All done 013281 * ******************* PAGE 252 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK8 013282 * 013283 * STBRK (SET BREAKPOINT) 013284 * 3DCB A900 013285 STBRK LDA #0 3DCD 2095AE 013286 JSR GTBYT ;GET VALUE 3DD0 B026 013287 BCS STBR6 3DD2 A59A 013288 LDA HEXVAL 3DD4 F022 013289 BEQ STBR6 3DD6 C905 013290 CMP #5 3DD8 B01E 013291 BCS STBR6 3DDA 48 013292 PHA ;SAVE BRKP # 3DDB A90C 013293 LDA #12 ;FOR , 3DDD 2071AC 013294 JSR GTADD 3DE0 9007 013295 BCC STBR4 3DE2 68 013296 PLA 3DE3 200AA5 013297 JSR CLBRK ;CLEAR BRKPT 3DE6 4CF5AD 013298 JMP STBR5 3DE9 A59A 013299 STBR4 LDA HEXVAL 3DEB 8592 013300 STA BTEMP 3DED A59B 013301 LDA HEXVAL+1 3DEF 8593 013302 STA BTEMP+1 3DF1 68 013303 PLA ;GET BRKP # BACK 3DF2 20BEA4 013304 JSR SETBP 3DF5 20F7A5 013305 STBR5 JSR SSCRN 3DF8 4C73A3 013306 STBR6 JMP DBND5 013307 ; 013308 * ******************* 013309 * 013310 * REGIS (REGISTER CHANGE) 013311 * 3DFB A900 013312 REGIS LDA #0 3DFD 8598 013313 STA CC 3DFF 209AAB 013314 JSR PUTCH ;SPACE OVER 3E02 2077AB 013315 REG1 JSR CKGETC 3E05 B0FB 013316 BCS REG1 3E07 A202 013317 LDX #2 3E09 DD95AB 013318 REG11 CMP DELCD,X 3E0C F040 013319 BEQ REG5 3E0E CA 013320 DEX 3E0F 10F8 013321 BPL REG11 3E11 C934 013322 CMP #52 ;?DELETE 3E13 F021 013323 BEQ RDEL 3E15 AA 013324 TAX 3E16 A598 013325 LDA CC 3E18 D0E8 013326 BNE REG1 ;ALREADY TYPED ONE CHAR. 3E1A 8A 013327 TXA 3E1B A204 013328 LDX #4 3E1D DDCBBF 013329 REG2 CMP REGTB,X ;CK IF CHAC. IN TABLE 3E20 F005 013330 BEQ REG3 3E22 CA 013331 DEX 3E23 10F8 013332 BPL REG2 3E25 30DB 013333 BMI REG1 013334 ; 3E27 86A0 013335 REG3 STX ITBYTE 3E29 BD84AE 013336 LDA REGCD,X 3E2C 2061AB 013337 JSR CLICK 3E2F 209AAB 013338 JSR PUTCH 3E32 E698 013339 INC CC 3E34 D0CC 013340 BNE REG1 013341 ; 3E36 2061AB 013342 RDEL JSR CLICK 3E39 A598 013343 LDA CC 3E3B F0BB 013344 BEQ STBR6 3E3D C698 013345 DEC CC 3E3F A900 013346 LDA #0 3E41 A495 013347 LDY CHCOL 3E43 918D 013348 STA (DINDIR),Y 3E45 88 013349 DEY 3E46 A980 013350 LDA #$80 3E48 918D 013351 STA (DINDIR),Y 3E4A C695 013352 DEC CHCOL 3E4C D0B4 013353 BNE REG1 PAGE 253 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' SHOW ADDRESS MODE D2:DDTBANK8 013354 ; 3E4E A598 013355 REG5 LDA CC 3E50 F0A6 013356 BEQ STBR6 3E52 2061AB 013357 JSR CLICK 3E55 A90C 013358 LDA #12 ;LOAD WITH VALUE FOR , 3E57 2095AE 013359 JSR GTBYT 3E5A B09C 013360 BCS STBR6 3E5C A59A 013361 LDA HEXVAL 3E5E A6A0 013362 LDX ITBYTE 3E60 9585 013363 STA ASAV,X 3E62 2029A8 013364 JSR SHSTAT 3E65 4C73A3 013365 JMP DBND5 013366 ; 013367 * ******************* 013368 * 013369 * PCSET 013370 * SET PC - SPECIAL FOR * 013371 * 3E68 20CEAC 013372 PCSET JSR OGTADD 3E6B B008 013373 BCS REG9 3E6D A59A 013374 LDA HEXVAL 3E6F 858A 013375 STA PCSAV 3E71 A59B 013376 LDA HEXVAL+1 3E73 858B 013377 STA PCSAV+1 013378 ; 3E75 2029A8 013379 REG9 JSR SHSTAT 3E78 A68B 013380 LDX PCSAV+1 3E7A A58A 013381 LDA PCSAV 3E7C 8596 013382 STA EXAMWI 3E7E 8697 013383 STX EXAMWI+1 3E80 A900 013384 LDA #0 3E82 F009 013385 BEQ SCPC change window! 013386 ; 013387 ; moved to DDTMAIN0 013388 ; REGTB .BYTE 63,22,43,62,10 3E84 21383933 013389 REGCD .BYTE 33,56,57,51,48 3E88 30 013390 ; 013391 * ******************* 013392 * 013393 * CHANGE WINDOW 013394 * 3E89 A582 013395 CHWIN LDA WINDF 3E8B 4901 013396 EOR #1 3E8D 8582 013397 SCPC STA WINDF 3E8F 20A6A4 013398 JSR SETDL 3E92 4CCFAB 013399 JMP PULL3 ;JSR DWIND ...JMP DBND5 013400 ; 013401 * ******************* 013402 * GTBYT (GET BYTE) 3E95 209AAB 013403 GTBYT JSR PUTCH 3E98 A902 013404 LDA #2 3E9A 8599 013405 STA FSIZE 3E9C 203CAC 013406 JSR GETVAL 3E9F 4C9BAC 013407 JMP CONVRT 013408 ; 013409 .INCLUDE #D2:DDTBANK9 013410 .PAGE "DISPLAY LIST & MISC" PAGE 254 MAC XL CARTRIDGE/DDT SECTION *** Jim Dunion *** DDT BANK 'C' DISPLAY LIST & MISC D2:DDTBANK9 013411 * 013412 * TEST BED 013413 * 3EA2 EAEAEA 013414 TBEDX .BYTE $EA,$EA,$EA 3EA5 4C5EAA 013415 JMP SSRET ;BACK TO DDT AFTER EXECUTION 3EA8 4CE2AA 013416 JMP SSBC2 ;BACK AFTER CONDITIONAL BRANCH 013417 ; 013418 * ***************** 013419 * 013420 * DISPLAY LIST 013421 * 3EAB ADB6 013422 DLSTTB .BYTE