home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / programming / kosmon.zoo / kosmon.asm
Assembly Source File  |  1996-03-16  |  33KB  |  2,365 lines

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;
  3. ;;kOSmON - a mACHINE lANGUAGE mONITOR FOR c64 AND pet.
  4. ;;
  5. ;;(c) 1986-1996 BY oLAF sEIBERT. aLL rIGHTS rESERVED.
  6. ;;mAY BE DISTRIBUTED UNDER THE gnu gENERAL pUBLIC lICENSE.
  7. ;;
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9.  
  10. ; hINTS FOR THE c64 $c000 VERSION:
  11. ; mOVE THE ENTRY POINT, MARKED WITH ///, TO THE INDICATED PLACE,
  12. ; AND CHANGE THE BASE AND brk ENTRY POINT ACCORDINGLY.
  13. ; fOR A <4k VERSION, SET THE SYMBOL HAVEECMD TO 0.
  14.  
  15. PROCESSOR 6502
  16.  
  17. MAC CSET; CONDITIONAL SET
  18. IFNCONST {$7b}1{$7d}
  19. {$7b}1{$7d}= {$7b}2{$7d}
  20. ENDIF
  21. ENDM
  22.  
  23. CSET BASE, $9000; /// -$CC
  24.  
  25. C64= 1
  26. PET= 2
  27.  
  28. CSET TARGET, PET
  29.  
  30. ; THE SETTINGS BELOW ARE FOR PETS ONLY.
  31. ; nOTE THERE IS ONLY ALLOWANCE FOR bASIC 2.0 (NEW ROMS) AND 4.0.
  32.  
  33. CSET PETB2,0; FLAG
  34. CSET PETB4,1; FLAG
  35. CSET PETB440,0; FLAG FOR PETB4 ONLY
  36. CSET PETB480,1; FLAG FOR PETB4 ONLY
  37.  
  38. LINES= 25
  39. #IF PETB4 && PETB480
  40. COLUMNS = 80
  41. #ELSE
  42. COLUMNS = 40
  43. #ENDIF
  44. MINDISKDEV = 8
  45. DISKDEV = 8; MY TASTE
  46. PRINTDEV = 4; MY TASTE
  47. PRINTSA = 7; MY TASTE
  48.  
  49. CSET HAVEDASHES, 1
  50. #IF TARGET == C64
  51. CSETHAVEECMD, 1
  52. HAVEPFKEYS = 1
  53. #ELSE
  54. HAVEECMD = 0
  55. HAVEPFKEYS = 0
  56. #ENDIF
  57.  
  58. #IF [TARGET == PET] && PETB2
  59. CSET AUTOREPEAT, 1
  60. #ELSE
  61. CSET AUTOREPEAT, 0
  62. #ENDIF; (TARGET == PET) && PETB2
  63.  
  64. #IF AUTOREPEAT
  65. SLOWREP = 23; TIME BEFORE FIRST REPEAT (IN JIFFIES)
  66. FASTREP= 4; TIME BETWEEN REPEATS (IN JIFFIES)
  67. #ENDIF; AUTOREPEAT
  68.  
  69.  
  70.        ;+++ ABSOLUTE ADRESSES
  71.  
  72. #IF TARGET == C64
  73.  
  74. PPORT= $01
  75. STATUS= $90
  76. VERCK= 0; NOT NEEDED
  77. MSGFLG= $9D
  78. FNLEN= $B7
  79. SA= $B9
  80. FA= $BA
  81. STAL= $C1
  82. MEMUSS= STAL+2
  83. NDX= $C6
  84. INDX= $C8
  85. LXSP= $C9
  86. BLNSW= $CC
  87. GDBLN= $CE
  88. BLNON= $CF
  89. EAL= $AE
  90. CRSW= $D0
  91. PNT= $D1
  92. PNTR= $D3
  93. QTSW= $D4
  94. TBLX= $D6
  95. DATAX= $D7
  96. LDTBL= $D9
  97. RTSP= $0200
  98. RTSTACK = $0201
  99. KEYD= $0277
  100. GDCOL= $0287
  101. HIBASE= $0288
  102. AUTODN= $0292
  103. TMPLIN= $02A5
  104. CIRQV= $0314
  105. CBRKV= $0316
  106.  
  107.        ;+++ EXTERNAL JUMPS
  108.  
  109. BASNMI= $A002
  110. VICRESET = $E5A8
  111. KBDGET= $E5B4
  112. SCRCONT = $E602
  113. SCRGET= $E63A
  114. SCRPRINT = $E716
  115. INSTLIN = $E981
  116. POKCHR= $EA13
  117. KBDINPUT = $F15B
  118. BUSCLSE = $F651
  119. IOINIT= $FDA3
  120. SECOND= $FF93
  121. TKSA= $FF96
  122. IECIN= $FFA5
  123. IECOUT= $FFA8
  124. UNTLK= $FFAB
  125. UNLSN= $FFAE
  126. LISTEN= $FFB1
  127. TALK= $FFB4
  128. SETLFS= $FFBA
  129. SETNAM= $FFBD
  130. LOAD= $FFD5
  131. SAVE= $FFD8
  132. STOP= $FFE1
  133.  
  134. #ENDIF
  135. #IF TARGET == PET
  136.  
  137. TIME= $8D
  138. CIRQV= $90
  139. CBRKV= $92
  140. STATUS= $96
  141. LSTX= $97
  142. NOKEY= $FF; FOR LSTX
  143. VERCK= $9D
  144. NDX= $9E
  145. INDX= $A1
  146. LXSP= $A3
  147. BLNSW= $A7
  148. BLNCT= $A8
  149. GDBLN= $A9
  150. BLNON= $AA
  151. CRSW= $AC
  152. EAL= $C9
  153. FNLEN= $D1
  154. LA= $D2
  155. SA= $D3
  156. FA= $D4
  157. PNT= $C4
  158. PNTR= $C6
  159. QTSW= $CD
  160. TBLX= $D8
  161. DATAX= $D7
  162. FNADR= $DA
  163. #IF PETB4 && PETB480
  164. LDTBL= 0; NOT IMPLEMENTED
  165. #ELSE
  166. LDTBL= $E0
  167. #ENDIF; PETB4 && PETB480
  168. STAL= $FB
  169. MEMUSS= STAL+2
  170. RTSP= $0200
  171. RTSTACK = $0201
  172. KEYD= $026F
  173.  
  174. TMPLIN= 0; NOT IMPLEMENTED
  175. MSGFLG= 0; NOT IMPLEMENTED
  176. GDCOL= 0; NOT IMPLEMENTED
  177. AUTODN= 0; NOT IMPLEMENTED
  178. HIBASE= 0; NOT IMPLEMENTED
  179.  
  180.        ;+++ EXTERNAL JUMPS
  181.  
  182. SETNAM= 0; NOT IMPLEMENTED
  183. SETLFS= 0; NOT IMPLEMENTED
  184.  
  185. #IF PETB2
  186. BASREADY = $C389; BASIC ready.
  187.  
  188. IOINIT= 0
  189. KBDGET= $E285
  190. SCRPRINT = $E3D8; PRINT .a TO SCREEN (COULD USE ffd2)
  191. VICRESET = 0
  192. INSTLIN = $E5BA; REALLY: OPEN LINE ON SCREEN
  193.  
  194. TALK= $F0B6 ; SEND talk
  195. LISTEN= $F0BA ; SEND listen
  196. SECOND= $F128 ; SEND sa AFTER listen
  197. TKSA= $F164 ; SEND sa AFTER talk
  198. IECOUT= $F16F ; SEND BYTE TO ieee BUS
  199. UNTLK= $F17F ; SEND untalk
  200. UNLSN= $F183 ; SEND unlisten
  201. IECIN= $F18C ; GET BYTE FROM ieee BUS
  202. ROMLOAD = $F322 ; o/s VERSION OF load
  203. SEARCHING = $F40A; PRINT searching for NAME
  204. SENDNAME = $F466; SEND PROGRAM NAME TO BUS
  205. LOADING = $F42E ; PRINT loading
  206. SAVE= $F6A4 ; o/s VERSION OF save
  207. BUSLSNCLSE = $F6F0; SEND listen, close AND unlisten
  208. BUSCLSE = $F6FD ; SEND close AND unlisten
  209.  
  210. KBDINPUT = $F1E5; ffcf AFTER CHECKING FOR KEYBOARD
  211. STOP= $F301 ; TEST stop KEY
  212.  
  213. SCRCONT = $E2CC ; CONTINUE input LOOP
  214. SCRGET= $E2FC ; input (GET) BYTE FROM SCREEN
  215. POKCHR= $E6EA ; PUT CHAR (AND COLOUR) IN SCREEN MEMORY
  216. ; THE n-KEYBD VERSION HAS AN EXTRA DELAY LOOP
  217. ; HERE BUT WE CAN'T AVOID THAT: WOULD NOT WORK
  218. ; WITH THE b VERSION.
  219. #ENDIF; PETB2
  220. #IF PETB4
  221. ; sIGH... THE e000 JUMPTABLE ENTRIES ARE NOT
  222. ; IN THE "UPGRADE" 4.0 VERSION FOR petS WITHOUT
  223. ; crt CONTROLLER... SIGH...
  224. BASREADY = $B3FF
  225.  
  226. IOINIT= $E000
  227. KBDGET= $E0A7 ; $E003 WOULD BE BETTER BUT LESS COMPATIBLE
  228. SCRPRINT = $E202; $E009 PRINT .a TO SCREEN
  229. VICRESET = $E018; LOWER CASE SETTINGS
  230. INSTLIN = $E021
  231.  
  232. TALK= $F0D2
  233. LISTEN= $F0D5
  234. SECOND= $F143
  235. TKSA= $F193
  236. IECOUT= $F19E
  237. UNTLK= $F1AE
  238. UNLSN= $F1B9
  239. IECIN= $F1C0
  240. ROMLOAD = $F356
  241. SEARCHING = $F449
  242. SENDNAME = $F4A5
  243. LOADING = $F46D
  244. SAVE= $F6E3
  245. BUSLSNCLSE = $F72F
  246. BUSCLSE = $F73C
  247. STOP= $F335
  248.  
  249. KBDINPUT = $F219
  250.  
  251. #IF PETB440
  252. SCRCONT = $E0EE ; ACCIDENTALLY THE SAME IN 40 AND 80 COLUMS
  253. SCRGET= $E11E
  254. POKCHR= $E606 ; ACCIDENTALLY THE SAME IN 40 AND 80 COLUMS
  255. #ENDIF; PETB440
  256. #IF PETB480
  257. SCRCONT = $E0EE ; ACCIDENTALLY THE SAME IN 40 AND 80 COLUMS
  258. SCRGET= $E121
  259. POKCHR= $E606 ; ACCIDENTALLY THE SAME IN 40 AND 80 COLUMS
  260. #ENDIF; PETB480
  261. #ENDIF; PETB4
  262.  
  263.        ;+++ TABLES AND HARDWARE ADDRESSES
  264.  
  265. SCREEN= $8000
  266. #IF PETB4 && PETB480
  267. RAM96LATCH = $FFF0; SET TO 0 TO NOT SUPPORT IT.
  268. #ELSE
  269. RAM96LATCH = 0; SET TO 0 TO NOT SUPPORT IT.
  270. #ENDIF
  271.  
  272. #ENDIF; TARGET == PET
  273.  
  274.        ;+++ CONSTANTS
  275.  
  276. CR= $0D
  277. CU= $91; "^q"
  278. CD= $11; "^Q"
  279. HOME= $13; "^S"
  280. RVS= $12; "^R"
  281. OFF= $92; "^r"
  282. PF1= $85; "^e"
  283. CRI= $1D; "^]"
  284. CL= $9D; "^]"
  285. QUOTE= 34
  286. HEXWIDTH = COLUMNS / 5; 8 OR 16
  287. ASCWIDTH = 4 * COLUMNS / 5; 32 OR 64
  288.  
  289. ORG BASE
  290.  
  291.        ; +++ PROGRAM
  292.  
  293.     ;///MARK WITH START
  294. ENTRYPHP
  295. PHA
  296. LDA #<ROMIN
  297. STA CBRKV
  298. LDA #>ROMIN
  299. STA CBRKV+1
  300. LDA #0
  301. STA RTSP
  302. PLA
  303. PLP
  304. BRK
  305.  
  306. ROMIN
  307. #IF TARGET == C64
  308. LDA #$36
  309. STA PPORT
  310. #IF .ROMIN_END != RAMIN
  311. JMP RAMIN
  312. #ENDIF
  313. .ROMIN_END
  314. #ENDIF
  315.     ;///MARK WITH END
  316.  
  317. SUBROUTINE
  318.  
  319. RAMINCLD
  320. LDX #5
  321. IC012PLA
  322. STA RSPACE,X
  323. DEX
  324. BPL IC012
  325. TSX
  326. STX SPSAVE
  327. STX STACKMK
  328. LDA PCLO
  329. BNE IC028
  330. DEC PCHI
  331. IC028DEC PCLO
  332. LSR PFLAG
  333. LDA FA
  334. CMP #MINDISKDEV
  335. BCS IC038
  336. LDA #DISKDEV
  337. STA FA
  338. IC038
  339. #IF MSGFLG
  340. LDA #$C0
  341. STA MSGFLG
  342. #ENDIF
  343. JSR DOCR
  344. JMP RCMD
  345. ;LDA #"r"
  346. ;BNE DOCMD
  347. ERRORLDA #"?"
  348. JSR SCRPRINT
  349. PROMPTJSR DOCR
  350. LDA #"."
  351. JSR SCRPRINT
  352. LDA #0
  353. STA OVFLOW
  354. STA PFLAG
  355. EXECUTE LDX STACKMK
  356. TXS
  357. IC05CJSR NEXTCHR
  358. CMP #"."
  359. BEQ IC05C
  360. DOCMDLDX #ADRTAB-CMDTAB-1
  361. CMDLOOP CMP CMDTAB,X
  362. BNE CMDNXT
  363. STA CMDCHR
  364. TXA
  365. ASL ;A
  366. TAX
  367. LDA ADRTAB+1,X
  368. PHA
  369. LDA ADRTAB,X
  370. PHA
  371. PHP
  372. RTI ;DO THE COMMAND
  373.  
  374. CMDNXTDEX
  375. BPL CMDLOOP
  376. BMI ERROR
  377.  
  378. ; THE P COMMAND IS A PREFIX FOR THE OTHERS.
  379. ; WHEN USED IT PRINTS ON BOTH THE SCREEN AND PRINTER #PRINTDEV.
  380.  
  381. PCMDSEC
  382. ROR PFLAG; SET HIGH BIT
  383. BNE EXECUTE
  384.  
  385. ;+++ POINTER ROUTINES
  386.  
  387. STSTLINC
  388. JSR STASTAL
  389.  
  390. INCSTAL INC STAL
  391. BNE IC6A0
  392. INC STAL+1
  393. BNE IC6A0
  394. INC OVFLOW
  395. IC6A0RTS
  396.  
  397. DECMUSS LDX #2
  398. DC.B $2C
  399. DECSTAL LDX #0
  400. LDY STAL,X
  401. BNE IC09B
  402. LDY STAL+1,X
  403. BNE IC099
  404. INC OVFLOW
  405. IC099DEC STAL+1,X
  406. IC09BDEC STAL,X
  407. RTS
  408.  
  409. STALEQSV
  410. LDA STALSAV
  411. LDY STALSAV+1
  412. JMP IC0CE
  413.  
  414. STEQEND LDA MEMUSS
  415. LDY MEMUSS+1
  416. IC0CESEC
  417. SBC STAL
  418. STA LOLEFT
  419. TYA
  420. SBC STAL+1
  421. TAY ;HILEFT
  422. ORA LOLEFT
  423. RTS
  424.  
  425. SWSTEND LDX #2
  426. IC5F0LDA STAL-1,X
  427. PHA
  428. LDA MEMUSS-1,X
  429. STA STAL-1,X
  430. PLA
  431. STA MEMUSS-1,X
  432. DEX
  433. BNE IC5F0
  434. RTS
  435.  
  436. STPCSTA PCLO
  437. STX PCHI
  438. RTS
  439. ;/// MOVE ENTRY FOR $C000 HERE
  440.  
  441. ;+++ CONVERSION ROUTINES
  442.  
  443. SPHEX2PHA
  444. JSR DOSPC
  445. PLA
  446. JMP HEX2
  447.  
  448. HEX4LDA STAL+1
  449. JSR HEX2
  450. LDA STAL
  451. HEX2PHA
  452. LSR ;A
  453. LSR ;A
  454. LSR ;A
  455. LSR ;A
  456. JSR HEX1
  457. TAX
  458. PLA
  459. AND #$0F
  460. JSR HEX1
  461. PRINTXA PHA
  462. TXA
  463. JSR PRINT
  464. PLA
  465. JMP PRINT
  466.  
  467. A2HEXAX PHA
  468. LSR ;A
  469. LSR ;A
  470. LSR ;A
  471. LSR ;A
  472. JSR HEX1
  473. TAX
  474. PLA
  475. AND #$0F
  476.  
  477. HEX1CLC
  478. ADC #$F6
  479. BCC IC5EB
  480. ADC #6
  481. IC5EBADC #$3A
  482. RTS
  483.  
  484. DECILDX #8
  485. ICA3DSEC
  486. LDA STAL
  487. CMP TENPOW,X
  488. LDA STAL+1
  489. SBC TENPOW+1,X
  490. BCS ICA4E
  491. DEX
  492. DEX
  493. BNE ICA3D
  494. ICA4ELDY #$30
  495. SEC
  496. ICA51LDA STAL
  497. SBC TENPOW,X
  498. PHA
  499. LDA STAL+1
  500. SBC TENPOW+1,X
  501. BCC ICA66
  502. STA STAL+1
  503. PLA
  504. STA STAL
  505. INY
  506. BNE ICA51
  507. ICA66PLA
  508. TYA
  509. JSR PRINT
  510. DEX
  511. DEX
  512. BPL ICA4E
  513. RTS
  514.  
  515. ; PRINT .sr
  516. PRINTPS JSR DOSPC
  517. LDA PSSAVE
  518. BIN8LDX #8; PRINT .a BINARY
  519. IC704ROL ;A
  520. PHA
  521. LDA #"*"
  522. BCS IC70C
  523. LDA #"."
  524. IC70CJSR PRINT
  525. PLA
  526. DEX
  527. BNE IC704
  528. RTS
  529.  
  530. GETSTEND
  531. JSR HEX2STAL
  532. STA MEMUSS
  533. STX MEMUSS+1
  534. JSR EOL
  535. BEQ IC3AB
  536. JSR HEX2MUSS
  537. IC3ABJMP DOCR
  538.  
  539. GET3ADRS; GET ADDRESSES TO MEMUSS, STALSAV, STAL.
  540. JSR HEX2MUSS
  541. ;STA MEMUSS
  542. ;STX MEMUSS+1
  543. JSR HEX2AX
  544. STA STALSAV
  545. STX STALSAV+1
  546. HEX2STAL; GET ADDRESS TO STAL
  547. JSR HEX2AX
  548. STA STAL
  549. STX STAL+1
  550. RTS
  551.  
  552. HEX2MUSS; GET ADDRESS TO MEMUSS
  553. JSR HEX2AX
  554. STA MEMUSS
  555. STX MEMUSS+1
  556. RTS
  557.  
  558. HEX2AXJSR HEX2A; GET HEX ADDRESS TO A,X
  559. ;BCC ERRC6
  560. TAX
  561. ;JSR HEX2A
  562. ;BCC ERRC6
  563. ;RTS
  564.  
  565. HEX2A;LDA #0 ; GET HEX BYTE TO .a
  566. ;STA NYBBLE
  567. JSR NEXTCHR
  568. HEXA2AJSR HEX2NYBB; GET HEX BYTE IN .a DECODED TO .a
  569. ASL ;A
  570. ASL ;A
  571. ASL ;A
  572. ASL ;A
  573. STA NYBBLE
  574. JSR NEXTCHR
  575. JSR HEX2NYBB
  576. ORA NYBBLE
  577. SEC
  578. RTS
  579.  
  580. ERRCDJMP ERROR
  581.  
  582. HEX2NYBB; CONVERT CHARACTER TO HEX NYBBLE
  583. CMP #":"
  584. BCC IC651
  585. SBC #7
  586. IC651AND #$0F
  587. RTS
  588.  
  589. TST0FCMP #"0"        ; TEST FOR 0-f
  590. BCC IC50E
  591. CMP #"g"
  592. RTS ;C=0:MOGELIJK CIJFER
  593. IC50ESEC ;GEEN CIJFER
  594. RTS
  595.  
  596. ; HEXADECIMAL OR DECIMAL INPUT
  597.  
  598. HDIN4LDY #0
  599. STY $00,X
  600. STY $01,X
  601. CMP #"$"
  602. BEQ HEXIN4
  603. JSR TST09
  604. BCS ERRCD
  605. ICD14PHA; DECIMAL INPUT
  606. ASL $00,X; * 10
  607. LDA $00,X
  608. ROL $01,X
  609. LDY $01,X
  610. ASL ;A
  611. ROL $01,X
  612. ASL ;A
  613. ROL $01,X
  614. CLC
  615. ADC $00,X
  616. STA $00,X
  617. BCC ICD2C
  618. INY
  619. CLC
  620. ICD2CPLA
  621. ADC $00,X
  622. STA $00,X
  623. TYA
  624. ADC $01,X
  625. STA $01,X
  626. JSR KBDINPUT
  627. JSR TST09
  628. BCC ICD14
  629. RTS
  630.  
  631. HEXIN4JSR HEXIN1; INPUT 1-4 HEXADECIMAL DIGITS (4 SIGNIFICANT)
  632. BCS ERRCD
  633. ICD44LDY #4
  634. ICD46ASL $00,X
  635. ROL $01,X
  636. DEY
  637. BNE ICD46
  638. ORA $00,X
  639. STA $00,X
  640. JSR HEXIN1
  641. BCC ICD44
  642. RTS
  643.  
  644. HEXIN1JSR KBDINPUT; INPUT 1 HEXADECIMAL DIGIT
  645. CMP #"g"
  646. BCS ICD74
  647. CMP #"a"
  648. BCS ICD70
  649. TST09CMP #"0"        ; TEST IF BETWEEN 0 AND 9
  650. BCC ICD74
  651. CMP #":"
  652. BCS ICD74
  653. AND #$0F
  654. RTS
  655. ICD70SBC #$37
  656. CLC
  657. RTS
  658. ICD74SEC
  659. RTS
  660.  
  661. BIN2ALDX #8; BINARY TO .a
  662. IC752PHA
  663. JSR NEXTCHR
  664. CMP #"*"
  665. BEQ IC75B
  666. CLC
  667. IC75BPLA
  668. ROL ;A
  669. DEX
  670. BNE IC752
  671. RTS
  672.  
  673. EOLLDA PNTR; TEST IF AT THE END OF INPUT
  674. CMP INDX
  675. RTS
  676.  
  677. NEXTCHR JSR INPSKSP; GET NEXT NOSPACE CHARACTER
  678. BNE NOCR; ALWAYS
  679.  
  680. INPSKSP JSR INPUT; GET CHARACTER, SKIPPING SPACES
  681. SKIPSPC CMP #" "
  682. BEQ INPSKSP
  683. IC653RTS
  684.  
  685. INPNOCR JSR INPUT; GET NEXT CHARACTER
  686. NOCRCMP #CR ; ERROR IF CR
  687. BNE IC653
  688. JMP ERROR; PROMPT
  689.  
  690. ;+++ COMMAND ROUTINES
  691.  
  692. CCMDLDA #0; cOMPARE COMMAND
  693. DC.B $2C
  694. TCMDLDA #1; tRANSFER COMMAND
  695. STA CTFLAG; REMEMBER c OR t
  696. JSR GET3ADRS; GET sTART, eND, dEST
  697. JSR DOCR
  698. JSR STEQEND
  699. JSR SWSTEND
  700. BCC IC10D
  701. IC0F2JSR STALEQSV
  702. BCS IC0FA
  703. JMP PROMPT
  704. IC0FAJSR CTBYTE
  705. INC MEMUSS
  706. BNE IC103
  707. INC MEMUSS+1
  708. IC103JSR INCSTAL
  709. LDY OVFLOW
  710. BNE IC153
  711. BEQ IC0F2
  712. IC10DJSR STALEQSV
  713. CLC
  714. LDA LOLEFT
  715. ADC MEMUSS
  716. STA MEMUSS
  717. TYA
  718. ADC MEMUSS+1
  719. STA MEMUSS+1
  720. ;JSR SWPADRS WAS SUBR
  721.  
  722. SWPADRS LDX #2
  723. IC0B1LDA STAL-1,X
  724. PHA
  725. LDA STALSAV-1,X
  726. STA STAL-1,X
  727. PLA
  728. STA STALSAV-1,X
  729. DEX
  730. BNE IC0B1
  731. ;RTS
  732.  
  733. IC120JSR CTBYTE
  734. JSR STALEQSV
  735. BCS PRPTC1
  736. JSR DECMUSS
  737. JSR DECSTAL
  738. LDY OVFLOW
  739. BNE IC153
  740. BEQ IC120
  741.  
  742. CTBYTEJSR LDASTAL
  743. LDY CTFLAG
  744. BEQ IC142
  745. JMP STAMUSS
  746. IC142JSR CMPMUSS
  747. BEQ IC152
  748.  
  749. HEX4STOP; PRINT 4 HEX DIGITS, SPACE, TEST stop
  750. JSR HEX4
  751. JSR DOSPC
  752. JSR STOP
  753. BEQ IC153
  754. IC152RTS
  755. IC153JMP PROMPT
  756.  
  757. FCMDJSR HEX2STAL
  758. JSR HEX2MUSS
  759. JSR HEX2A
  760. ;BCC ERRC1
  761. STA APOS
  762. IC167LDX OVFLOW
  763. BNE PRPTC1
  764. JSR STEQEND
  765. BCC PRPTC1
  766. LDA APOS
  767. JSR STASTAL
  768. JSR INCSTAL
  769. BNE IC167; ALWAYS
  770. PRPTC1JMP PROMPT
  771.  
  772. HCMDJSR HEX2STAL
  773. JSR HEX2MUSS
  774. LDX #0
  775. JSR NEXTCHR
  776. CMP #"'"
  777. BNE HUNTHEX
  778. JSR NEXTCHR
  779. IC197STA HUNTBUF,X
  780. INX
  781. JSR KBDINPUT
  782. CMP #CR
  783. BEQ IC1C4
  784. CPX #END-HUNTBUF
  785. BNE IC197
  786. BEQ IC1C4
  787.  
  788. HUNTHEX ;STX NYBBLE
  789. JSR HEXA2A
  790. BCC ERRC1
  791. IC1B0STA HUNTBUF,X
  792. INX
  793. JSR INPSKSP
  794. CMP #CR
  795. BEQ IC1C4
  796. JSR HEXA2A
  797. BCC ERRC1
  798. CPX #END-HUNTBUF
  799. BNE IC1B0
  800. IC1C4STX HUNTLEN
  801. JSR DOCR
  802. HUNTLOOP
  803. LDX #0
  804. LDY #0
  805. TESTNEXT
  806. JSR LDASTALY
  807. CMP HUNTBUF,X
  808. BNE IC1E0
  809. INY
  810. INX
  811. CPX HUNTLEN
  812. BNE TESTNEXT
  813. JSR HEX4STOP
  814. IC1E0JSR INCSTAL
  815. LDY OVFLOW
  816. BNE PRPTC1E
  817. JSR STEQEND
  818. BCS HUNTLOOP
  819.  
  820. PRPTC1E JMP PROMPT
  821. ERRC1JMP ERROR
  822.  
  823. YCMDLDA #0
  824. STA HUNTLEN
  825. JSR HEX2STAL
  826. JSR HEX2MUSS
  827. Y02JSR INPSKSP
  828. CMP #CR
  829. BEQ YLOOP
  830. JSR TST0F
  831. BCS ERRC1
  832. JSR HEXA2A
  833. LDY HUNTBUF
  834. STY HUNTBUF+1
  835. STA HUNTBUF
  836. INC HUNTLEN
  837. BNE Y02
  838. YLOOPJSR STEQEND
  839. BCC PRPTC1E
  840. JSR OPREDU
  841. LDY OPLEN
  842. CPY HUNTLEN
  843. BNE Y00
  844. Y01JSR LDASTALY
  845. CMP HUNTBUF-1,Y
  846. BNE Y00
  847. DEY
  848. BNE Y01
  849. JSR DLINECM
  850. Y00JSR ADSTALEN
  851. JSR STOP
  852. BNE YLOOP
  853. BEQ PRPTC1E
  854.  
  855. DCMDJSR GETSTEND; dISASSEMBLE COMMAND
  856. DLOOPJSR STEQEND
  857. BCC CUPRPT
  858. JSR DDASHES
  859. JSR ADSTALEN
  860. JSR STOP
  861. BNE DLOOP
  862. CUPRPTJSR PRINTCU
  863. BNE PRPTC1E
  864.  
  865. #IF HAVEDASHES
  866. DDASHES JSR DLINECM
  867. DASHESJSR LDASTAL
  868. TAY
  869. AND #%11011111;JMP/JMP()
  870. CMP #%01001100
  871. BEQ DODASHES
  872. TYA
  873. AND #%10011111;BRK/RTS/RTI/JSR
  874. CMP #%00000000
  875. BNE NODASHES
  876. CPY #%00100000;JSR
  877. BEQ NODASHES
  878. DODASHES
  879. JSR DOCR
  880. LDX #35
  881. LDA #"-"
  882. ILI0JSR PRINT
  883. DEX
  884. BNE ILI0
  885. NODASHES
  886. #ELSE
  887. DDASHES = DLINECM
  888. #ENDIF; HAVEDASHES
  889.  RTS
  890.  
  891. DLINECM LDY #","
  892. DLINEJSR DINSTR
  893. LDX #9
  894. DOXSPJSR DOSPC; PRINT .x SPACES
  895. DEX
  896. BNE DOXSP
  897. RTS
  898.  
  899. DINSTRJSR CRDOTYSP; DISASSEMBLE ONE OPCODE
  900. DINSTR2 JSR HEX4
  901. JSR DOSPC
  902. JSR OPREDU
  903. PHA
  904. JSR DDUMP
  905. PLA
  906. JSR UNPACK
  907. LDX #6
  908. IC220CPX #3
  909. BNE IC239
  910. LDY OPLEN
  911. BEQ IC239
  912. ;PRINT HEX BYTE/S
  913. IC229LDA MODE
  914. CMP #$E8;RELATIVE
  915. JSR LDASTALY; MUST PRESERVR CARRY
  916. BCS PRTRELAD
  917. JSR HEX2SAVX
  918. DEY
  919. BNE IC229
  920. IC239ASL MODE
  921. BCC IC24C     ;842184
  922. LDA MODES1-1,X;$(#,),
  923. JSR PRTNOSUP
  924. LDA MODES2-1,X; $$X Y
  925. BEQ IC24C
  926. JSR PRTNOSUP
  927. IC24CDEX
  928. BNE IC220
  929. RTS
  930.  
  931. PRTRELAD
  932. JSR ADCSTALA
  933. TAX
  934. INX ;LOW
  935. BNE IC258
  936. INY ;HI
  937. IC258TYA
  938. JSR HEX2SAVX
  939. TXA
  940. HEX2SAVX STX .+7
  941. JSR HEX2
  942. LDX #0; OPERAND MODIFIED
  943. RTS
  944.  
  945. ADSTALEN LDA OPLEN
  946. ADDSTAA  JSR AD1STALA
  947. STA STAL
  948. STY STAL+1
  949. RTS
  950.  
  951. AD1STALA SEC ;SIGNED ACCU
  952. ADCSTALA LDY STAL+1
  953. TAX
  954. BPL IC279
  955. DEY
  956. IC279ADC STAL
  957. BCC IC27E
  958. INY
  959. IC27ERTS
  960.  
  961. ; rEDUCE OPCODE TO ESSENTIAL INSTRUCTION INFO
  962. ; USED BY A,D,Y,SCROLL
  963. OPREDUJSR LDASTAL
  964. REDUCETAY
  965. LSR ;A
  966. BCC IC28E
  967. LSR ;A
  968. BCS IC29D
  969. CMP #$22
  970. BEQ IC2A5
  971. AND #7
  972. ORA #$80
  973. IC28ELSR ;A
  974. TAX
  975. LDA ILLTAB,X
  976. BCS IC299
  977. LSR ;A
  978. LSR ;A
  979. LSR ;A
  980. LSR ;A
  981. IC299AND #$0F
  982. BNE IC2A9
  983. IC29DLSR ;A
  984. BCC IC2A5
  985. AND #1
  986. ADC #1;C=1
  987. DC.B $2C
  988. IC2A5LDA #0
  989. LDY #$80
  990.  
  991. IC2A9TAX
  992. LDA MODES,X
  993. STA MODE
  994. AND #3
  995. STA OPLEN
  996. TYA
  997. AND #$8F
  998. TAX
  999. TYA
  1000. LDY #3
  1001. CPX #$8A
  1002. BEQ IC2CB
  1003. IC2C0LSR ;A
  1004. BCC IC2CB
  1005. LSR ;A
  1006. IC2C4LSR ;A
  1007. ORA #$20
  1008. DEY
  1009. BNE IC2C4
  1010. INY
  1011. IC2CBDEY
  1012. BNE IC2C0
  1013. RTS
  1014.  
  1015. DDUMPJSR LDASTALY
  1016. JSR HEX2SAVX
  1017. LDX #1
  1018. IC2D7JSR DOXSP
  1019. CPY OPLEN
  1020. INY
  1021. BCC DDUMP
  1022. LDX #3
  1023. CPY #3
  1024. BCC IC2D7
  1025. JMP DOSPC
  1026.  
  1027. UNPACKTAY
  1028. LDA RD2PKLO,Y
  1029. STA STALSAV
  1030. LDA RD2PKHI,Y
  1031. STA STALSAV+1
  1032. IC2F4LDA #0
  1033. LDY #5
  1034. IC2F8ASL STALSAV+1
  1035. ROL STALSAV
  1036. ROL ;A
  1037. DEY
  1038. BNE IC2F8
  1039. ADC #$3F
  1040. JSR PRINT
  1041. DEX
  1042. BNE IC2F4
  1043. JMP DOSPC
  1044.  
  1045. CMCMDJSR HEX2STAL
  1046. LDA #3
  1047. JSR DOCOLON
  1048. LDY #","
  1049. JMP FILLKEYD
  1050.  
  1051. SUBROUTINE
  1052.  
  1053. LTCMDCLC; < COMMAND
  1054. DC.B $24
  1055. HTCMDSEC; > COMMAND
  1056. PHP
  1057. JSR HEX2STAL
  1058. JSR INPSKSP
  1059. CMP #QUOTE
  1060. BNE ERRC2
  1061. PLP
  1062. PHP
  1063. BCC ICA8E
  1064. ICA82JSR KBDINPUT
  1065. LDX CRSW
  1066. BEQ ICA9D
  1067. JSR STSTLINC
  1068. BNE ICA82
  1069. ICA8ELDY PNTR
  1070. LDA (PNT),Y
  1071. INC PNTR
  1072. CPY INDX
  1073. BCS ICA9D
  1074. JSR STSTLINC
  1075. BNE ICA8E
  1076. ICA9DLDA #"<"
  1077. PLP
  1078. BCC ICAA4
  1079. LDA #">"
  1080. ICAA4STA KEYD
  1081. LDA #0
  1082. STA KEYD+1
  1083. LDA #QUOTE
  1084. JMP FILKEYD2
  1085.  
  1086. ERRC2JMP ERROR
  1087.  
  1088. SUBROUTINE
  1089.  
  1090. KCMDJSR GETSTEND; K COMMAND
  1091. .TOPLDX OVFLOW
  1092. BNE .END
  1093. JSR STEQEND
  1094. BCC .END
  1095. JSR CRASCDMP
  1096. JSR STOP
  1097. BNE .TOP
  1098. .ENDJMP CUPRPT
  1099.  
  1100. SUBROUTINE
  1101.  
  1102. CRASCDMP
  1103. JSR DOCR
  1104. DOASCDMP
  1105. LDX #"."
  1106. LDA #">"
  1107. JSR PRINTXA
  1108. JSR HEX4
  1109. LDA #QUOTE
  1110. JSR PRINT
  1111. LSR QTSW
  1112. LDY #ASCWIDTH
  1113. BNE ASCDMP
  1114.  
  1115. DOCOLON STA APOS
  1116. PHA
  1117. ;IC31EJSR ABYTESIN
  1118.  
  1119. ABYTESIN
  1120. JSR INPNOCR
  1121. CMP #" "
  1122. BNE IC68E
  1123. JSR INPNOCR
  1124. JSR TST0F
  1125. BCS IC68E;IF NOT A DIGIT
  1126. JSR HEXA2A
  1127. ;BCC IC68E
  1128. ;LDX #0
  1129. JSR STASTAL
  1130. JSR CMPSTAL
  1131. BNE ERRC2
  1132. IC68EJSR INCSTAL
  1133. DEC APOS
  1134. ;RTS
  1135.  
  1136. BNE ABYTESIN;IC31E
  1137. PLA
  1138. SBCSTAA EOR #$FF
  1139. JMP ADDSTAA
  1140.  
  1141. MCMDJSR GETSTEND
  1142. IC32FLDX OVFLOW
  1143. BNE IC341
  1144. JSR STEQEND
  1145. BCC IC341
  1146. JSR CRHEXDMP
  1147. JSR STOP
  1148. BNE IC32F
  1149. IC341JMP CUPRPT
  1150.  
  1151. CRHEXDMP; PRINT cr AND HEX DUMP
  1152. JSR DOCR
  1153. DOHEXDMP; DO HEX DUMP
  1154. LDX #"."
  1155. LDA #":"
  1156. JSR PRINTXA
  1157. JSR DOSPC
  1158. JSR HEX4
  1159. LDA #HEXWIDTH
  1160. ;JSR AHEX2 WAS SUBROUTINE
  1161.  
  1162. AHEX2STA APOS
  1163. LDY #0
  1164. IC66AJSR DOSPC
  1165. JSR LDASTALY
  1166. JSR HEX2
  1167. JSR INCSTAL
  1168. DEC APOS
  1169. BNE IC66A
  1170. ;RTS
  1171.  
  1172. LDA #HEXWIDTH
  1173. JSR SBCSTAA
  1174. LDY #HEXWIDTH
  1175. ASCDMPJSR LDASTAL
  1176. PHA
  1177. AND #$7F
  1178. CMP #$20
  1179. PLA
  1180. PHP
  1181. BCS IC374
  1182. PHA
  1183. LDA #RVS
  1184. JSR PRINT
  1185. PLA
  1186. ORA #$40
  1187. IC374JSR PRINT
  1188. LSR QTSW
  1189. PLP
  1190. BCS I300
  1191. LDA #OFF
  1192. JSR PRINT
  1193. I300JSR INCSTAL
  1194. DEY
  1195. BNE ASCDMP
  1196. RTS
  1197.  
  1198. COCMDJSR HEX2STAL; : COLON COMMAND
  1199. LDA #HEXWIDTH
  1200. JSR DOCOLON
  1201. JSR PRINTCU
  1202. JSR CRHEXDMP
  1203. LDA #":"
  1204. FILKEYD0
  1205. STA KEYD
  1206. JMP FILKEYD1
  1207.  
  1208. ACMDJSR HEX2AX
  1209. STA MEMUSS
  1210. STX MEMUSS+1
  1211. IC3B5LDX #0; FIND 3-LETTER WORD
  1212. STX HUNTBUF+1
  1213. IC3BAJSR INPNOCR
  1214. CMP #" "
  1215. BEQ IC3B5
  1216. STA ABUF,X
  1217. INX
  1218. CPX #3
  1219. BNE IC3BA
  1220.  
  1221. IC3C9DEX
  1222. BMI IC3E0
  1223. LDA ABUF,X
  1224. SEC
  1225. SBC #$3F
  1226. LDY #5; 5 BITS OF THE LETTER
  1227. IC3D4LSR ;A
  1228. ROR HUNTBUF+1
  1229. ROR HUNTBUF
  1230. DEY
  1231. BNE IC3D4
  1232. BEQ IC3C9
  1233. ; 3*5 BITS FIT IN A WORD
  1234. IC3E0LDX #2
  1235. IC3E2JSR KBDINPUT
  1236. CMP #CR
  1237. BEQ IC40B
  1238. CMP #":"
  1239. BEQ IC40B
  1240. CMP #" "
  1241. BEQ IC3E2
  1242. ; THERE IS AN OPERAND
  1243. JSR TST0F
  1244. BCS IC405
  1245. JSR HEXA2A
  1246. LDY STAL
  1247. STY STAL+1
  1248. STA STAL; SAVE LO/HI ORDER
  1249. LDA #$30
  1250. STA HUNTBUF,X
  1251. INX
  1252. IC405STA HUNTBUF,X
  1253. INX
  1254. BNE IC3E2
  1255.  
  1256. IC40BSTX STALSAV
  1257. LDX #0; TRIED OPCODE
  1258. STX OVFLOW
  1259. ALOOPLDX #0
  1260. STX APOS
  1261. LDA OVFLOW
  1262. JSR REDUCE
  1263. LDX MODE
  1264. STX STALSAV+1
  1265. TAX
  1266. LDA RD2PKHI,X
  1267. JSR AMATCH
  1268. LDA RD2PKLO,X
  1269. JSR AMATCH
  1270. LDX #6
  1271. IA433CPX #3
  1272. BNE IC44B
  1273. LDY OPLEN
  1274. BEQ IC44B
  1275. IC43CLDA MODE
  1276. CMP #$E8
  1277. LDA #$30
  1278. BCS IC463
  1279. JSR AMATCH2
  1280. DEY
  1281. BNE IC43C
  1282. IC44BASL MODE
  1283. BCC IC45E
  1284. LDA MODES1-1,X
  1285. JSR AMATCH
  1286. LDA MODES2-1,X
  1287. BEQ IC45E
  1288. JSR AMATCH
  1289. IC45EDEX
  1290. BNE IA433
  1291. BEQ IC469
  1292.  
  1293. IC463JSR AMATCH2
  1294. JSR AMATCH2
  1295. IC469LDA STALSAV
  1296. CMP APOS
  1297. BEQ IC474
  1298. JMP NXTOPC
  1299. IC474JSR SWSTEND
  1300. LDY OPLEN
  1301. BEQ IC4AB
  1302. LDA STALSAV+1
  1303. CMP #$9D
  1304. BNE IC4A2
  1305. JSR STEQEND
  1306. BCC IC492
  1307. TYA
  1308. BNE ERRC4
  1309. LDX LOLEFT
  1310. BMI ERRC4
  1311. BPL IC49A
  1312. IC492INY
  1313. BNE ERRC4
  1314. LDX LOLEFT
  1315. BPL ERRC4
  1316. IC49ADEX
  1317. DEX
  1318. TXA
  1319. LDY OPLEN
  1320. BNE IC4A5
  1321. IC4A2LDA STAL+1,Y
  1322. IC4A5JSR STASTALY
  1323. DEY
  1324. BNE IC4A2
  1325. IC4ABLDA OVFLOW
  1326. JSR STASTALY
  1327. LDY #"a"
  1328. FILLKEYD
  1329. STY KEYD
  1330. JSR PRINTCU
  1331. JSR DLINE
  1332. JSR ADSTALEN
  1333. FILKEYD1
  1334. LDA #" "
  1335. STA KEYD+1
  1336. FILKEYD2
  1337. STA KEYD+6
  1338. LDA STAL+1
  1339. JSR A2HEXAX
  1340. STX KEYD+2
  1341. STA KEYD+3
  1342. LDA STAL
  1343. JSR A2HEXAX
  1344. STX KEYD+4
  1345. STA KEYD+5
  1346. LDA #7
  1347. STA NDX
  1348. JMP PROMPT
  1349.  
  1350. AMATCH2 JSR AMATCH
  1351. AMATCHSTX HUNTLEN
  1352. LDX APOS
  1353. CMP HUNTBUF,X
  1354. BEQ IC4FF
  1355. PLA
  1356. PLA
  1357. NXTOPCINC OVFLOW  ;TRIED OPCODE
  1358. BEQ ERRC4
  1359. JMP ALOOP
  1360. ERRC4JMP ERROR
  1361.  
  1362. IC4FFINX
  1363. STX APOS
  1364. LDX HUNTLEN
  1365. RTS
  1366.  
  1367. JCMDLDA #$20;JSR
  1368. DC.B $2C
  1369. GCMDLDA #$4C ;JMP
  1370. STA AC56B
  1371. JSR KBDINPUT
  1372. CMP #CR
  1373. BEQ IC54A
  1374. CMP #" "
  1375. BNE IC56F
  1376. JSR HEX2AX
  1377. JSR STPC
  1378. JSR KBDINPUT
  1379. CMP #CR
  1380. BNE ERRC4
  1381. IC54AJSR DOCR
  1382. LDX SPSAVE
  1383. TXS
  1384. LDA PCHI
  1385. STA AC56B+2
  1386. LDA PCLO
  1387. STA AC56B+1
  1388. LDA PSSAVE
  1389. PHA
  1390. LDA ACSAVE
  1391. LDX XRSAVE
  1392. LDY YRSAVE
  1393. PLP
  1394. AC56BJMP $FFFF; THIS ADDRESS WILL BE MOFIFIED
  1395. BRK
  1396.  
  1397. IC56FCMP #"f"
  1398. BNE ERRC4
  1399. ;LDA AC56B
  1400. ;CMP #$4C; JMP
  1401. ;BNE ERRC4
  1402. JSR KBDINPUT
  1403. CMP #" "
  1404. BNE ERRC4
  1405. JSR HEX2AX
  1406. STA MEMLO
  1407. STX MEMHI
  1408. LDA #"e"
  1409. JSR DISKMRW
  1410. JSR UNLSN
  1411. JMP PROMPT
  1412.  
  1413. RCMDLDX #0; rEGISTER DUMP CMD
  1414. IC6B6LDA RTXT,X
  1415. JSR PRINT
  1416. INX
  1417. CPX #CMDTAB-RTXT
  1418. BNE IC6B6
  1419. LDA PCHI
  1420. JSR HEX2
  1421. LDA PCLO
  1422. JSR HEX2
  1423. JSR DOSPC
  1424. LDA CIRQV+1
  1425. JSR HEX2
  1426. LDA CIRQV
  1427. JSR HEX2
  1428. #IF TARGET == C64
  1429. LDA PPORT
  1430. #ENDIF
  1431. #IF TARGET == PET
  1432. LDA BANKPP
  1433. #ENDIF
  1434. JSR SPHEX2
  1435. LDA FA
  1436. JSR SPHEX2
  1437. LDY #0
  1438. IC6E8LDA ACSAVE,Y
  1439. JSR SPHEX2
  1440. INY
  1441. CPY #4
  1442. BCC IC6E8
  1443. JSR PRINTPS
  1444. JMP PROMPT
  1445.  
  1446. ; SEMICOLON CMD
  1447. SCCMDJSR HEX2AX; PC
  1448. JSR STPC
  1449. JSR HEX2AX; IRQ
  1450. SEI
  1451. STA CIRQV
  1452. STX CIRQV+1
  1453. CLI
  1454. JSR HEX2A; PROCESSOR PORT
  1455. #IF TARGET == C64
  1456. STA PPORT
  1457. #ENDIF
  1458. #IF TARGET == PET
  1459. STA BANKPP
  1460. #ENDIF
  1461. JSR HEX2A; DRIVE
  1462. STA FA
  1463. LDY #0
  1464. IC739JSR HEX2A
  1465. STA ACSAVE,Y
  1466. INY
  1467. CPY #4
  1468. BCC IC739
  1469. JSR BIN2A
  1470. STA PSSAVE
  1471. JMP PROMPT
  1472.  
  1473. ICMD
  1474. #IF IOINIT
  1475. JSR IOINIT; iNITIALISE io COMMAND
  1476. #ENDIF
  1477. #IF HIBASE
  1478. LDA #4
  1479. STA HIBASE
  1480. #ENDIF
  1481. #IF VICRESET
  1482. JSR VICRESET
  1483. #ENDIF
  1484. JMP PROMPT
  1485.  
  1486. XCMD; ExIT CMD
  1487. #IF TARGET == C64
  1488. LDA #$37
  1489. STA PPORT
  1490. JMP (BASNMI)
  1491. #ENDIF
  1492. #IF TARGET == PET
  1493. #IF RAM96LATCH
  1494. LDA BANKPP
  1495. STA RAM96LATCH
  1496. #ENDIF
  1497. JMP BASREADY
  1498. #ENDIF
  1499.  
  1500. LSVCMD;LDA #0 ; lOAD, sAVE, OR vERIFY COMMAND
  1501. LDY #1; SA
  1502. #IF SETLFS
  1503. LDX FA
  1504. JSR SETLFS
  1505. #ELSE
  1506. STY SA
  1507. #ENDIF
  1508. LDA #0
  1509. STA STATUS
  1510. LDX #<HUNTBUF
  1511. LDY #>HUNTBUF
  1512. #IF SETNAM
  1513. JSR SETNAM
  1514. #ELSE
  1515. STA FNLEN
  1516. STX FNADR
  1517. STY FNADR+1
  1518. #ENDIF
  1519. LL00JSR INPSKSP; GET FILENAME
  1520. CMP #CR ; .l "FILENAME   ONLY?
  1521. BEQ DO_LOAD
  1522. CMP #QUOTE
  1523. BNE LL00
  1524. LDY #0
  1525. IC78AJSR KBDINPUT
  1526. CMP #QUOTE
  1527. BEQ IC7A0
  1528. CMP #CR
  1529. BEQ DO_LOAD
  1530. INY
  1531. CPY #END-HUNTBUF
  1532. BCS ERRC7
  1533. STA HUNTBUF-1,Y
  1534. STY FNLEN
  1535. BNE IC78A
  1536. IC7A0JSR EOL
  1537. BNE IC7C6
  1538.  
  1539. DO_LOAD LDA CMDCHR
  1540. CMP #"s"
  1541. BEQ ERRC7
  1542. SEC
  1543. SBC #"l"        ; SET .a <> 0 FOR vERIFY
  1544. #IF 0 && VERCK; NEEDED BY THE NORMAL pet ROM ROUTINE
  1545. STA VERCK; 1 IS VERIFY
  1546. #ENDIF
  1547. #IF 1 {$7c}{$7c} TARGET != PET; IGNORED BY THE NORMAL pet ROM ROUTINE
  1548. LDX STAL
  1549. LDY STAL+1
  1550. #ENDIF
  1551. JSR LOAD
  1552. BCS ERRC7
  1553. LDA STATUS
  1554. AND #$10; VERIFY ERROR
  1555. BNE ERRC7
  1556. JMP PROMPT
  1557.  
  1558. ERRC7JMP ERROR
  1559.  
  1560. IC7C6DEC SA; MAKE SA 0, FOR RELOCATING LOAD
  1561. JSR HEX2STAL; GET START ADDRESS TO SAVE
  1562. JSR EOL
  1563. #BEQ DO_LOAD; IF LOAD ADDRESS GIVEN, ATTEMPT TO LOAD THERE
  1564. JSR HEX2AX; GET END ADDRESS
  1565. STA EAL ; START IN STAL, END IN EAL, AS FOR pet
  1566. STX EAL+1
  1567. JSR EOL
  1568. BNE ERRC7
  1569. LDA CMDCHR
  1570. CMP #"s"        ; SAVE
  1571. BNE ERRC7
  1572. #IF TARGET != PET
  1573. LDA #STAL; ADDRESS FOR SAVE START ADDRESS
  1574. LDX EAL ; SAVE END ADDRESS
  1575. LDY EAL+1
  1576. #ENDIF
  1577. JSR SAVE
  1578. JMP PROMPT
  1579.  
  1580. #IF HAVEECMD
  1581. ECMDJSR KBDINPUT
  1582. LDX #$7F
  1583. CMP #"c"
  1584. BEQ IC9D9
  1585. INX
  1586. CMP #"s"
  1587. BNE ERRC7
  1588. IC9D9STX LRBFLAG
  1589. JSR GETSTEND
  1590. IC9DFLDX OVFLOW
  1591. BNE IC9F1
  1592. JSR STEQEND
  1593. BCC IC9F1
  1594. JSR DOCRLRB
  1595. JSR STOP
  1596. BNE IC9DF
  1597. IC9F1JMP CUPRPT
  1598.  
  1599. DOCRLRB JSR DOCR
  1600. DOLRBLDX #"."
  1601. LDA #"]"
  1602. BIT LRBFLAG
  1603. BMI ICA02
  1604. LDA #"["
  1605. ICA02JSR PRINTXA
  1606. JSR DOSPC
  1607. JSR LRBADR
  1608. JSR DOSPC
  1609. LDY #0
  1610. ICA10JSR LDASTALY
  1611. JSR BIN8
  1612. BIT LRBFLAG
  1613. BPL ICA21
  1614. INY
  1615. CPY #3
  1616. BCC ICA10
  1617. DEY
  1618. ICA21TYA
  1619. JSR ADDSTAA
  1620. RTS
  1621.  
  1622. LRBADRBIT LRBFLAG
  1623. BPL ICA38
  1624. LDA STAL; FOR SPRITE ADD 1
  1625. AND #$3F
  1626. CMP #$3F
  1627. BNE ICA38
  1628. JSR INCSTAL
  1629. ICA38JMP HEX4
  1630.  
  1631. LBCMDLDX #$7F; LEFT BRACKET CMD [
  1632. DC.B $2C
  1633. RBCMDLDX #$80; RIGHT BRACKET CMD ]
  1634. STX LRBFLAG
  1635. JSR HEX2STAL
  1636. LDY #0
  1637. ICACEJSR BIN2A
  1638. JSR STASTALY
  1639. BIT LRBFLAG
  1640. BPL ICADE
  1641. INY
  1642. CPY #3
  1643. BCC ICACE
  1644. ICADEJSR PRINTCU
  1645. JSR DOCRLRB
  1646. LDA CMDCHR
  1647. JMP FILKEYD0
  1648. #ENDIF; HAVEECMD
  1649. ERRCAJMP ERROR
  1650.  
  1651. ; bANK CMD.
  1652. ; hAS A NYBBLE AS ARGUMENT ON THE 64, AND
  1653. ; A BYTE ON THE pet.
  1654. BCMDJSR INPSKSP
  1655. CMP #CR
  1656. BEQ ICB07
  1657. #IF TARGET == C64
  1658. JSR HEX2NYBB
  1659. CMP #8; ONLY ALLOW BANKS 0-7 AND F
  1660. BCC ICB02
  1661. CMP #$0F
  1662. BNE ERRCA
  1663. LDA #$86; $80 TO FLAG DRIVE, BANK 6 IN THE 64
  1664. ICB02STA BANK
  1665. BNE PRPTCB
  1666. #ENDIF
  1667. #IF TARGET == PET
  1668. STA BANK0F; ATTEMPT TO CLEAR BIT 7
  1669. JSR HEXA2A
  1670. STA BANK
  1671. CMP #$0F
  1672. BNE PRPTCB
  1673. ROR BANK0F; C=1: BIT 7 := 1 IFF BANK == 0F
  1674. LDA #$00; SET BANK FOR NOT-IN-DRIVE MEMORY
  1675. STA BANK
  1676. BEQ PRPTCB
  1677. #ENDIF
  1678. ICB07LDA BANK
  1679. #IF TARGET == C64
  1680. BPL ICB0E
  1681. LDA #"f"-"0"; $16
  1682. ICB0ECLC
  1683. ADC #"0"
  1684. JSR PRINT
  1685. #ENDIF
  1686. #IF TARGET == PET
  1687. JSR HEX2
  1688. #ENDIF
  1689. PRPTCBJMP PROMPT
  1690.  
  1691. QMCMDJSR INPSKSP; QUESTION MARK ? CMD
  1692. CMP #CR
  1693. BNE ICD95
  1694. LDX #0; PROVIDE HELP ON JUST ?
  1695. ICD87LDA CMDTAB,X
  1696. JSR PRINT
  1697. INX
  1698. CPX #ADRTAB-CMDTAB
  1699. BNE ICD87
  1700. BEQ PRPTCB
  1701. ICD95LDX #STAL
  1702. JSR HDIN4
  1703. CALCLOOP
  1704. JSR SKIPSPC
  1705. CMP #CR
  1706. BEQ ICDD6
  1707. PHA
  1708. JSR INPSKSP
  1709. LDX #MEMUSS
  1710. JSR HDIN4
  1711. TAY
  1712. PLA
  1713. JSR DO_OP
  1714. TYA
  1715. JMP CALCLOOP
  1716.  
  1717. DO_OPLDX #4
  1718. ICDB5CMP OPTAB,X
  1719. BEQ ICDBF
  1720. DEX
  1721. BPL ICDB5
  1722. BMI ERRCA
  1723. ICDBFLDA OPCTAB,X
  1724. STA ACDCB
  1725. STA ACDD1
  1726. ASL ;A; C:=1 FOR SBC... *DIRTY*
  1727. LDA STAL
  1728. ACDCBAND MEMUSS; OPCODE MODIFIED
  1729. STA STAL
  1730. LDA STAL+1
  1731. ACDD1AND MEMUSS+1; OPCODE MODIFIED
  1732. STA STAL+1
  1733. RTS
  1734.  
  1735. ICDD6JSR DOCR
  1736. JSR HEX4
  1737. JSR DOSPC
  1738. JSR DECI
  1739. JMP PROMPT
  1740.  
  1741. ;+++ BEGIN OF I/O ROUTINES
  1742.  
  1743. ADR2STAL
  1744. INY
  1745. JSR LDASTALY
  1746. TAX
  1747. INY
  1748. JSR LDASTALY
  1749. STA STAL+1
  1750. STX STAL
  1751. RTS
  1752.  
  1753. DOTRCRLDY RTSP; HANDLE RETURN DISASSEMBLY
  1754. BEQ NORETURN
  1755. DEY
  1756. LDA RTSTACK,Y
  1757. STA STAL+1
  1758. DEY
  1759. LDA RTSTACK,Y
  1760. STA STAL
  1761. STY RTSP
  1762. JMP SCROLLD
  1763.  
  1764. NORETURN
  1765. CMP #$60; RTS
  1766. BEQ IW02
  1767. DOTRCJSEC; UP
  1768. JSR GETCMD
  1769. BCS WAITPRTC
  1770. LDY #0
  1771. JSR LDASTAL
  1772. CMP #$60; RTS
  1773. BEQ DOTRCR
  1774. CMP #$20; JSR
  1775. BNE IW02
  1776. LDX RTSP
  1777. LDA STAL
  1778. ;CLC C IS 1
  1779. ADC #3-1
  1780. STA RTSTACK,X
  1781. INX
  1782. LDA STAL+1
  1783. ADC #0
  1784. STA RTSTACK,X
  1785. INX
  1786. STX RTSP
  1787. BNE IWABS
  1788.  
  1789. IW02CMP #$4C; JMP
  1790. BNE IW03
  1791. IWABSJSR ADR2STAL
  1792. JMP SCROLLD
  1793.  
  1794. IW03CMP #$6C; JMP()
  1795. BNE IW04
  1796. JSR ADR2STAL
  1797. LDY #$FF
  1798. BNE IWABS
  1799.  
  1800. IW04AND #%00011111; BRANCH
  1801. CMP #%00010000
  1802. BNE IW05
  1803. INY
  1804. JSR LDASTALY
  1805. JSR AD1STALA
  1806. TAX
  1807. INX ;LO
  1808. BNE IW041
  1809. INY ;HI
  1810. IW041STX STAL
  1811. STY STAL+1
  1812. JMP SCROLLD
  1813.  
  1814. IW05JMP SCRD
  1815.  
  1816. #IF HAVEPFKEYS
  1817. DOFKEYS TAX
  1818. LDY PFLEN-PF1,X
  1819. STY NDX
  1820. LDA PFENDS-PF1,X
  1821. TAX
  1822. IC801LDA PF1TXT,X
  1823. STA KEYD-1,Y
  1824. DEX
  1825. DEY
  1826. BNE IC801
  1827. BEQ WAIT
  1828. #ENDIF; HAVEPFKEYS
  1829.  
  1830. SUBROUTINE
  1831.  
  1832. ; THIS DUPLICATES THE ROM INPUT ROUTINE, INSERTING
  1833. ; CODE FOR OUR SPECIAL KEYS (CU, CD, STOP).
  1834. ; aLSO DOES AUTOREPEAT ON MODELS THAT DON'T HAVE IT THEMSELVES (3032) 
  1835.  
  1836. INPUTTYA
  1837. PHA
  1838. TXA
  1839. PHA
  1840. LDA #0
  1841. STA LXSP+1
  1842. #IF AUTOREPEAT && 0; THIS PART SERVES TO GET THE INITIAL TIMING
  1843. LDA #SLOWREP; RIGHT. IT MAY BE REMOVED IN CASE OF
  1844. CLC; MEMORY SHORTAGE SINCE IT IS ALMOST NEVER
  1845. ADC TIME+2; *REALLY* NEEDED, BECAUSE USUALLY THIS FUNCTION
  1846. STA REPTIME; IS CALLED WITH NO KEY PRESSED.
  1847. #ENDIF
  1848. LDA CRSW; INPUT FROM SCREEN OR KEYBOARD (CR SWITCH)
  1849. BEQ WAIT
  1850. JMP SCRGET; GET FROM THE SCREEN IN ROM
  1851.  
  1852. WAITPRTC
  1853. LDA DATAX; KEY THAT HAS BEEN HIT
  1854. WAITPRT JSR SCRPRINT; PRINT IT
  1855.  
  1856. WAIT:
  1857. #IF 1 && AUTOREPEAT
  1858. ; uSE JIFFY TIMER TO CHECK WHEN TO MAKE A KEY REPEAT.
  1859. ; wHEN NO KEY WAS PRESSED, SET TO SLOW VALUE.
  1860. ; wHEN ACTION IS TAKEN, SET TO FAST VALUE.
  1861. ; a KEY IS MADE TO REPEAT BY MAKING THE KEYBOARD SCANNER THINK
  1862. ; THE PREVIOUS KEY WAS DIFFERENT, WHICH IS DONE BY CHANGING LSTX.
  1863.  
  1864. LDA #SLOWREP
  1865. LDX #NOKEY
  1866. CPX LSTX
  1867. BEQ NOTPRESSED$
  1868.  
  1869. LDA TIME+2
  1870. CMP REPTIME
  1871. BMI ENDREPEAT$
  1872. #IF TARGET == PET
  1873. INC LSTX; NOT "STX LSTX" BECAUSE THAT WOULD FOOL US
  1874. ; NEXT TIME AROUND...
  1875. #ELSE
  1876. DEC LSTX; FOR 64 USE DEC BECAUSE NOKEY==64 AND THIS
  1877. ; WOULD BE BAD FOR SCANCODE 63, AS ABOVE...
  1878. #ENDIF
  1879. LDA #FASTREP
  1880. NOTPRESSED$
  1881. CLC
  1882. ADC TIME+2
  1883. STA REPTIME
  1884. ENDREPEAT$
  1885. #ENDIF
  1886. #IF 0 && AUTOREPEAT
  1887. LDA BLNCT; ABUSE CURSOR BLINK COUNTDOWN TO CHECK WHEN
  1888. CMP REPTIME; TO MAKE A KEY REPEAT.
  1889. BNE ENDREPEAT$; WHEN NO KEY WAS PRESSED, SET TO SLOW VALUE.
  1890. LDX #NOKEY; WHEN ACTION IS TAKEN, SET TO FAST VALUE.
  1891. CPX LSTX; A KEY IS MADE TO REPEAT BY FAKING THE RELEASE
  1892. BEQ NOTPRESSED$; OF THE KEY, BY SETTING LSTX TO #NOKEY.
  1893. STX LSTX
  1894. DEC BLNCT
  1895. LDA #20-3; FASTREP
  1896. STA REPTIME
  1897. BNE ENDREPEAT$
  1898. NOTPRESSED$
  1899. LDA #20-17; SLOWREP
  1900. STA REPTIME
  1901. ENDREPEAT$
  1902. #ENDIF
  1903. LDA NDX ; ANYTHING IN THE KEYBOARD BUFFER?
  1904. STA BLNSW; IF <>0, TURN OFF CURSOR
  1905. #IF AUTODN
  1906. STA AUTODN
  1907. #ENDIF
  1908. BEQ WAIT
  1909. LDA BLNON; RESTORE CHAR AND COLOUR UNDER CURSOR,
  1910. BEQ ICO00; IF NEEDED
  1911. LDA GDBLN
  1912. #IF GDCOL
  1913. LDX GDCOL
  1914. #ENDIF
  1915. LSR BLNON
  1916. JSR POKCHR
  1917. ICO00JSR KBDGET; GET CHAR FROM KEYBOARD BUFFER
  1918.  
  1919. LDX QTSW; QUOTE MODE SWITCH
  1920. BNE IC058; IF IN QUOTE MODE, DON'T BE FANCY
  1921. LDX TBLX; SCREEN LINE OF CURSOR
  1922. STA DATAX; KEY THAT HAS BEEN HIT
  1923. #IF HAVEPFKEYS
  1924. CMP #PF1; CHECK FOR PF KEYS
  1925. BCC IC847
  1926. CMP #PF1+8
  1927. BCC DOFKEYS
  1928. #ENDIF
  1929. IC847CMP #$03; "^C"
  1930. BEQ DOJUMP
  1931. CMP #$83; "^c"
  1932. BEQ DORETURN
  1933. CMP #CD ; CURSOR DOWN
  1934. BEQ DOCD
  1935. CMP #CU ; CURSOR UP
  1936. BEQ DOCU
  1937. IC058CMP #CR ; RETURN = DONE
  1938. BNE WAITPRT
  1939. JMP SCRCONT; CONTINUE INPUT FUNCTION IN ROM
  1940.  
  1941. DOJUMP
  1942. JMP DOTRCJ; FOLLOW CHANGED FLOW OF CONTROL
  1943. DORETURN
  1944. JMP DOTRCR; GO BACK TO PREVIOUS JSR
  1945.  
  1946. DOCDCPX #LINES-1; BOTTOM LINE
  1947. BCC WAITPRT
  1948. JSR GETCMD; C = 1: GO UP
  1949. BCS WAITPRTC
  1950. LDA CMDCHR
  1951. CMP #":"
  1952. BNE I800
  1953. ; SCROLL UP MEM DUMP
  1954. ;CLC
  1955. LDA STAL
  1956. ADC #HEXWIDTH-1 ;C=1
  1957. STA STAL
  1958. BCC IC871
  1959. INC STAL+1
  1960. IC871JSR CRHEXDMP
  1961. TAB1LDA #1
  1962. STA PNTR
  1963. JMP WAIT
  1964.  
  1965. I800CMP #">"
  1966. BNE IC87B
  1967. ; SCROLL UP ASC DUMP
  1968. ;CLC
  1969. LDA STAL
  1970. ADC #ASCWIDTH-1 ;C IS 1 (EQUAL)
  1971. STA STAL
  1972. BCC I801
  1973. INC STAL+1
  1974. I801JSR CRASCDMP
  1975. JMP TAB1
  1976.  
  1977. IC87BCMP #","
  1978. BNE IC892
  1979. ; SCROLL UP DISASSEMBLY
  1980. SCRDJSR OPREDU
  1981. JSR ADSTALEN
  1982. SCROLLD ;LDY #","
  1983. JSR DDASHES
  1984. JMP TAB1
  1985.  
  1986. IC892
  1987. #IF HAVEECMD
  1988. ; SCROLL UP [ OR ]
  1989. LDX #$7F
  1990. CMP #"["-$40
  1991. BEQ IC899
  1992. INX
  1993. IC899STX LRBFLAG
  1994. CLC
  1995. LDA #1
  1996. BIT LRBFLAG
  1997. BPL IC8A6
  1998. LDA #3
  1999. IC8A6ADC STAL
  2000. STA STAL
  2001. BCC IC8AE
  2002. INC STAL+1
  2003. IC8AEJSR DOCRLRB
  2004. JMP TAB1
  2005. #ENDIF; HAVEECMD
  2006.  
  2007. DOCUTXA
  2008. BNE IC8BD
  2009. CLC
  2010. JSR GETCMD
  2011. BCC IC8C0
  2012. IC8BDJMP WAITPRTC
  2013. IC8C0
  2014. #IF TMPLIN
  2015. LDA #0
  2016. STA TMPLIN
  2017. #ENDIF
  2018. #IF [TARGET == PET] && PETB2
  2019. DEC TBLX; ON BASIC 2.0, THIS FUNCTION IS MEANT FOR
  2020. JSR INSTLIN; INSERTING CHARS ONTO THE NEXT LINE, OPENING
  2021. INC TBLX; UP THE *NEXT* SCREEN LINE
  2022. #ELSE
  2023. JSR INSTLIN
  2024. #ENDIF
  2025. #IF LDTBL
  2026. #IF HIBASE
  2027. LDA HIBASE
  2028. #ELSE
  2029. LDA #<SCREEN
  2030. #ENDIF; HIBASE
  2031. ORA #$80
  2032. STA LDTBL
  2033. #ENDIF; LDTBL
  2034. JSR GOHOME
  2035. LDA CMDCHR
  2036. CMP #":"
  2037. BNE IC8ED
  2038. ; SCROLL DOWN HEX DUMP
  2039. ;SEC ; C IS ALREADY 1 (EQUAL)
  2040. LDA STAL
  2041. SBC #HEXWIDTH
  2042. STA STAL
  2043. BCS IC8E4
  2044. DEC STAL+1
  2045. IC8E4JSR DOHEXDMP
  2046. HMTAB1JSR GOHOME
  2047. JMP TAB1
  2048.  
  2049. IC8EDCMP #">"
  2050. BNE I803
  2051. ; SCROLL DOWN ASC DUMP
  2052. ;SEC C IS ALREADY 1
  2053. LDA STAL
  2054. SBC #ASCWIDTH
  2055. STA STAL
  2056. BCS I802
  2057. DEC STAL+1
  2058. I802JSR DOASCDMP
  2059. JSR GOHOME
  2060. JMP TAB1
  2061.  
  2062. I803CMP #","
  2063. BNE IC93A
  2064. ; SCROLL DOWN DISSASS
  2065. LDA STAL
  2066. LDX STAL+1
  2067. STA MEMUSS
  2068. STX MEMUSS+1
  2069. LDA #$10; #BYTES BACKWARDS
  2070. STA DBACKUP
  2071. IC8FESEC
  2072. LDA MEMUSS
  2073. SBC DBACKUP
  2074. STA STAL
  2075. LDA MEMUSS+1
  2076. SBC #0
  2077. STA STAL+1
  2078. IC90CJSR OPREDU
  2079. JSR ADSTALEN
  2080. JSR STEQEND
  2081. BEQ IC91E
  2082. BCS IC90C
  2083. DEC DBACKUP
  2084. BNE IC8FE
  2085. IC91EINC OPLEN
  2086. LDA OPLEN
  2087. JSR SBCSTAA
  2088. JSR LDASTAL
  2089. LDA #","
  2090. JSR DODOTA
  2091. JSR DINSTR2
  2092. JMP HMTAB1
  2093.  
  2094. IC93A
  2095. #IF HAVEECMD
  2096. ; SCROLL DOWN [ OR ]
  2097. IC93AJSR DECSTAL
  2098. CMP #"["-$40
  2099. BEQ IC953
  2100. JSR DECSTAL
  2101. JSR DECSTAL
  2102. LDA STAL
  2103. AND #$3F
  2104. CMP #$3D
  2105. BNE IC951
  2106. DEC STAL; FOR SPRITE, DECREMENT 1 EXTRA
  2107. IC951LDX #$80
  2108. IC953STX LRBFLAG
  2109. JSR DOLRB
  2110. JMP HMTAB1
  2111. #ENDIF; HAVEECMD
  2112.  
  2113. ;;;;
  2114. ;
  2115. ;   GETCMD IS CALLED WITH THE NUMBER OF THE CURRENT LINE IN .x
  2116. ;   WITH AUTOMATICALLY (PNT) POINTING TO THE SAME LINE.
  2117.  
  2118. SUBROUTINE
  2119.  
  2120. GETCMDROR STAL; REMEMBER DOWN (.c=0) OR UP (.c=1)
  2121. LDA PNT
  2122. STA MEMUSS
  2123. LDA PNT+1
  2124. STA MEMUSS+1
  2125. .TOPLDY #0
  2126. LDA (MEMUSS),Y
  2127. CMP #"."        ; SCREEN CODE
  2128. BEQ IC98D
  2129. .NEXTLINE
  2130. BIT STAL; PL=GO DOWN
  2131. BPL .DOWN
  2132. SEC
  2133. LDA MEMUSS
  2134. SBC #COLUMNS
  2135. STA MEMUSS
  2136. BCS .2
  2137. DEC MEMUSS+1
  2138. .2DEX
  2139. BPL .TOP
  2140. SEC; .C=1: NOT FOUND
  2141. RTS
  2142.  
  2143. .DOWNCLC
  2144. LDA MEMUSS
  2145. ADC #COLUMNS
  2146. STA MEMUSS
  2147. BCC .1
  2148. INC MEMUSS+1
  2149. .1INX
  2150. CPX #LINES
  2151. BCC .TOP
  2152. RTS
  2153.  
  2154. IC98DINY
  2155. LDA (MEMUSS),Y
  2156. #IF HAVEECMD
  2157. CMP #"["-$40    ; SCREEN-[
  2158. BEQ .GOTCMD
  2159. CMP #"]"-$40    ; ]
  2160. BEQ .GOTCMD
  2161. #ENDIF
  2162. CMP #","        ; SCREEN CODE
  2163. BEQ .GOTCMD
  2164. CMP #">"        ; SCREEN CODE
  2165. BEQ .GOTCMD
  2166. CMP #":"        ; SCREEN CODE
  2167. BNE .NEXTLINE
  2168. .GOTCMD STA CMDCHR
  2169. INY
  2170. JSR SCR2STAL
  2171. STA STAL+1
  2172.  
  2173. ; FALL THROUGH TO SCR2STAL
  2174.  
  2175. SUBROUTINE
  2176.  
  2177. SCR2STAL; CONVERT NUMBER IN SCREEN CODE
  2178. JSR SCR2NYBB
  2179. ASL ;A
  2180. ASL ;A
  2181. ASL ;A
  2182. ASL ;A
  2183. STA STAL
  2184. JSR SCR2NYBB
  2185. ORA STAL
  2186. STA STAL
  2187. CLC
  2188. RTS
  2189.  
  2190. SUBROUTINE
  2191.  
  2192. SCR2NYBB
  2193. LDA (MEMUSS),Y
  2194. INY
  2195. CMP #" "
  2196. BEQ SCR2NYBB
  2197. CMP #7; SCREEN CODE FOR "F"
  2198. BCS .1
  2199. ADC #9
  2200. .1AND #$0F
  2201. RTS
  2202.  
  2203. SUBROUTINE
  2204.  
  2205. USESTAL STA MEMBYT
  2206. LDA STAL
  2207. STA MEMLO
  2208. LDA STAL+1
  2209. STA MEMHI
  2210. RTS
  2211.  
  2212. USEMUSS STA MEMBYT
  2213. LDA MEMUSS
  2214. STA MEMLO
  2215. LDA MEMUSS+1
  2216. STA MEMHI
  2217. RTS
  2218.  
  2219. LDASTAL JSR USESTAL; *** NOTE: THESE FUNCS MUST PRESERVE THE cARRY!
  2220. LDA #$AD; LDA ABS
  2221. BNE SETOPC
  2222.  
  2223. STASTAL JSR USESTAL
  2224. LDA #$8D; STA ABS
  2225. BNE SETOPC
  2226.  
  2227. CMPSTAL JSR USESTAL
  2228. LDA #$CD; CMP ABS
  2229. BNE SETOPC
  2230.  
  2231. STAMUSS JSR USEMUSS
  2232. LDA #$8D; STA ABS
  2233. BNE SETOPC
  2234.  
  2235. CMPMUSS JSR USEMUSS
  2236. LDA #$CD; CMP ABS
  2237. BNE SETOPC
  2238.  
  2239. LDASTALY
  2240. JSR USESTAL
  2241. LDA #$B9; LDA A,Y
  2242. BNE SETOPC
  2243.  
  2244. STASTALY
  2245. JSR USESTAL
  2246. LDA #$99; STA A,Y
  2247. ;BNE SETOPC
  2248. ;
  2249. ;CMPSTALY
  2250. ;JSR USESTAL
  2251. ;LDA #$D9; CMP A,Y
  2252.  
  2253. SETOPCSTA MEMOPC; MUST PRESERVE .a AND CARRY (FOR OPREDU)
  2254. STX MEM_SAVX
  2255. #IF TARGET == C64
  2256. BIT BANK
  2257. #ENDIF
  2258. #IF TARGET == PET
  2259. BIT BANK0F
  2260. #ENDIF
  2261. BMI DISKMEM
  2262. BPL ICB7F; ALWAYS
  2263.  
  2264. ICB79PLA
  2265. PLA
  2266. PLP
  2267. LDY MEM_SAVY
  2268. ICB7F
  2269. #IF TARGET == C64
  2270. LDX PPORT
  2271. TXA
  2272. AND #$38
  2273. BANK = .+1
  2274. ORA #7
  2275. SEI
  2276. STA PPORT
  2277. #ENDIF; TARGET == C64
  2278. #IF [TARGET == PET] && RAM96LATCH
  2279. SEI
  2280. LDX BANK
  2281. STX RAM96LATCH
  2282. LDX BANKPP
  2283. #ENDIF; TARGET == PET
  2284. MEMBYT = .+1
  2285. LDA #8; CONSTANT WILL BE MODIFIED
  2286.  
  2287. MEMHI= MEMOPC+2
  2288. MEMLO= MEMOPC+1
  2289.  
  2290. MEMOPCLDA $FFFF,Y; OPCODE AND ADDRESS WILL BE MODIFIED
  2291. #IF TARGET == C64
  2292. STX PPORT
  2293. CLI
  2294. #ENDIF
  2295. #IF [TARGET == PET] && RAM96LATCH
  2296. STX RAM96LATCH
  2297. CLI
  2298. #ENDIF; TARGET == PET
  2299. PHP
  2300. MEM_SAVX = .+1
  2301. LDX #3; CONSTANT WILL BE MODIFIED
  2302. PLP
  2303. RTS
  2304.  
  2305. DISKMEM
  2306. STY MEM_SAVY
  2307. PHP
  2308. PHA; OPCODE
  2309. AND #$10; TEST Y-INDEXING
  2310. BNE ICBA1
  2311. LDY #0
  2312. ICBA1CLC
  2313. TYA
  2314. ADC MEMLO; ADD .y
  2315. PHA
  2316. LDA #0
  2317. ADC MEMHI
  2318. #IF 1; WE DON'T WANT THIS...
  2319. CMP #$48; $4800-$C000
  2320. BCC ICBB4; FETCH FROM COMPUTER'S MEMORY ANYWAY
  2321. CMP #$C0
  2322. BCC ICB79
  2323. #ENDIF
  2324. ICBB4STA MEMHI
  2325. PLA
  2326. STA MEMLO
  2327. PLA; OPCODE, TEST R/W
  2328. AND #$60
  2329. CMP #1
  2330. ROR RWFLAG
  2331. ORA #$89; MAKE IT AN IMMEDIATE OPCODE
  2332. STA ACC07
  2333. LDA #"r"
  2334. BIT RWFLAG ;<0:R
  2335. BMI ICBD1
  2336. LDA #"w"
  2337. ICBD1JSR DISKMRW ;M-RW
  2338. LDA #1;1 BYTE
  2339. JSR IECOUT
  2340. BIT RWFLAG ;>0:W
  2341. BPL DISKW
  2342. JSR UNLSN
  2343. LDA FA
  2344. JSR TALK
  2345. LDA #$6F
  2346. JSR TKSA
  2347. ICBEBLDA #0
  2348. STA STATUS
  2349. JSR IECIN
  2350. STA DISKBYTIN
  2351. LDA STATUS
  2352. AND #2
  2353. BNE ICBEB; TIME-OUT
  2354. JSR IECIN
  2355. JSR UNTLK
  2356. PLP
  2357. MEM_SAVY    = .+1
  2358. LDY #1; THIS CONSTANT WILL BE MODIFIED
  2359. LDA MEMBYT
  2360. DISKBYTIN = .+1
  2361.  
  2362. ACC07LDA #$14; THIS OPCODE AND CONSTANT WILL BE MODIFIED
  2363. RTS; SBC/CMP...
  2364.  
  2365. DISKWLDA