home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol006 / zx65r.zsm < prev    next >
Encoding:
Text File  |  1984-04-29  |  38.7 KB  |  1,777 lines

  1.     NAME    ZXMAIN
  2.     TITLE    ZX65  VER 2.1  8/80  RMK
  3. ;
  4. ; V 2.1 OF ZX65 IS MODIFIED TO BE LINKED AT ASSEMBLY
  5. ; TIME WITH ZXLD V 2.1.  THIS COMBINATION IS TOTALLY
  6. ; RELOCATABLE, AND WILL FUNCTION UNDER ANY CPM 1.4
  7. ; SYSTEM SIZE.  FORMAT IS FOR SD SYSTEMS ASSEMBLER
  8. ; V 3.3 AND LINKER V 3.0
  9. ;
  10. ; V 2.1 INCLUDES ALL PREVIOUS MODS PLUS CORRECTED
  11. ; JSR/JMP/RTS FUNCTIONS.
  12. ;
  13.     GLOBAL    RELBAS
  14. ;
  15. BASE    EQU    $
  16. HOST    EQU     BASE+0F00H    ; HOST SYSTEM CBIOS
  17. SYSTK    EQU    HOST        ; SYSTEM STACK
  18. CPWRM    EQU    HOST+3        ; CP/M COLD ST
  19. CONST    EQU    HOST+6        ; HOST SYSTEM INPUT TEST
  20. CONIN   EQU     HOST+9        ; HOST SYSTEM CONS IN
  21. CONOUT  EQU     HOST+0CH    ; HOST SYSTEM CONS OUT
  22. HOME    EQU    HOST+18H    ; DRIV HOME
  23. SETDRV    EQU    HOST+1BH    ; SELECT DRVE
  24. SETTRK    EQU    HOST+1EH    ; SELECT TRACK
  25. SETSEC    EQU    HOST+21H    ; SELECT SECTOR
  26. SETBUF    EQU    HOST+24H    ; SET XFER ADDRESS
  27. READ    EQU    HOST+27H    ; READ A SECTOR
  28. WRITE    EQU    HOST+2AH    ; WRITE A SECTOR
  29. ;
  30. RELBAS    LD    SP,SYSTK
  31.     LD    C,1
  32.     CALL    DRVS        ; ACTIVATE DRV B
  33.     CALL    HOMB        ; AND INIT IT
  34.     LD      IY,INTRO
  35.     CALL    PRTXT        ; PRINT HEADER
  36.     CALL    CRLF
  37. ;
  38. ; COMMAND LEVEL...RETURN HERE FROM ANY POINT IN PGM
  39. ;
  40. CMND    LD      HL,CMND
  41.     PUSH    HL        ; RET ADDR ON STACK
  42.     CALL    CRLF
  43.     CALL    PROM
  44.     CALL    GETCHR        ; GET COMMAND
  45.     CP    'E'
  46.     JP    Z,EXAM        ; EXAM MEMORY
  47.     CP    'M'
  48.     JP    Z,SUBM        ; SUB MEMORY
  49.     LD    IX,VREG        ; FOR SIMX
  50.     CP      'B'
  51.     JR      Z,BRKP-$    ; RUN TO BREAKPOINT
  52.     CP    'C'
  53.     JP    Z,RGSTR        ; DSPLY/MODIFY CPU REGS
  54.     CP      'G'
  55.     JP    Z,RUN        ; RUN FROM NPC
  56.     CP    'T'
  57.     JR    Z,MULTX-$    ; TRACE/DISPLAY N STEPS
  58.     CP      ' '
  59.     JR      Z,EXONE-$    ; EX ONE INSTR & STOP
  60.     LD    IX,BUFFR    ; FOR DOS
  61.     CP      'D'
  62.     JP      Z,PDIR        ; DOS DIR
  63.     CP      'I'
  64.     JP      Z,INIT        ; DOS INITIALIZE
  65.     CP      'K'
  66.     JP      Z,KILL        ; DOS ERASE
  67.     CP      'L'
  68.     JP      Z,LOAD        ; DOS LOADER
  69.     CP    'R'
  70.     JP    Z,LDGO        ; LOAD AND RUN PGM
  71.     CP      'S'
  72.     JP      Z,SAVE        ; DOS SAVER
  73.     LD    C,'?'
  74.     CALL    PRNC        ; INVALID COMMAND
  75.     JR    CMND-$
  76. ;
  77. ; EXECUTE N STEPS
  78. ;
  79. MULTX    LD    IY,MLTMSG
  80.     CALL    PRTXT
  81.     CALL    GETWRD        ; GET N
  82.     LD    A,E
  83.     JR      NZ,DOMULT-$
  84. EXONE   LD      A,1        ; EXECUTE 1 STEP
  85. ;
  86. ; EXECUTE # STEPS IN A
  87. ;
  88. DOMULT  LD      (NSTEPS),A      ; STORE N IN TEMP
  89.     CALL    STEP        ; EXEC & DSPLY INSTR
  90.     CALL    DSPLY
  91.     LD      A,(NSTEPS)
  92.     DEC     A
  93.     RET    Z
  94.     PUSH    AF
  95.     LD    BC,DLYCON    ; DELAY FOR VIEWING
  96. DOLP    DEC    BC
  97.     LD    A,B
  98.     OR    C
  99.     JR    NZ,DOLP-$
  100.     POP    AF
  101.     JR    DOMULT-$
  102. ;
  103. ; RUN WITHOUT DISPLAY TO BREAKPOINT
  104. ;
  105. BRKP    LD    IY,BKPMSG
  106.     CALL    PRTXT
  107.     CALL    GETWRD         ; GET IT
  108.     LD      (BREAK),DE      ; STORE IT IN TEMP
  109. BKLP    CALL    STEP        ; EXEC ONE INSTR
  110.     LD      DE,(BREAK)
  111.     LD      A,H        ; CHECK IF AT BKPT
  112.     CP      D
  113.     JR      NZ,INTST-$
  114.     LD      A,L
  115.     CP      E
  116.     JR    NZ,INTST-$
  117.     CALL    STEP        ; DO ONE MORE
  118.     JR    DSPLY-$
  119. INTST    CALL    KBST        ; TEST FOR KBD INP
  120.     JR    Z,BKLP-$    ; CONTINUE IF NONE
  121.     JR    QDSP-$
  122. ;
  123. ; RUN ONLY..NO DISPLAY OR BREAKPOINT
  124. ;
  125. RUN     CALL    STEP        ; DO A STEP
  126.     CALL    KBST        ; CHECK FOR KB INPUT
  127.     JR    Z,RUN-$        ; IF NONE JUST REPEAT
  128. ;
  129. ; STOP, DISPLAY, & RET TO CMND
  130. ;
  131. QDSP    CALL    KBIN        ; CLEAR UART
  132.     JR    DSPLY-$        ; DISP CPU & RET
  133. ; DISPLAY & UPDATE CPU REGISTERS
  134. ;
  135. RGSTR   PUSH    IX
  136.     CALL    CRLF
  137.     LD      IY,HEADR+42
  138.     CALL    PRN6         ; PRINT RG NAME
  139.     LD      DE,(NPC)     ; NEXT PC TO DE
  140.     CALL    PRTWRD        ; PRINT IT
  141.     CALL    PROM         ; PROMPT FOR CHANGE
  142.     CALL    GETWRD
  143.     JR      Z,AREG-$     ; SPACE = NO CHANGE
  144.     LD    (NPC),DE    ; PUT IN NEW VALUE
  145. AREG    LD      IY,HEADR+12
  146.     LD      B,5
  147. NREG    CALL    CRLF         ; DO REST OF REGS
  148.     CALL    PRN6         ; PRINT NAME
  149.     LD      E,(IX+0)
  150.     CALL    PRTBYT        ; PRINT CONTENTS
  151.     CALL    PROM        ; PROMPT FOR CHANGE
  152.     CALL    GETWRD
  153.     JR      Z,NXTREG-$      ; SPACE = NO CHANGE
  154.     LD      (IX+0),E
  155. NXTREG  INC     IX        ; POINT TO NEXT REG
  156.     DJNZ    NREG-$         ; DO AGAIN IF MORE
  157.     POP     IX
  158.     RET
  159. ;
  160. ; DISPLAY PC, INSTRUCTION, AND ALL REGISTERS
  161. ;
  162. DSPLY    PUSH    IX        ; SAVE POINTER
  163.     PUSH    BC        ; SAVE MNEMONIC CODE
  164.     CALL    CRLF
  165.     LD    IY,HEADR
  166.     CALL    PRN6        ; 'CPC'
  167.     LD    DE,(CPC)
  168.     CALL    PRTWRD        ; VALUE
  169.     CALL    PRN6        ; 'INS'
  170.     POP    BC
  171.     PUSH    IY
  172.     PUSH    BC
  173.     LD    IY,MNMTBL    ; DET MNEM FROM BC
  174.     LD    A,0FCH
  175.     AND    C
  176.     SRL    A
  177.     LD    E,A
  178.     LD    D,0
  179.     ADD    IY,DE
  180.     LD    E,(IY+0)    ; GET PACKED MNEM
  181.     LD    D,(IY+1)
  182.     SLA    E        ; UNPACK IT
  183.     RL    D
  184.     LD    C,3        ; & PRINT THREE CHRS
  185. MNM2    XOR    A
  186.     LD    B,5
  187. MNM1    SLA    E
  188.     RL    D
  189.     RLA
  190.     DJNZ    MNM1-$
  191.     SET    6,A
  192.     PUSH    BC
  193.     CALL    PRNA
  194.     POP    BC
  195.     DEC    C
  196.     JR    NZ,MNM2-$
  197.     POP    BC        ; DECODE ADDR MODE
  198.     LD    A,B
  199.     SLA    A
  200.     SLA    A
  201.     SLA    A
  202.     LD    E,A
  203.     LD    D,0
  204.     LD    IY,AMDTBL
  205.     ADD    IY,DE
  206.     CALL    PRN8        ; PRINT ADDR MODE
  207.     POP    IY
  208.     LD    B,5
  209. DSP1    CALL    PRN6        ; PRINT ALL REGS
  210.     LD    E,(IX+0)
  211.     CALL    PRTBYT
  212.     INC    IX
  213.     DJNZ    DSP1-$
  214.     CALL    PRN6        ; PRINT NEXT PC
  215.     LD    DE,(NPC)
  216.     CALL    PRTWRD
  217.     POP    IX
  218.     RET
  219. ;
  220. PRN6    LD    E,6        ; PRINT 6 CHARS PER IY
  221.     JP    PRNLP
  222. PRN8    LD      E,8        ; PRINT 8 CHRS PER IY
  223.     JP      PRNLP
  224. ;
  225. ; CODE FOR DECODING AND EXECUTING ONE INSTRUCTION
  226. ; ENTER WITH HL POINTING TO INSTR TO BE DECODED. EXITS
  227. ; WITH HL POINTING TO NEXT INSTR, B HOLDING ADDRESSING
  228. ; MODE CODE, C HOLDING MNEMONIC CODE
  229. ;
  230. STEP    LD      HL,(NPC)     ; NEXT PC TO HL
  231.     LD      (CPC),HL     ; BECOMES CURRENT PC
  232.     LD      A,(HL)         ; OP CODE
  233.     OR      A         ; ZERO?
  234.     JP      Z,PBRK         ; IF SO, 'BRK'
  235.     BIT     0,A        ; TEST LSD FOR ODD/EVEN
  236.     JP      NZ,MLTMOD    ; ODD INSTRS MULTI MODE
  237.     AND     0FH
  238.     JR      NZ,FLGTST-$
  239.     LD      A,(HL)         ; RESTORE OP CODE
  240.     BIT     4,A        ; MSD ODD/EVEN
  241.     JP      NZ,PBRNCH    ; IF ODD, BRANCH
  242.     CP      20H
  243.     JP      Z,PJSR        ; PROCESS JSR
  244.     CP      40H
  245.     JP      Z,PRTI        ; PROCESS RTI
  246.     CP      60H
  247.     JP      Z,PRTS        ; PROCESS RTS
  248.     JP      MLTMOD        ; ELSE MULTI MODE
  249. FLGTST  CP      8
  250.     JR      NZ,IMP2-$
  251.     LD      A,(HL)        ; RESTORE
  252.     BIT     4,A        ; MSD ODD/EVEN
  253.     JP      Z,PIMPL        ; IF EVEN, MST BE IMPLD
  254.     CP      98H        ; MSD = 9?
  255.     JP      Z,PTYA        ; YES, PROC TYA SPECIAL
  256.     JP      PFLGS        ; ELSE PROCESS FLAG OPS
  257. IMP2    CP      0AH
  258.     JR      NZ,JMPTST-$     ; MUST BE JUMP
  259.     LD      A,(HL)        ; RESTORE
  260.     AND     0F0H        ; TESTS ON MSD
  261.     BIT     4,A        ; ODD/EVEN
  262.     JP      NZ,PTSS        ; PROSESS SP OPS SPECIAL
  263.     CP      70H
  264.     JP      C,MLTMOD     ; PROCESS ACCUM MODES
  265.     JP      PIMPL       ; ELSE MORE IMPLIEDS
  266. JMPTST  LD      A,(HL)        ; RESTORE OP CODE
  267.     CP      4CH
  268.         JP      Z,PJABS        ; PROCESS ABS JMP
  269.     CP      6CH
  270.         JP      Z,PJIND        ; PROCESS INDIRECT JMP
  271.     JP      MLTMOD
  272. ;
  273. ; INSTURCTION PROCESSORS BEGIN HERE.. ENTER WITH
  274. ; HL = PC, IX POINTING TO SIM CPU
  275. ;
  276. ; IF BRK VECTOR (IPOINT) = 0, RETURN TO CMND
  277. ;
  278. PBRK    SET     4,(IX+1)    ; SET BRK STATUS BIT
  279.     LD    HL,(IPOINT)    ; SEE IF RET TO CMND
  280.     LD    A,H
  281.     OR    L
  282.     JR    NZ,BRK1-$
  283.     POP    BC        ; ADJUST SP
  284.     LD    BC,429H        ; RET TO CMND
  285.     JP    DSPLY
  286. BRK1    INC    HL        ; NORMAL BREAK
  287.         CALL    TSPY          ; SP TO IY
  288.     LD      (IY+0),H    ; 'PUSH' PC
  289.         DEC     IY
  290.     LD      (IY+0),L
  291.         DEC     IY
  292.     LD      A,(IX+1)    ; 'PUSH' P
  293.         LD      (IY+0),A
  294.     DEC     IY
  295.         CALL    TYSP          ; IY TO SP
  296.     LD      HL,(IPOINT)    ; GET INTERRUPT VECTOR
  297.         LD      BC,429H        ; CODE FOR # BYTES & MNEM
  298.     JP      END1          ; AND FINISH
  299. ;
  300. ; PROCESS BRANCHES
  301. ;
  302. PBRNCH    LD      B,0            ; FORM INDEX INTO MSKTBL
  303.     LD      C,(HL)        ; INSTR TO C
  304.     LD    IY,MSKTBL
  305.         SRL     C        ; GET MSD
  306.     SRL     C
  307.         SRL     C
  308.     SRL     C
  309.         DEC     C
  310.     ADD     IY,BC
  311.         INC     HL             ; POINT TO OFFSET
  312.     BIT     1,C        ; MSD ODD/EVEN
  313.     LD    A,(IX+1)    ; P REG TO ACC
  314.         LD      C,(IY+0)    ; # CODE
  315.     LD      B,(IY+1)    ; FLAG MASK
  316.         JR      NZ,BRSET-$    ; ODD/EVEN DET SET/CLR
  317.     AND     B             ; ISOLATE BIT FOR TEST
  318.         JR      Z,TRUE-$
  319.     JR      FALSE-$
  320. BRSET   AND     B
  321.     JR      NZ,TRUE-$
  322.         JR      FALSE-$
  323. TRUE    LD      D,0           ; CONDITION MET; BRANCH
  324.     LD      E,(HL)        ; OFFSET TO E
  325.         BIT    7,E            ; CHECK SIGN OF OFFSET
  326.     JR      Z,TRU1-$
  327.         DEC     D              ; IF B7 IS SET, DO NEG
  328. TRU1    ADD     HL,DE         ; ADD OFFSET FOR NEW PC
  329. FALSE   LD      B,0        ; COND NOT MET; GO ON
  330.     JP      END
  331. ;
  332. ; PROCESS JUMPS AND JSR...JMP 0-4 AND JSR 0-4 GO INTO Z80
  333. ; ROUTINES PER JUMP TABLE AT USR0. CONTROL THEN RETURNS
  334. ; TO SIMULATOR UPON Z80 'RET' (C9).. ALL OTHERS PROCESSED
  335. ; NORMALLY.
  336. ;
  337. PJSR    LD    BC,273H        ; JSR
  338.     PUSH    BC
  339.     CALL    SPCTST        ; TEST FOR USER
  340.     JR    NZ,PJS2-$
  341.     CALL    INUSR        ; GO TO USER SR
  342.     POP    BC
  343.     JR    EE0-$
  344. PJS2    CALL    TSPY        ; NORMAL JSR
  345.     LD      (IY+0),H    ; PUSH CURRENT PC
  346.         DEC     IY
  347.     LD      (IY+0),L
  348.         DEC     IY
  349.     CALL    TYSP
  350.     JR    DOJ1-$
  351. PJABS    LD      BC,26FH        ; ABS JMP
  352.         JR      DOJP-$
  353. PJIND    LD    BC,0C6FH    ; INDIRECT JMP
  354.     CALL    SPCTST
  355.     EX    DE,HL
  356.     DEC    HL
  357. DOJP    PUSH    BC
  358.     CALL    SPCTST        ; TEST FOR SPECIALS
  359.     JR    NZ,DOJ1-$
  360.     CALL    INUSR        ; FOR SPECIALS
  361.     CALL    PRET        ; DO SR RETURN
  362.     POP    BC
  363.     JR    EE0-$        ; GO TO PC+1
  364. DOJ1    EX    DE,HL        ; NEW PC
  365.     POP    BC
  366.     JR    EE1-$
  367. ;
  368. ; PROCESS SR AND INTERRUPT RETURNS
  369. ;
  370. PRTS    CALL    PRET        ; RTS...RESTORE PC
  371.         LD      BC,4A9H
  372. EE0    JP      END        ; GO TO PC+1
  373. PRTI    CALL    TSPY        ; RTI
  374.     INC    IY
  375.     LD    A,(IY+0)    ; RESTORE FLAGS
  376.     LD    (IX+1),A
  377.     CALL    PRET1        ; RESTORE PC
  378.     LD      BC,4A5H
  379. EE1    JP      END1
  380. PRET    CALL    TSPY          ; SP TO IY
  381. PRET1    INC     IY            ; POINT TO LAST ENTRY
  382.         LD      L,(IY+0)    ; RESTORE PCL
  383.     INC     IY
  384.         LD      H,(IY+0)    ; RESTORE PCH
  385.     JP      TYSP          ; RESTORE NEW SP
  386. ;
  387. ; TEST FOR USER SUBROUTINE CALLS/JUMPS. IF TARGET
  388. ; ADDRESS < 0005 THEN RET WITH Z FLG SET, ELSE CLR
  389. ;
  390. SPCTST    INC    HL        ; TEST FOR USR SR
  391.     LD    E,(HL)        ; LO BYTE
  392.     INC    HL        ; TARGET TO DE
  393.     LD    D,(HL)        ; HI BYTE
  394.     LD    A,0        ; TARGET < 0005?
  395.     OR    D
  396.     RET    NZ
  397.     LD    A,4
  398.     CP    E
  399.     RET    C
  400.     XOR    A        ; SET Z FLAG
  401.     RET
  402. ;
  403. ; INDEX INTO USER SUBROUTINE TABLE
  404. ; PASS A, X, & Y TO/FROM USER ROUTINE AS A, B, & C.
  405. ;
  406. INUSR    LD    D,0
  407.     LD    A,E
  408.     ADD    A,E
  409.     ADD    A,E
  410.     LD    E,A
  411.     LD    IY,USR0
  412.     LD    BC,USRET    ; RETURN ON STACK
  413.     PUSH    BC
  414.     ADD    IY,DE
  415.     LD    A,(IX+0)    ; PASS A,X, & Y
  416.     LD    B,(IX+2)
  417.     LD    C,(IX+3)
  418.     JP    (IY)        ; AND GO
  419. USRET    LD    (IX+0),A    ; RETURN HERE
  420.     LD    (IX+2),B    ; RETURN PARAMETERS
  421.     LD    (IX+3),C
  422.     RET
  423.     NOP            ; PAD FOR PATCH
  424.     NOP
  425.     NOP
  426. ;
  427. ; PROCESS SP EXCHANGES
  428. ;
  429. PTSS    CP      90H           ; WHICH ONE IS IT?
  430.     JR      NZ,PTSX-$
  431. PTXS    LD      A,(IX+2)    ; MOVE DATA FROM X...
  432.     LD      (IX+4),A    ; TO SP
  433.         LD      BC,4D9H
  434.     JP      END
  435. PTSX    LD      A,(IX+4)    ; MOVE SP
  436.     LD      (IX+2),A    ; TO X REG
  437.         LD      C,0D1H
  438.     JP    COMPL        ; AND MODIFY FLAGS
  439. ;
  440. ; PROCESS ALL REMAINING IMPLIED INSTRUCTIONS
  441. ;
  442. PIMPL    LD    C,A        ; OP CODE
  443.     SRL     C             ; GET MSD
  444.         SRL     C
  445.     SRL     C
  446.         SRL     C
  447.     AND    0FH        ; CHECK LSD
  448.     CP    8
  449.         LD      IY,IMPTBL    ; INDEX INTO TABLE
  450.     JP    Z,JPIB
  451.     LD      IY,IMPTBL+8
  452.     JP    JPIB
  453. ;
  454. ; IMPLIED INSTR PROCESSORS
  455. ;
  456. PINX    INC     (IX+2)        ; INX
  457.     LD      C,65H
  458.         JR      IDEFLG-$
  459. PINY    INC     (IX+3)        ; INY
  460.     LD      C,69H
  461.         JR      IDEFLG-$
  462. PDEX    DEC     (IX+2)        ; DEX
  463.     LD      C,55H
  464.         JR      IDEFLG-$
  465. PDEY    DEC     (IX+3)        ; DEY
  466.     LD      C,59H
  467. IDEFLG    RES    1,(IX+1)    ; SET/RES Z FLG
  468.     JR      NZ,SINTST-$    ; PER Z80 FLAGS
  469.         SET     1,(IX+1)
  470. SINTST    RES    7,(IX+1)    ; ALSO SIGN FLG
  471.         JP      P,ENDIT
  472.     SET     7,(IX+1)
  473.         JP      ENDIT
  474. PNOP    LD    BC,485H        ; NOP
  475.     JP    END
  476. PPHA    CALL    TSPY          ; PHA
  477.     LD      A,(IX+0)    ; ACCUM
  478.         LD      C,8DH
  479.     JR      DOPUSH-$    ; PUSH IT
  480. PPHP    CALL    TSPY        ; PHP
  481.     LD      A,(IX+1)    ; P REG
  482.         LD      C,91H
  483. DOPUSH    PUSH    BC
  484.         LD      (IY+0),A    ; PLACE ON STACK
  485.     DEC     IY            ; BUMP SP DOWN
  486.         CALL    TYSP          ; & REPLACE IT
  487.     POP    BC
  488.         JP      ENDIT
  489. PPLA    CALL    DOPULL        ; PLA
  490.     LD      (IX+0),A    ; DATA TO ACC
  491.     CALL    SINS1         ; SET/RES S,Z FLGS
  492.     CALL    TYSP        ; RESTORE SP
  493.         LD      BC,495H
  494.     JP      END
  495. PPLP    CALL    DOPULL        ; PLP
  496.     LD      (IX+1),A    ; DATA TO P REG
  497.         CALL    TYSP          ; RESTORE SP
  498.     LD      BC,499H
  499.         JP      END
  500. DOPULL    CALL    TSPY        ; GET SP
  501.     INC     IY            ; BUMP SP
  502.         LD      A,(IY+0)    ; GET DATA
  503.     RET
  504. ;
  505. ; PROCESS ACC/INDEX TRANSFERS
  506. ;
  507. PTAX    LD      A,(IX+0)    ; TAX
  508.     LD      (IX+2),A
  509.         LD      C,0C9H
  510.     JR      COMPL-$
  511. PTAY    LD      A,(IX+0)    ; TAY
  512.     LD      (IX+3),A
  513.         LD      C,0CDH
  514.     JR      COMPL-$
  515. PTXA    LD      A,(IX+2)    ; TXA
  516.     LD      (IX+0),A
  517.         LD      C,0D5H
  518.     JR    COMPL-$
  519. PTYA    LD      A,(IX+3)    ; TYA
  520.     LD      (IX+0),A
  521.         LD      C,0DDH
  522. COMPL   CALL    SINS1        ; SET/RES S,Z FLGS
  523.     JR    ENDIT-$
  524. ;
  525. ; PROCESS FLAG SET/RES INSTRUCTIONS
  526. ;
  527. PFLGS    LD    IY,FLGTBL    ; TABLE START
  528.     LD    B,0
  529.     CP    0B8H        ; CLV SPECIAL
  530.     JR    NZ,PFL1-$
  531.     RES    5,A
  532. PFL1    RRA            ; CHECK MSD
  533.     RRA
  534.     RRA
  535.     RRA
  536.     AND    0EH        ; MASK MSD + 1
  537.     BIT    1,A        ; TEST FOR SET/RES
  538.     LD    C,A        ; FORM TABLE INDEX
  539.     ADD    IY,BC
  540.     LD    C,(IY+0)    ; GET MNEM CODE
  541.     LD    A,(IY+1)    ; GET MASK
  542.     JR    NZ,PFL2-$
  543.     CPL            ; DO CLEARS
  544.     AND    (IX+1)
  545.     JR    PFL3-$
  546. PFL2    OR    (IX+1)        ; DO SETS
  547. PFL3    LD    (IX+1),A    ; AND STUFF IT
  548. ENDIT    LD    B,4
  549.     JP    END
  550. ;
  551. ; PROCESS ALL INSTRUCTIONS HAVING MULTIPLE ADDRESSING
  552. ;
  553. MLTMOD  LD      BC,MLTEND    ; PUT RETURN ON STACK
  554.     PUSH    BC
  555.         LD      A,(HL)        ; GET INSTR TO A
  556.     LD      C,A           ; AND TO C
  557.         SRL     C             ; TEST EVEN/ODD
  558.     PUSH    AF
  559.         SRL     C             ; ROTATE MSD INTO LSD
  560.     SRL     C
  561.         SRL     C
  562.     RES     0,C           ; MASK LSB
  563.     POP    AF
  564.         LD      IY,EVNTBL    ; JUMP PER TABLES
  565.     JP    NC,JPIB
  566.     LD    IY,ODDTBL
  567.     JP    JPIB
  568. ;
  569. ; MULTI-MODE INSTRUCTION PROCESSORS
  570. ;
  571. PASL    CALL    MODBBB        ; GET MODE,ADDR,&DATA
  572.     SLA     A             ; ASL
  573.         CALL    SINSET        ; SET/RES S,Z,C FLGS
  574.     CALL    PUTDAT        ; RESTORE DATA
  575.         LD      A,8
  576.     RET
  577. PBTRL   BIT     1,A           ; BIT OR ROL?
  578.     JR      Z,PBIT-$
  579.         CALL    MODBBB        ; ROL
  580.     CALL    CARSET        ; SET UP C FLAG
  581. PROL1   RLA                   ; DO ROTATE
  582.     CALL    SINSET
  583.         CALL    PUTDAT
  584.     LD      A,9CH
  585.         RET
  586. PBIT    RES     6,(IX+1)    ; BIT
  587.     CALL    MODBBX
  588.         PUSH    BC
  589.     LD      B,A           ; SAVE IT IN B
  590.         LD      A,(IX+0)    ; GET SIM ACC
  591.     AND     B             ; AND IT
  592.         BIT     6,A           ; CHECK V BIT
  593.     JR      Z,PBIT1-$
  594.         SET     6,(IX+1)    ; SET V BIT IF REQD
  595. PBIT1   CALL    SINS1         ; SET/RES S,Z FLGS
  596.     POP     BC
  597.         LD      A,18H
  598.     RET
  599. PLSR    CALL    MODBBB        ; LSR
  600.     SRL     A
  601.         CALL    SINSET
  602.     CALL    PUTDAT
  603.         LD      A,80H
  604.     RET
  605. PROR    CALL    MODBBB        ; ROR
  606.     CALL    CARSET        ; SET UP C FLG
  607. PROR1   RRA                   ; DO ROTATE
  608.     CALL    SINSET
  609.         CALL    PUTDAT
  610.     LD      A,0A0H
  611.         RET
  612. PSTXY   BIT     1,A           ; WHICH ONE?
  613.     JR      Z,PSY-$
  614.         CALL    MODBBX        ; STX
  615.     LD      A,(IX+2)
  616.     CALL    PUTDAT
  617.         LD      A,0C0H
  618.     RET
  619. PSY     CALL    MODBBX        ; STY
  620.     LD      A,(IX+3)
  621.     CALL    PUTDAT
  622.         LD      A,0C4H
  623.     RET
  624. PLDXY   BIT     1,A           ; WHICH ONE?
  625.     JR      Z,PLY-$
  626.         CALL    MODDDD        ; LDX
  627.     LD      (IX+2),A
  628.     CALL    SINS1
  629.         LD      A,78H
  630.     RET
  631. PLY     CALL    MODDDD        ; LDY
  632.     LD      (IX+3),A
  633.     CALL    SINS1
  634.         LD      A,7CH
  635.     RET
  636. PDCY    BIT     1,A           ; WHICH ONE?
  637.     JR      Z,PCPY-$
  638.         CALL    MODBBX        ; DEC
  639.     DEC     A
  640.         CALL    SINS1
  641.     CALL    PUTDAT
  642.         LD      A,50H
  643.     RET
  644. PICX    BIT     1,A           ; WHICH ONE?
  645.     JR      Z,PCPX-$
  646.         CALL    MODBBX        ; INC
  647.     INC     A
  648.         CALL    SINS1
  649.     CALL    PUTDAT
  650.         LD      A,60H
  651.     RET
  652. PCPX    CALL    CXY           ; CPX
  653.     CALL    SINSET
  654.         LD      A,48H
  655.     RET
  656. PCPY    INC     IX
  657.     CALL    CXY           ; CPY
  658.         DEC     IX
  659.     CALL    SINSET
  660.         LD      A,4CH
  661.     RET
  662. CXY     CALL    MODCC
  663.     PUSH    BC
  664.         LD      B,A           ; MEM DAT INTO B
  665.     LD      A,(IX+2)    ; X (Y) INTO A
  666.         SUB     B
  667.     CCF                   ; BORROW = 6502 /C
  668.         POP     BC
  669.     RET
  670. PSBC    RES     6,(IX+1)    ; SBC...CLR V FLG
  671.     CALL    MODAAA
  672.         PUSH    BC
  673.     LD      B,A        ; DATA TO B
  674.         LD      A,(IX+0)    ; ACC TO A
  675.     CALL    CARSET        ; SET UP C FLAG
  676.     CCF            ; AND COMPLEMENT IT
  677. PSBC1   BIT     3,(IX+1)    ; CHECK FOR DEC MODE
  678.     JR      NZ,PSDEC-$
  679.         SBC     A,B
  680.     JR      PSBC2-$
  681. PSDEC   SBC     A,B           ; DECIMAL MODE
  682.     DAA
  683. PSBC2   LD      (IX+0),A    ; RESULT TO ACCUM
  684.     CCF            ; BORROW = 6502 /C
  685.     CALL    SINSET
  686.     AND    0C0H        ; TEST XOR OF B6 & B7
  687.     JR    Z,SBC3-$
  688.     CP    0C0H
  689.     JR    Z,SBC3-$
  690.     SET     6,(IX+1)    ; SET V FLAG IF XOR = 1
  691. SBC3    POP     BC
  692.         LD      A,0ACH
  693.     RET
  694. PORA    CALL    MODAAA        ; ORA
  695.     PUSH    BC
  696.         LD      B,A           ; DATA TO B
  697.     LD      A,(IX+0)    ; ACC TO A
  698.         OR      B
  699.     LD      (IX+0),A    ; RESULT TO ACC
  700.         CALL    SINS1
  701.     POP     BC
  702.         LD      A,88H
  703.     RET
  704. PAND    CALL    MODAAA        ; AND
  705.     PUSH    BC
  706.         LD      B,A           ; DATA TO B
  707.     LD      A,(IX+0)    ; ACC TO A
  708.         AND     B
  709.     LD      (IX+0),A    ; RESULT TO ACC
  710.         CALL    SINS1
  711.     POP     BC
  712.         LD      A,4
  713.     RET
  714. PEOR    CALL    MODAAA        ; EOR
  715.     PUSH    BC
  716.         LD      B,A        ; DATA TO B
  717.     LD      A,(IX+0)    ; ACC TO A
  718.         XOR     B
  719.     LD      (IX+0),A    ; RESULT TO ACC
  720.         CALL    SINS1
  721.     POP     BC
  722.         LD      A,5CH
  723.     RET
  724. PADC    RES     6,(IX+1)    ; ADC: CLEAR V FLAG
  725.     CALL    MODAAA
  726.         PUSH    BC
  727.     LD      B,A        ; DATA TO B
  728.         LD      A,(IX+0)    ; ACC TO A
  729.     CALL    CARSET        ; SET UP C FLG
  730. PADC1   BIT     3,(IX+1)    ; CHECK FOR DEC MODE
  731.     JR      NZ,PADEC-$
  732.         ADC     A,B           ; BINARY MODE
  733.     JR      PADC2-$
  734. PADEC   ADC     A,B           ; DECIMAL MODE
  735.     DAA
  736. PADC2   LD      (IX+0),A    ; RESULT TO ACC
  737.     CALL    SINSET
  738.     AND    0C0H        ; CHECK XOR OF B6 & B7
  739.     JR    Z,PADC3-$
  740.     CP    0C0H
  741.     JR    Z,PADC3-$
  742.     SET     6,(IX+1)    ; SET V FLG IF XOR = 1
  743. PADC3   POP     BC
  744.     LD      A,0
  745.         RET
  746. PSTA    CALL    MODAAA        ; STA
  747.     LD      A,(IX+0)    ; ACC TO MEM
  748.         CALL    PUTDAT
  749.     LD      A,0BCH
  750.         RET
  751. PLDA    CALL    MODAAA        ; LDA
  752.     LD      (IX+0),A    ; MEM TO ACC
  753.         CALL    SINS1
  754.     LD      A,74H
  755.         RET
  756. PCMP    CALL    MODAAA        ; CMP
  757.     PUSH    BC
  758.         LD      B,A           ; DATA TO B
  759.     LD      A,(IX+0)    ; ACC TO A
  760.         SUB     B
  761.     CCF                   ; BORROW = 6502 /C
  762.         CALL    SINSET
  763.     POP     BC
  764.         LD      A,44H
  765.     RET
  766. ;
  767. ; END OF ALL MULTI MODE PROCESSORS
  768. ;
  769. MLTEND  ADD     A,C        ; FORM MNEM CODE IN C
  770.     LD      C,A
  771. END     INC     HL        ; POINT TO NXT INSTR
  772. END1    LD      (NPC),HL
  773.     RET            ; BACK TO CMND
  774. ;
  775. ; VARIOUS SUBROUTINES FOR TRANSLATOR
  776. ;
  777. ; SET Z80 C FLAG TO MATCH 6502 C FLG
  778. ;
  779. CARSET    SCF
  780.     BIT    0,(IX+1)
  781.     RET    NZ
  782.     CCF
  783.     RET
  784. ;
  785. ; SET SIMULATOR S,Z,C FLAGS PER Z80 RESULTS
  786. ;
  787. SINSET  RES     0,(IX+1)    ; RESET C FLAG
  788.     JR      NC,SINS1-$
  789.         SET     0,(IX+1)    ; SET C PER Z80 C
  790. SINS1   RES     1,(IX+1)    ; CLEAR Z FLAG
  791.     OR      A             ; SEE IF ACC = 0
  792.         JR      NZ,SINS2-$
  793.     SET     1,(IX+1)    ; SET Z FLG
  794. SINS2   RES     7,(IX+1)    ; CLEAR SIGN FLAG
  795.     BIT     7,A           ; CHECK SIGN OF ACC
  796.         RET     Z
  797.     SET     7,(IX+1)    ; SET S IF NECESSARY
  798.         RET
  799. ;
  800. ; TRANSFER SIMULATOR SP TO/FROM IY
  801. ;
  802. TSPY    LD      B,1           ; XFER SP TO IY
  803.         LD      C,(IX+4)
  804.     PUSH    BC
  805.     POP    IY
  806.         RET
  807. TYSP    PUSH    IY        ; XFER IY TO SP
  808.     POP    BC
  809.     LD      (IX+4),C
  810.         RET
  811. ;
  812. ; ADDRESS MODE DECODERS...RETURN WITH DATA TO BE MODIFIED
  813. ; IN A, ADDRESS MODE CODE IN B, # BYTES IN C, ADDRESS OF
  814. ; DATA IN DE
  815. ;
  816. MODAAA  LD      IY,AAATBL    ; GROUP 1
  817.     JR      MOD1-$
  818. MODBBB  LD      IY,BBBTBL    ; GROUP 2
  819.     JR      MOD1-$
  820. MODDDD  LD      IY,DDDTBL    ; GROUP 3
  821.         CP      0B6H          ; LDX ZPG,Y SPECIAL
  822.     JR      NZ,DDD1-$
  823.         LD      A,10H
  824. DDD1    CP      0BEH          ; LDX ABS,Y SPECIAL
  825.     JR      NZ,MOD1-$
  826.         LD      A,18H
  827.     JR      MOD1-$
  828. MODBBX  LD      IY,BBXTBL    ; GROUP 4 & 6
  829.         CP      96H           ; STX ZPG,Y SPECIAL
  830.     JR      Z,BBX-$
  831.     RRA            ; EXTRA SHIFT
  832.     AND    0CH        ; EXTRA MASK
  833.     JR    MOD1-$
  834. BBX    LD    A,10H        ; SPECIAL
  835.     JR    MOD1-$
  836. MODCC   LD      IY,CCTBL    ; GROUP 5
  837. MOD1    RRA                   ; ROTATE MODE INTO LSD
  838.         AND     0EH           ; MASK THE REST
  839.         LD      B,0           ; FORM OFFSET IN BC
  840.     LD      C,A
  841.         ADD     IY,BC         ; ADD TO TABLE START
  842.     LD      C,(IY+0)    ; MODE OFFSET
  843.         LD      B,(IY+1)    ; # CODE
  844.     PUSH    BC            ; SAVE FOR LATER
  845. GETDAT  LD      IY,GETTBL    ; JUMP TABLE
  846.     JP    JPIB
  847. PABY    INC     HL            ; ABS,Y
  848.     LD      A,(HL)        ; 2ND BYTE INSTR
  849.         ADD     A,(IX+3)    ; PLUS Y INDEX
  850.     LD      E,A           ; TO E
  851.         INC     HL
  852.     LD      A,(HL)        ; 3RD BYTE INSTR
  853.         ADC     A,0           ; PLUS CARRY
  854.     LD      D,A           ; TO D
  855.         JR      EXIT-$
  856. PIMM    INC     HL            ; IMMEDIATE
  857.     LD      A,(HL)        ; DATA TO ACC
  858.         JR      EX1-$
  859. PACX    LD      A,(IX+0)    ; ACCUM
  860.     PUSH    IX
  861.         POP     DE
  862.     JR      EX1-$
  863. PZPG    INC     HL            ; ZPG
  864.     LD      E,(HL)        ; ADDRESS TO DE
  865.         LD      D,0
  866.     JR      EXIT-$
  867. PAB     INC     HL            ; ABSOLUTE
  868.     LD      E,(HL)        ; ADDRESS TO DE
  869.         INC     HL
  870.     LD      D,(HL)
  871.         JR      EXIT-$
  872. PZX     LD      A,(IX+2)    ; ZPG,X...GET X INDEX
  873.     JR      PZ1-$
  874. PZY     LD      A,(IX+3)    ; ZPG,Y...GET Y INDEX
  875. PZ1     INC     HL
  876.     ADD     A,(HL)        ; ADD BASE ADDRESS
  877.         LD      E,A           ; PUT IN E
  878.     LD      D,0           ; ZERO PAGE, NO WRAP
  879.         JR      EXIT-$
  880. PZIX    INC     HL            ; (ZPG,X)
  881.     LD      A,(HL)        ; 2ND BYTE INSTR
  882.         ADD     A,(IX+2)    ; ADD X INDEX
  883.     LD      E,A           ; TO FORM BASE ADDRESS...
  884.         LD      D,0           ; IN ZERO PG, NO WRAP
  885.     LD      IY,0
  886.         ADD     IY,DE         ; TRANSFER TO IY
  887.     LD      E,(IY+0)    ; EFF ADDR TO DE
  888.         LD      D,(IY+1)
  889.     JR      EXIT-$
  890. PZIY    INC     HL            ; (ZPG),Y
  891.     LD      E,(HL)        ; BASE ADDRESS
  892.         LD      D,0           ; IN ZERO PAGE
  893.     LD      IY,0
  894.         ADD     IY,DE         ; TRANSFER TO IY
  895.     LD      A,(IY+0)    ; EFF ADDRESS...
  896.         ADD     A,(IX+3)    ; PLUS Y INDEX...
  897.     LD      E,A           ; TO DE
  898.         LD      A,(IY+1)
  899.     ADC     A,0
  900.         LD      D,A
  901.     JR      EXIT-$
  902. PABX    INC     HL            ; ABS,X
  903.     LD      A,(HL)        ; 2ND BYTE INSTR
  904.         ADD     A,(IX+2)    ; PLUS X INDEX
  905.     LD      E,A           ; TO E
  906.         INC     HL            ; 3RD BYTE INSTR
  907.     LD      A,(HL)
  908.         ADC     A,0           ; PLUS CARRY
  909.     LD      D,A           ; TO E
  910. EXIT    LD      A,(DE)        ; DATA TO ACC
  911. EX1     POP     BC            ; RESTORE # CODE
  912.     PUSH    AF            ; SAVE DATA
  913.         LD      A,3
  914.     AND     B             ; # BYTES...
  915.         LD      C,A           ; TO C
  916.     SRL     B
  917.         SRL     B             ; B=ADDR MODE
  918.     POP     AF            ; RESTORE DATA
  919.         RET
  920. ;
  921. ; STORE DATA TO ADDRESS FROM GETDAT
  922. ;
  923. PUTDAT  LD      (DE),A
  924.     RET
  925. ;
  926. ; INDEX INTO JUMP TABLES...ENTER WITH TABLE START
  927. ; ADDRESS IN IY AND OFFSET IN C. CALCULATES TABLE
  928. ; POSITION AND JUMPS TO RESULT
  929. ;
  930. JPIB    LD    B,0        ; INDIRECT JUMP PER TABLE
  931.     ADD    IY,BC        ; TABLE ADDRESS TO IY
  932.     LD    C,(IY+0)    ; TABLE ENTRY TO BC
  933.     LD    B,(IY+1)
  934.     PUSH    BC
  935.     POP    IY        ; ENTRY TO IY
  936.     JP    (IY)        ; AND GO TO IT
  937. ;
  938. ; ELEMENTARY MONITOR FUNCTIONS TO EXAMINE A BLOCK OF
  939. ; MEMORY LOCATIONS (E) AND TO CHECK AND UPDATE
  940. ; INDIVIDUAL LOCATIONS (M)
  941. ;
  942. EXAM    LD    DE,GETADR    ; EXAM BLOCK OF MEM
  943.     CALL    PRTDE
  944.     CALL    GETWRD        ; GET START ADDR
  945.     PUSH    DE
  946.     CALL    LINF
  947.     LD    DE,GETN
  948.     CALL    PRTDE
  949.     CALL    GETWRD        ; GET # BYTES
  950.     PUSH    DE
  951.     POP    BC
  952.     LD    E,4        ; CHANGE TO # LINES (/16)
  953.     XOR    A
  954. BYTLN    SRL    B
  955.     RR    C
  956.     JR    NC,XXX-$
  957.     INC    A
  958. XXX    DEC    E
  959.     JR    NZ,BYTLN-$
  960.     OR    A        ; SEE IF PARTIAL LINE
  961.     JR    Z,YYY-$
  962.     INC    BC
  963. YYY    POP    HL        ; HL = START, BC = COUNT
  964.     DEC    BC        ; ONE LESS LINE
  965. EXLP    PUSH    BC        ; LOOP FOR ONE LINE
  966.     CALL    CRLF
  967.     CALL    LADR        ; PRINT ADDRESS AT START
  968.     CALL    TWO        ; INSERT TWO SPACES
  969.     PUSH    HL        ; SAVE ADDRESS FOR ALPHA
  970.     LD    E,16        ; 16 ENTRIES PER LINE
  971. LNLP    LD    A,(HL)        ; GET BYTE FROM MEMORY
  972.     CALL    PACC        ; PRINT IT HEX
  973.     CALL    ONE        ; SPACE
  974.     INC    HL        ; POINT TO NEXT BYTE
  975.     DEC    E        ; DONE WITH HEX?
  976.     JR    NZ,LNLP-$    ; NO, DO NEXT BYTE
  977.     CALL    TWO        ; YES, SET UP FOR ALPHA
  978.     POP    HL        ; SAME STARTING ADDRESS
  979.     LD    E,16
  980. ASCII    LD    A,(HL)        ; GET BYTE
  981.     CP    20H        ; IS IT PRINTABLE?
  982.     JR    C,DOT-$
  983.     CP    80H
  984.     JR    C,ASOK-$
  985. DOT    LD    A,'.'        ; NO, PRINT A DOT
  986. ASOK    CALL    PRNA
  987.     INC    HL        ; BUMP POINTER
  988.     DEC    E        ; DONE WITH LINE?
  989.     JR    NZ,ASCII-$
  990.     POP    BC
  991.     LD    A,B        ; SEE IF ALL DONE
  992.     OR    C
  993.     RET    Z        ; YES, RET TO CMND
  994.     DEC    BC
  995.     JR    EXLP-$        ; ELSE DO ANOTHER LINE
  996. ;
  997. ; SUBSTITUTE MEMORY...ENTER BY 'M'
  998. ;
  999. SUBM    LD    DE,GETADR    ; ASK FOR ADDRESS
  1000.     CALL    PRTDE
  1001.     CALL    GETWRD        ; GET IT
  1002.     EX    DE,HL        ; MOVE IT TO HL
  1003. SULP    CALL    CRLF
  1004.     CALL    LADR        ; PRINT THE ADDRESS
  1005.     CALL    TWO
  1006.     LD    A,(HL)
  1007.     CALL    PACC        ; PRINT THE CONTENTS
  1008.     CALL    TWO
  1009. JLP    CALL    GETCHR        ; GET INPUT
  1010.     CP    2EH        ; EXIT ON "."
  1011.     RET    Z
  1012.     CP    20H
  1013.     JR    Z,FWD-$        ; SKIP AHEAD ON "SPACE"
  1014.     CALL    CONV        ; CONV HEX IF POSSIBLE
  1015.     JR    Z,JLP-$        ; NOT A HEX NUMBER
  1016.     PUSH    HL        ; SAVE ADDRESS AGAIN
  1017.     LD    HL,0        ; CLEAR FOR ROTATE
  1018. LLP    CALL    ROBYT        ; ROTATE NYBBLE INTO HL
  1019. KLP    CALL    GETCHR        ; GET ANOTHER CHARACTER
  1020.     CP    0DH
  1021.     JR    Z,PUTIN-$    ; IF "CR" STUFF IT
  1022.     CALL    CONV        ; CONV BINARY
  1023.     JR    Z,KLP-$        ; NOT A HEX NUMBER
  1024.     JR    LLP-$        ; CONTINUE
  1025. PUTIN    PUSH    HL        ; DATA TO BC
  1026.     POP    BC
  1027.          POP    HL        ; RETRIEVE ADDRESS
  1028.     LD    (HL),C        ; STUFF THE DATA
  1029. FWD    INC    HL        ; BUMP POINTER
  1030.     JR    SULP-$        ; ...AND CONTINUE
  1031. LADR    EX    DE,HL        ; PRINT WORD IN HL
  1032.     CALL    PRTWRD
  1033.     EX    DE,HL
  1034.     RET
  1035. PACC    PUSH    DE        ; PRINT BYTE IN A
  1036.     LD    E,A
  1037.     CALL    PRTBYT
  1038.     POP    DE
  1039.     RET
  1040. TWO    CALL    ONE        ; PRINT 2 SPACES
  1041. ONE    PUSH    BC        ; PRINT SPACE
  1042.     LD    C,' '
  1043.     CALL    PRNC
  1044.     POP    BC
  1045.     RET
  1046. ;
  1047. ; ELEMENTARY DOS BEGINS HERE. FILES ARE MAINTAINED ON
  1048. ; DRIVE B ONLY AND ARE NOT CP/M COMPATIBLE. FUNCTIONS
  1049. ; ARE DIRECTORY LIST (D), SAVE (S), LOAD (L), KILL (K)
  1050. ; AND INITIALIZE (I).
  1051. ; FILE NAMES CONSIST OF A PRIMARY FILE NAME OF UP TO
  1052. ; SIX CHARS AND AN OPTIONAL FILE TYPE OF UP TO THREE.
  1053. ;
  1054. ; LIST DIRECTORY
  1055. ;
  1056. PDIR    CALL    DIR1        ; SET UP FOR DIR SCH
  1057. PAGLP    CALL    NEWPG        ; NEXT DIR PG TO BUFF
  1058.     LD    B,8        ; 8 ENTRIES/PAGE
  1059. PRPAG    LD    A,(IX+0)    ; STATUS BYTE
  1060.     DEC    A
  1061.     RET    Z        ; QUIT IF DONE
  1062.     DEC    A
  1063.     JR    NZ,NEXT-$
  1064.     CALL    CRLF
  1065. PRLIN    PUSH    BC        ; PRINT NAME FROM DIR
  1066.     PUSH    IX
  1067.     LD    B,10
  1068. PLNLP    LD    C,(IX+1)
  1069.     CALL    PRNC
  1070.     INC    IX
  1071.     DJNZ    PLNLP-$
  1072.     POP    IX
  1073.     CALL    SPAC
  1074.     LD    E,(IX+11)    ; PRINT ADDRESS
  1075.     LD    D,(IX+12)
  1076.     CALL    PRTWRD
  1077.     CALL    SPAC
  1078.     LD    E,(IX+15)    ; PRINT # RECORDS
  1079.     CALL    PRTBYT
  1080.     POP    BC
  1081. NEXT    LD    DE,10H
  1082.     ADD    IX,DE        ; POINT TO NXT ENTRY
  1083.     DJNZ    PRPAG-$        ; AND REPEAT
  1084.     JR    PAGLP-$
  1085. ;
  1086. ; LOAD PGM FROM DRIVE B AND RUN FROM START ADDRESS
  1087. ;
  1088. LDGO    CALL    LOAD        ; GET PGM
  1089.     LD    IX,VREG        ; FOR SIMULATOR
  1090.     JP    RUN
  1091. ;
  1092. ; SEARCH FOR AND LOAD A FILE AT ADDR PER DIRECTORY
  1093. ;
  1094. LOAD    CALL    ANAME        ; LOAD A FILE
  1095.     CALL    NAMSCH        ; TRY TO MATCH NAME
  1096.     JP    Z,NTFND
  1097.     LD    L,(IY-5)    ; SAVE START ADDR
  1098.     LD    H,(IY-4)
  1099.     LD    (NPC),HL
  1100. LOADLP    CALL    SETDAT        ; SET UP FOR LOAD
  1101.     CALL    RDONE        ; AND READ N SECTORS
  1102.     CALL    INCDAT
  1103.     JR    NZ,LOADLP-$
  1104.     RET
  1105. ;
  1106. ; SAVE A FILE AND ADD IT TO DIRECTORY
  1107. ;
  1108. SAVE    CALL    ANAME        ; SAVE # SECTORS
  1109.     CALL    NAMSCH        ; SEE IF HAVE ALREADY
  1110.     JR    Z,SAV1-$
  1111.     CALL    LINF
  1112.     LD    DE,HAVMSG    ; IF SO, INFORM & QUIT
  1113.     CALL    PRTDE
  1114.     RET
  1115. SAV1    LD    IY,TEMPS
  1116.     LD    A,2        ; NEW ACTIVE FILE
  1117.     LD    (IY+0),A
  1118.     CALL    LINF
  1119.     LD    DE,GETADR    ; GET RUN ADDR
  1120.     CALL    PRTDE
  1121.     CALL    GETWRD
  1122.     LD    (IY+11),E
  1123.     LD    (IY+12),D
  1124.     CALL    LINF
  1125.     LD    DE,GETN        ; GET # BYTES
  1126.     CALL    PRTDE
  1127.     CALL    GETWRD
  1128.     XOR    A        ; CONVERT TO SECTORS
  1129.     LD    B,7        ; DIV BY 128
  1130. SAVX    SRL    D
  1131.     RR    E
  1132.     JR    NC,SAVY-$
  1133.     INC    A
  1134. SAVY    DJNZ    SAVX-$
  1135.     OR    A        ; FRACTIONAL SCTR?
  1136.     JR    Z,SAVZ-$
  1137.     INC    E        ; THEN ADD ONE
  1138. SAVZ    LD    (IY+15),E    ; SAVE IT
  1139.     CALL    DIR1        ; SET UP FOR DIR SCH
  1140. SAV2    CALL    NEWPG        ; SEARCH FOR NAME
  1141.     LD    B,8
  1142. SAV3    LD    A,(IX+0)    ; STAT BYTE
  1143.     DEC    A
  1144.     JR    Z,SAVNEW-$    ; NEW FILE
  1145.     SUB    2        ; DEAD FILE?
  1146.     JR    NZ,SAV4-$
  1147.     LD    A,(IY+15)    ; WILL IT FIT?
  1148.     DEC    A
  1149.     CP    (IX+15)
  1150.     JR    C,SAVOLD-$
  1151. SAV4    LD    DE,10H        ; CHECK NXT ONE
  1152.     ADD    IX,DE
  1153.     LD    D,(IX-3)    ; OLD TRACK
  1154.     LD    E,(IX-2)    ; OLD SECTOR
  1155.     LD    C,(IX-1)    ; OLD #
  1156.     DJNZ    SAV3-$
  1157.     JR    SAV2-$
  1158. SAVNEW    LD    A,26        ; NEW ENTRY
  1159.     INC    C
  1160. NEWLP    INC    E
  1161.     CP    E        ; >26?
  1162.     JR    NC,NEW1-$
  1163.     INC    D        ; IF SO, NXT TRK
  1164.     LD    E,1
  1165. NEW1    DEC    C
  1166.     JR    NZ,NEWLP-$
  1167.     JR    UPDIR-$
  1168. SAVOLD    LD    D,(IX+13)
  1169.     LD    E,(IX+14)
  1170. UPDIR    LD    (IY+13),D    ; PUT NEW TRK & SCTR
  1171.     LD    (IY+14),E
  1172.     CALL    PUTDIR        ; UPDATE DIR
  1173. SAVER    CALL    SETDAT        ; SET UP FOR SAVE
  1174.     CALL    WRONE        ; & WRITE # SECTORS
  1175.     CALL    INCDAT
  1176.     JR    NZ,SAVER-$
  1177.     RET
  1178. ;
  1179. ; KILL A FILE (SET INACTIVE STATUS IN DIRECTORY)
  1180. ;
  1181. KILL    CALL    ANAME        ; GET NAME
  1182.     CALL    NAMSCH        ; FIND IT
  1183.     JP    Z,NTFND
  1184.     LD    IY,TEMPS
  1185.     LD    A,3        ; MAKE STAT = 03
  1186.     LD    (IY+0),3
  1187.     JR    PUTDIR-$    ; AND UPDATE DIRECTORY
  1188. ;
  1189. ; INITIALIZE DISK (WRITES BLANK DIRECTORY)
  1190. ;
  1191. INIT    LD    DE,INIMSG    ; INITIALIZE DISK
  1192.     CALL    PRTDE
  1193.     CALL    GETCHR        ; ASK YES OR NO
  1194.     CP    'Y'
  1195.     RET    NZ
  1196.     CALL    HOMB
  1197.     LD    IX,BUFFR    ; FILL BUFF W/PATTERN
  1198.     LD    IY,INIMSK    ; STORED AT INIMSK
  1199.     PUSH    IX
  1200.     LD    C,8
  1201. INLP1    PUSH    IY
  1202.     LD    B,10H
  1203. INLP2    LD    A,(IY+0)
  1204.     LD    (IX+0),A
  1205.     INC    IX
  1206.     INC    IY
  1207.     DJNZ    INLP2-$
  1208.     POP    IY
  1209.     DEC    C
  1210.     JR    NZ,INLP1-$
  1211.     POP    IX
  1212.     LD    A,3        ; MAKE 1ST ONE DEAD
  1213.     LD    (IX+0),A
  1214.     LD    BC,BUFFR
  1215.     CALL    BUFS
  1216.     LD    C,0
  1217.     CALL    TRKS
  1218.     INC    C
  1219.     CALL    SECS
  1220.     CALL    WRONE        ; 1ST DIR PAGE
  1221.     LD    A,1        ; RESTORE PATTERN
  1222.     LD    (IX+0),A
  1223.     LD    BC,1902H
  1224. WRLP    PUSH    BC        ; WRITE REST OF TRK 0
  1225.     CALL    SECS
  1226.     CALL    WRONE
  1227.     POP    BC
  1228.     INC    C
  1229.     DJNZ    WRLP-$
  1230.     RET
  1231. ;
  1232. ; OVERWRITE CURRENT DIRECTORY PAGE
  1233. ;
  1234. PUTDIR    LD    B,10H        ; UPDATE DIR
  1235. UPLP    LD    A,(IY+0)
  1236.     LD    (IX+0),A
  1237.     INC    IX
  1238.     INC    IY
  1239.     DJNZ    UPLP-$
  1240.     CALL    WRONE        ; REWRITE DIR PAGE
  1241.     RET
  1242. ;
  1243. ; SEARCH FOR FILE NAME IN DIRECTORY.. RETURN WITH Z FLG
  1244. ; SET IF NOT FOUND, Z CLEAR AND BUFFER FILLED IF FOUND
  1245. ;
  1246. NAMSCH    CALL    DIR1        ; SET UP FOR DIR SCH
  1247. LDLP    CALL    NEWPG        ; READ PAGE OF NDX
  1248.     LD    B,8
  1249. LDLP1    LD    A,(IX+0)    ; CHECK STAT
  1250.     DEC    A
  1251.     JR    NZ,LDLP2-$
  1252.     RET
  1253. LDLP2    DEC    A
  1254.     PUSH    IX
  1255.     PUSH    IY
  1256.     JR    NZ,LDNXT-$    ; INACTIVE?
  1257.     LD    C,10        ; ELSE COMP NAME
  1258. CMPLP    LD    A,(IY+1)
  1259.     CP    (IX+1)
  1260.     JR    NZ,LDNXT-$
  1261.     INC    IX
  1262.     INC    IY
  1263.     DEC    C
  1264.     JR    NZ,CMPLP-$
  1265.     JR    CMPOK-$        ; SAME NAME
  1266. LDNXT    POP    IY        ; TRY NEXT ONE
  1267.     POP    IX
  1268.     LD    DE,10H
  1269.     ADD    IX,DE
  1270.     DJNZ    LDLP1-$
  1271.     JR    LDLP-$        ; NEXT PAGE
  1272. CMPOK    POP    IY        ; NAME MATCHES
  1273.     POP    IX
  1274.     LD    B,10H        ; XFER DIR NTRY TO BUFF
  1275. FILLP    LD    A,(IX+0)
  1276.     LD    (IY+0),A
  1277.     INC    IX
  1278.     INC    IY
  1279.     DJNZ    FILLP-$
  1280.     LD    DE,-10H
  1281.     ADD    IX,DE
  1282.     XOR    A
  1283.     INC    A        ; EXIT A = 1
  1284.     RET
  1285. NEWPG    EXX            ; GET NXT DIR PAGE
  1286.     LD    IX,BUFFR
  1287.     INC    (IY+14)        ; NXT SCTR
  1288.     LD    C,(IY+14)
  1289.     CALL    SECS
  1290.     CALL    RDONE        ; READ IT IN
  1291.     EXX
  1292.     RET
  1293. NTFND    CALL    LINF        ; NOT FOUND
  1294.     LD    DE,NFMSG
  1295.     CALL    PRTDE
  1296.     LD    SP,SYSTK-2    ; RET TO CMND
  1297.     RET
  1298. ;
  1299. ; FILL IN DISK DATA. USES SR CALLS IN CBIOS
  1300. ;
  1301. SETDAT    LD    IY,TEMPS    ; SET UP FOR DSK DATA
  1302.     LD    C,(IY+11)
  1303.     LD    B,(IY+12)
  1304.     CALL    BUFS        ; XFER ADDR
  1305.     LD    C,(IY+13)
  1306.     CALL    TRKS        ; TRACK
  1307.     LD    C,(IY+14)
  1308.     JP    SECS        ; SECTOR
  1309. ;
  1310. ; BUMP SECTOR/TRACK AND XFER ADDRESS FOR MULTI
  1311. ; SECTOR READ OR WRITE
  1312. ;
  1313. INCDAT    LD    A,(IY+11)    ; BUMP DSK DATA
  1314.     ADD    A,80H        ; BUMP XFER ADDR
  1315.     LD    (IY+11),A
  1316.     JR    NC,INC1-$
  1317.     INC    (IY+12)
  1318. INC1    LD    A,(IY+14)
  1319.     INC    A        ; BUMP SECTOR
  1320.     CP    27
  1321.     JR    C,INC2-$
  1322.     LD    A,1
  1323.     INC    (IY+13)        ; AND TRK IF NEEDED
  1324. INC2    LD    (IY+14),A
  1325.     LD    A,(IY+13)    ; CHECK FOR VALID TRACK
  1326.     CP    77
  1327.     JR    C,INC3-$
  1328.     LD    DE,DERMSG    ; ERROR
  1329.     CALL    PRTXT
  1330.     POP    BC        ; RET TO CMND
  1331.     RET
  1332. INC3    DEC    (IY+15)
  1333.     RET
  1334. ;
  1335. ; GET FILE NAME TO BUFFER
  1336. ;
  1337. ANAME    LD    IY,TEMPS
  1338.     PUSH    IY
  1339.     LD    B,10
  1340.     LD    A,' '
  1341. MPTY    LD    (IY+1),A    ; CLEAR INPUT BUFFER
  1342.     INC    IY
  1343.     DJNZ    MPTY-$
  1344.     LD    DE,NAMSG    ; PROMPT FOR NAME
  1345.     CALL    PRTDE
  1346.     POP    IY
  1347.     PUSH    IY
  1348. NAMLP    CALL    GETCHR
  1349.     CP    0DH        ; END?
  1350.     JR    Z,NAMIN-$
  1351.     CP    '.'        ; DELIMITER?
  1352.     JR    Z,FTYP-$
  1353.     LD    (IY+1),A    ; PUT IT IN BUFFER
  1354.     INC    IY
  1355.     JR    NAMLP-$
  1356. FTYP    POP    IY
  1357.     PUSH    IY
  1358.     LD    (IY+7),A
  1359.     INC    IY
  1360. TYPLP    CALL    GETCHR
  1361.     CP    0DH
  1362.     JR    Z,NAMIN-$
  1363.     LD    (IY+7),A
  1364.     INC    IY
  1365.     JR    TYPLP-$
  1366. NAMIN    POP    IY
  1367.     RET
  1368. ;
  1369. ; SET UP FOR DIRECTORY SEARCH
  1370. ;
  1371. DIR1    LD    IY,TEMPS    ; SET UP FOR DIR SCH
  1372.     LD    BC,BUFFR
  1373.     CALL    BUFS
  1374.     LD    C,0        ; TRACK 0
  1375.     LD    (IY+13),C
  1376.     LD    (IY+14),C
  1377.     JP    TRKS
  1378. ;
  1379. ; VARIOUS ROUTINES USED BY TRANSLATOR, MONITOR, AND DOS
  1380. ;
  1381. CRLF    LD      C,0DH        ; PRINT CRLF
  1382.     CALL    PRNC
  1383. LINF    LD      C,0AH
  1384.     JP      PRNC
  1385. PROM    LD      C,' '        ; PRINT ' >'
  1386.     CALL    PRNC
  1387.         LD      C,'>'
  1388.     JP      PRNC
  1389. ;
  1390. ; GET HEX DATA IN DE. ROTATE CONTINUOUSLY UNTIL A
  1391. ; 'CR' IS INPUT. LSB IN E. SET Z FLG AND RET ON 'SPACE'
  1392. ;
  1393. GETWRD  CALL    GETCHR        ; GET BINARY DATA
  1394.     CP      ' '           ; RET Z IF SACE
  1395.         RET     Z
  1396.     EX      DE,HL
  1397.         LD      HL,0          ; CLEAR HO DING REG
  1398.     CALL    CONV        ; CHANGE TO HEX
  1399.     JR    Z,GETWRD-$    ; INVALID CHAR
  1400.     CALL    ROBYT        ; ROTATE INTO HL
  1401. WRDLP   CALL    GETCHR        ; GET NEXT CHAR
  1402.     CP      0DH           ; TERMINATOR
  1403.     JR    Z,WRDON-$
  1404.     CALL    CONV
  1405.     JR    Z,WRDLP-$
  1406.     CALL    ROBYT
  1407.     JR    WRDLP-$
  1408. WRDON    OR      A             ; CLEAR Z FLAG
  1409.         EX      DE,HL         ; DATA INTO DE
  1410.     RET
  1411. ;
  1412. ; CONVERT ASCII DATA IN A TO HEX. SET Z FLG IF INVALID
  1413. ;
  1414. CONV    CP      '0'           ; CONVERT TO BINARY
  1415.     JR      C,BAD-$
  1416.         CP      3AH
  1417.     JR      C,GOOD-$
  1418.         CP      41H
  1419.     JR      C,BAD-$
  1420.         CP      47H
  1421.     JR      C,GOOD-$
  1422. BAD     LD      C,'?'
  1423.     CALL    PRNC        ; NOTIFY BAD INPUT
  1424.     XOR    A        ; SET Z FLAG
  1425.     RET
  1426. GOOD    SUB     30H
  1427.     CP      10
  1428.     JR      C,GOOD1-$
  1429.     SUB     7
  1430. GOOD1    CP    0FFH        ; CLEAR Z FLAG
  1431.     RET
  1432. ;
  1433. ; ROTATE BYTE IN A INTO HL VIA L
  1434. ;
  1435. ROBYT    ADD    HL,HL        ; ROTATE A INTO HL
  1436.     ADD     HL,HL        ; ROTATE HL 4 BITS LEFT
  1437.     ADD     HL,HL
  1438.     ADD     HL,HL
  1439.     OR      L             ; PUT NEW DIGIT INTO L
  1440.     LD      L,A
  1441.     RET
  1442. ;
  1443. ; PRINT FOUR DIGIT VALUE IN DE
  1444. ;
  1445. PRTWRD  LD      A,D
  1446.     CALL    PRBIN
  1447. PRTBYT  LD      A,E           ; PRINT VALUE IN E
  1448. PRBIN   PUSH    AF
  1449.     RRC     A
  1450.     RRC     A
  1451.     RRC     A
  1452.     RRC     A
  1453.     CALL    PRB1
  1454.     POP     AF
  1455. PRB1    AND     0FH
  1456.     ADD     A,90H
  1457.     DAA
  1458.     ADC     A,40H
  1459.     DAA
  1460.     JR      PRNA-$
  1461. ;
  1462. ; PRINT STRING POINTED TO BY DE. USES PRTXT
  1463. ;
  1464. PRTDE    PUSH    IY        ; PRNT PER DE
  1465.     PUSH    DE
  1466.     POP    IY
  1467.     CALL    PRTXT
  1468.     POP    IY
  1469.     RET
  1470. ;
  1471. ; PRINT ASCII STRING POINTED TO BY IY. CHECK FOR
  1472. ; SPECIALS: '1' PRINTS AS BYTE POINTED TO BY HL, '2'
  1473. ; PRINTS (HL+1), '!' DOES NOT PRINT, '^' TERMINATES.
  1474. ;
  1475. PRTXT   LD      E,0           ; PRNT UP TO 255 CHRSY
  1476. PRNLP   LD      A,(IY+0)
  1477.     CP      '^'        ; TERMINATOR?
  1478.     RET     Z
  1479.     CP      '!'        ; NO PRINT?
  1480.     JR      Z,DONXT+1-$
  1481.     PUSH    DE
  1482.     LD      HL,(CPC)
  1483.     INC     HL
  1484.     CP      '2'        ; PRINT (HL+1)?
  1485.     JR      NZ,PRN1-$
  1486.     INC     HL
  1487.     LD      E,(HL)
  1488.     CALL    PRTBYT
  1489.     JR      DONXT-$
  1490. PRN1    CP      '1'        ; PRINT (HL)?
  1491.     JR      NZ,DOALPH-$
  1492.     LD      E,(HL)
  1493.     CALL    PRTBYT
  1494.     JR      DONXT-$
  1495. DOALPH  LD      C,A        ; ALL OTHER CHARACTERS
  1496.     CALL    PRNC
  1497. DONXT   POP     DE
  1498.     INC     IY
  1499.     DEC     E
  1500.     JR      NZ,PRNLP-$
  1501.     RET
  1502. ;
  1503. SPAC    PUSH    BC            ; PRINT 6 SPACES
  1504.     LD      B,6
  1505.     LD      C,' '
  1506. SPLP    CALL    PRNC
  1507.     DJNZ    SPLP-$
  1508.     POP     BC
  1509.     RET
  1510. ;
  1511. ; CONSOLE I/O
  1512. ;
  1513. GETCHR  CALL    KBIN         ; GET CHAR & TEST
  1514.     CP    3        ; ^C....
  1515.     JP    Z,CPWRM        ; CPM WARM START
  1516.     CP    18H        ; ^X (CAN)...
  1517.     JR    NZ,PRNA-$
  1518.     LD    SP,SYSTK-2    ; FOR RET TO CMND
  1519.     LD    A,'#'
  1520. PRNA    LD      C,A        ; PRINT CHAR IN A
  1521.     PUSH    AF
  1522.     CALL    PRNC
  1523.     POP    AF
  1524.     RET
  1525. ;
  1526. ; JUMPS TO EXTERNAL I/O...MODIFY AS NEEDED
  1527. ;
  1528. KBIN    JP    CONIN        ; GET SINGLE CHAR IN A
  1529. KBST    JP    CONST        ; TEST INPUT STATUS
  1530. PRNC    JP      CONOUT        ; PRINT CHAR IN C
  1531. HOMB    JP    HOME        ; DRIVE HOME
  1532. DRVS    JP    SETDRV        ; SET DRIVE #
  1533. SECS    JP    SETSEC        ; SET SECTOR #
  1534. TRKS    JP    SETTRK        ; SET TRK #
  1535. BUFS    JP    SETBUF        ; SET XFER ADDRESS
  1536. RDONE    JP    READ        ; READ A SECTOR
  1537. WRONE    JP    WRITE        ; WRITE A SECTOR
  1538. ;
  1539. ; JUMP TABLE FOR LINKS TO Z80 ROUTINES...FILL IN AS REQD
  1540. ; FIRST TWO INITIALIZED TO CONSOLE I/O VIA ACC
  1541. ;
  1542. USR0    JP    KBIN        ; 6502 USER ROUTINES
  1543. USR1    JP    PRNA
  1544. USR2    DEFB    0C9H,0,0
  1545. USR3    DEFB    0C9H,0,0
  1546. USR4    DEFB    0C9H,0,0
  1547. ;
  1548. ; 6502 BREAK VECTOR...INIT TO GO TO COMMAND LEVEL
  1549. ;
  1550. IPOINT    DEFW    0
  1551. ;
  1552. ; TEMPORARIES FOR TRANSLATOR
  1553. ;
  1554. NSTEPS  DEFB    1             ; # STEPS TO EXECUTE
  1555. NBYTES  DEFB    0             ; # BYTES IN INSTR
  1556. DLYCON    DEFW    0A00H        ; TIME DELAY FOR # STEP
  1557. BREAK   DEFW    0             ; BREAKPOINT ADDRESS
  1558. ;
  1559. ; SIMULATED 6502 CPU REGISTERS...INIT TO THESE VALUES
  1560. ;
  1561. VREG    DEFB    0             ; ACCUMULATOR
  1562.     DEFB    0             ; STATUS (P) REG
  1563.     DEFB    0             ; X INDEX REG
  1564.     DEFB    0             ; Y INDEX REG
  1565.     DEFB    0FFH          ; STACK POINTER
  1566. CPC     DEFW    200H         ; PROGRAM COUNTER
  1567. NPC     DEFW    200H           ; LOCATION OF NXT INSTR
  1568. ;
  1569. ; VARIOUS MESSAGES FOR SYSTEM
  1570. ;
  1571. INTRO   DEFM    '***** XENTRIX ZX/65 *****^'
  1572. HEADR   DEFM    ' CPC.. INS.. A.... P....'
  1573.     DEFM    ' X.... Y.... SP... NPC..'
  1574. NFMSG    DEFM    'FILE NOT FOUND^'
  1575. HAVMSG    DEFM    'FILE EXISTS^'
  1576. DERMSG    DEFM    'BAD TRACK/SECTOR #^'
  1577. GETADR    DEFM    '  ENTER START ADDRESS: ^'
  1578. GETN    DEFM    '  ENTER NO. BYTES: ^'
  1579. NAMSG    DEFM    '  ENTER FILNAM.TYP: ^'
  1580. MLTMSG    DEFM    '  ENTER # STEPS: ^'
  1581. BKPMSG    DEFM    '  ENTER BRKP ADDR: ^'
  1582. INIMSG    DEFM    '  INITIALIZE? (Y/N) ^'
  1583. ;
  1584. ; DOS BUFFERS AND DATA
  1585. ;
  1586. TEMPS    DEFS    10H        ; DISK ENTRY BUFFER
  1587. BUFFR    DEFS    80H        ; DIRECTORY PAGE BUFFER
  1588. INIMSK    DEFB    1,20H,20H,20H,20H,20H,20H,20H
  1589.     DEFB    20H,20H,20H,20H,20H,1,0,0
  1590. ;
  1591. ; DATA TABLES FOR TRANSLATOR BEGIN HERE
  1592. ;
  1593. ; ADDRESSING MODE TABLES
  1594. ;
  1595. AAATBL  DEFW    1A0CH         ; (ZPG,X)
  1596.     DEFW    0E04H         ; ZPG
  1597.     DEFW    0600H         ; IMM
  1598.     DEFW    0B06H         ; ABS
  1599.     DEFW    1E0EH         ; (ZPG),Y
  1600.     DEFW    2208H         ; ZPG,X
  1601.     DEFW    2F12H         ; ABS,Y
  1602.     DEFW    2B10H         ; ABS,X
  1603. BBBTBL  DEFW    0             ; INVALID
  1604.     DEFW    0E04H         ; ZPG
  1605.     DEFW    1502H         ; ACC
  1606.     DEFW    0B06H         ; ABS
  1607.     DEFW    260AH         ; ZPG,Y
  1608.     DEFW    2208H         ; ZPG,X
  1609.     DEFW    2F12H         ; ABS,Y
  1610.     DEFW    2B10H         ; ABS,X
  1611. DDDTBL  DEFW    0600H         ; IMM
  1612.     DEFW    0E04H         ; ZPG
  1613.     DEFW    0             ; INVALID
  1614.     DEFW    0B06H         ; ABS
  1615.     DEFW    260AH         ; ZPG,Y
  1616.     DEFW    2208H         ; ZPG,X
  1617.     DEFW    2F12H         ; ABS,Y
  1618.     DEFW    2B10H         ; ABS,X
  1619. BBXTBL  DEFW    0E04H         ; ZPG
  1620.     DEFW    0B06H         ; ABS
  1621.     DEFW    2208H         ; ZPG,X
  1622.     DEFW    2B10H         ; ABS,X
  1623.     DEFW    260AH        ; ZPG,Y
  1624. CCTBL   DEFW    0600H         ; IMM
  1625.     DEFW    0E04H         ; ZPG
  1626.     DEFW    0             ; INVALID
  1627.     DEFW    0B06H         ; ABS
  1628. ;
  1629. ; BRANCH MASK TABLE
  1630. ;
  1631. MSKTBL  DEFW    8026H         ; BPL
  1632.     DEFW    801EH         ; BMI
  1633.     DEFW    402EH         ; BVC
  1634.     DEFW    4032H         ; BVS
  1635.     DEFW    010EH         ; BCC
  1636.     DEFW    0112H         ; BCS
  1637.     DEFW    0222H         ; BNE
  1638.     DEFW    0216H         ; BEQ
  1639. ;
  1640. ; FLAG SET/RESET CODES
  1641. ;
  1642. FLGTBL  DEFW    0135H          ; CLC
  1643.     DEFW    01B1H        ; SEC
  1644.     DEFW    043DH        ; CLI
  1645.     DEFW    04B9H        ; SEI
  1646.     DEFW    4041H        ; CLV
  1647.     DEFW    0000        ; INVALID
  1648.     DEFW    0839H        ; CLD
  1649.     DEFW    08B5H        ; SED
  1650. ;
  1651. ; JUMP TABLES TO IMPLIED INSTRUCTIONS
  1652. ;
  1653. IMPTBL  DEFW    PPHP          ; IMPLIED INSTR TABLE
  1654.     DEFW    PPLP
  1655.     DEFW    PPHA
  1656.     DEFW    PPLA
  1657.     DEFW    PDEY
  1658.     DEFW    PTAY
  1659.     DEFW    PINY
  1660.     DEFW    PINX
  1661.     DEFW    PTXA
  1662.     DEFW    PTAX
  1663.     DEFW    PDEX
  1664.     DEFW    PNOP
  1665. ;
  1666. ; JUMP TABLE TO ADDR MODE PROCESSORS
  1667. ;
  1668. GETTBL  DEFW    PIMM          ; INSTR MODE TABLE
  1669.     DEFW    PACX
  1670.     DEFW    PZPG
  1671.     DEFW    PAB
  1672.     DEFW    PZX
  1673.     DEFW    PZY
  1674.     DEFW    PZIX
  1675.     DEFW    PZIY
  1676.     DEFW    PABX
  1677.     DEFW    PABY
  1678. ;
  1679. ; JUMP TABLES TO MULTI-MODE PROCESSORS
  1680. ;
  1681. EVNTBL  DEFW    PASL          ; JUMPS TO PROCESSORS
  1682.     DEFW    PBTRL
  1683.     DEFW    PLSR
  1684.     DEFW    PROR
  1685.     DEFW    PSTXY
  1686.     DEFW    PLDXY
  1687.     DEFW    PDCY
  1688.     DEFW    PICX
  1689. ODDTBL  DEFW    PORA
  1690.     DEFW    PAND
  1691.     DEFW    PEOR
  1692.     DEFW    PADC
  1693.     DEFW    PSTA
  1694.     DEFW    PLDA
  1695.     DEFW    PCMP
  1696.     DEFW    PSBC
  1697. ;
  1698. ; MNEMONIC ASCII CODES (PACKED INTO 2 BYTES)
  1699. ;
  1700. MNMTBL  DEFW    0483H          ; MNEMONIC TABLE
  1701.     DEFW    05C4H
  1702.     DEFW    066CH
  1703.     DEFW    0863H         ; BCC
  1704.     DEFW    0873H
  1705.     DEFW    08B1H
  1706.     DEFW    0934H
  1707.     DEFW    09A9H
  1708.     DEFW    09C5H
  1709.     DEFW    0A0CH
  1710.     DEFW    0A4BH
  1711.     DEFW    0AC3H
  1712.     DEFW    0AD3H
  1713.     DEFW    0D83H         ; CLC
  1714.     DEFW    0D84H
  1715.     DEFW    0D89H
  1716.     DEFW    0D96H
  1717.     DEFW    0DB0H
  1718.     DEFW    0E18H
  1719.     DEFW    0E19H
  1720.     DEFW    10A3H        ; DEC
  1721.     DEFW    10B8H
  1722.     DEFW    10B9H
  1723.     DEFW    15F2H        ; EOR
  1724.     DEFW    25C3H        ; INC
  1725.     DEFW    25D8H
  1726.     DEFW    25D9H
  1727.     DEFW    29B0H        ; JMP
  1728.     DEFW    2A72H
  1729.     DEFW    3081H        ; LDA
  1730.     DEFW    3098H
  1731.     DEFW    3099H
  1732.     DEFW    3272H
  1733.     DEFW    39F0H        ; NOP
  1734.     DEFW    3E41H        ; ORA
  1735.     DEFW    4101H        ; PHA
  1736.     DEFW    4110H
  1737.     DEFW    4181H
  1738.     DEFW    4190H
  1739.     DEFW    49ECH        ; ROL
  1740.     DEFW    49F2H
  1741.     DEFW    4A89H
  1742.     DEFW    4A93H
  1743.     DEFW    4C43H        ; SBC
  1744.     DEFW    4CA3H
  1745.     DEFW    4CA4H
  1746.     DEFW    4CA9H
  1747.     DEFW    4E81H
  1748.     DEFW    4E98H
  1749.     DEFW    4E99H
  1750.     DEFW    5038H        ; TAX
  1751.     DEFW    5039H
  1752.     DEFW    5278H
  1753.     DEFW    5301H
  1754.     DEFW    5313H
  1755.     DEFW    5321H
  1756. ;
  1757. ; ADDRESS MODE PRINT TABLE
  1758. ;
  1759. AMDTBL  DEFM    ' $1    !'     ; ADDR MODE TABLE...REL
  1760.     DEFM    ' #$1   !'     ; IMMEDIATE
  1761.     DEFM    ' $21  !!'     ; ABS
  1762.     DEFM    ' $1    !'     ; ZPG
  1763.     DEFM    '        '     ; IMPLIED
  1764.     DEFM    ' A      '     ; ACCUM
  1765.     DEFM    ' ($1,X)!'     ; (ZPG,X)
  1766.     DEFM    ' ($1),Y!'     ; (ZPG),Y
  1767.     DEFM    ' $1,X  !'     ; ZPG,X
  1768.     DEFM    ' $1,Y  !'     ; ZPG,Y
  1769.     DEFM    ' $21,X!!'     ; ABS,X
  1770.     DEFM    ' $21,Y!!'     ; ABS,Y
  1771.     DEFM    ' ($21)!!'     ; INDIRECT
  1772. ;
  1773. ; THAT'S ALL!
  1774. ;
  1775.     END
  1776.