home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug036.ark / MAC6.AZM < prev    next >
Text File  |  1984-04-29  |  11KB  |  580 lines

  1. .TITLE "CP/M DISK I/O DRIVERS FOR TDL'S MACROASSEMBLER               VER. 1.6"
  2. ;
  3. ; VERSION 1.2   11 APR 77
  4. ; VERSION 1.3   20 SEP 77
  5. ; VERSION 1.4   17 OCT 77
  6. ;
  7. ; BY JEFFREY W. SHOOK
  8. ; PO BOX 185
  9. ; ROCKY POINT, NY 11778
  10. ;
  11. ; VERSION 1.5   28 DEC 78
  12. ; VERSION 1.6   11 MAR 79
  13. ;
  14. ; BY MIKE FAVITTA
  15. ; 2 JANET LANE
  16. ; ALBANY, NY 12203
  17. ;
  18. ; THIS PROGRAM ADAPTS THE TDL MACROASSEMBLER
  19. ; TO WORK UNDER CP/M.
  20. ;
  21. ; SEE MAC6.DOC FOR DETAILS
  22. ;
  23. ;***********************************
  24. ;    CP/M STANDARD EQUATES
  25. ;***********************************
  26.  
  27. BOOT = 0000H    ;WARM START ADDRESS
  28. TFCB = 005CH    ;DEFAULT FCB ADDRESS
  29. TBUF = 0080H    ;DEFAULT BUFFER ADDRESS
  30. TBASE = 0100H    ;TRANSIENT PROGRAM BASE
  31. CBASE = 8500H    ;CCP BASE ADDRESS
  32. BDOS = 0005H    ;BDOS ENTRY POINT
  33. CONIN = 09A09H    ;CONSOLE INPUT SUBROUTINE
  34. CONOUT = 09A0CH    ;CONSOLE OUTPUT ROUTINE
  35. TDL = 0B23H    ;TDL ASSEM START
  36. TDLR = 0B27H    ;TDL RECOVERY ADDR
  37.  
  38. ;***********************************
  39. ;    CP/M FUNCTION CODES
  40. ;***********************************
  41.  
  42. SRSET = 00    ;SYSTEM RESET
  43. RCON = 01    ;READ CONSOLE
  44. WCON = 02    ;WRITE CONSOLE
  45. RRDR = 03    ;READ READER
  46. WPUN = 04    ;WRITE PUNCH
  47. WLST = 05    ;WRITE LIST
  48. ISTAT = 07    ;GET IOSTATUS
  49. SSTAT = 08    ;SET IOSTATUS
  50. WCONB = 09    ;WRITE CONSOLE BUFFER
  51. RCONB = 10    ;READ CONSOLE BUFFER
  52. CSTAT = 11    ;CHECK CONSOLE STATUS
  53. LHEAD = 12    ;LIFT DISK HEAD
  54. RSDSK = 13    ;RESET DISK SYSTEM
  55. SDISK = 14    ;SELECT DISK
  56. OPEN = 15    ;OPEN FILE
  57. CLOSE = 16    ;CLOSE FILE
  58. SFRST = 17    ;SEARCH FIRST
  59. SNEXT = 18    ;SEARCH NEXT
  60. FDELT = 19    ;DELETE FILE
  61. READ = 20    ;READ RECORD
  62. WRITE = 21    ;WRITE RECORD
  63. CREATE = 22    ;CREATE FILE
  64. RENAM = 23    ;RENAME FILE
  65. LOGIN = 24    ;GET LOGIN
  66. IDISK = 25    ;GET DISK NUMBER
  67. SDMA = 26    ;SET DMA VECTOR
  68. IALLOC = 27    ;GET ALLOCATION VECTOR
  69. ;
  70. EOF = 1AH    ; CP/M END OF FILE CHAR
  71. CR = 0DH
  72. LF = 0AH
  73. ;
  74. ;
  75.     .LOC    100H    ; LET CP/M FIND US
  76.     JMP    MACAD
  77. ;
  78. ;
  79. ; TRANSIENT PROGRAM STORAGE
  80. ; DEFINITIONS
  81. ;
  82. CSTSF:    .BYTE 0        ; CONSOLE STATUS FLAG
  83. SDSK:    .WORD 0        ; SOURCE DRIVE
  84. ODSK:    .WORD 1        ; OUTPUT DRIVE
  85. OPT:    .WORD 0        ; SAVE OPTIONS HERE
  86. PASSP:    .WORD PASST    ; PASS TABLE POINTER
  87. SRCPTR:    .WORD 0        ; SOURCE BUFFER POINTER
  88. LSTPTR:    .WORD LSTBUF    ; LISTING BUFFER POINTER
  89. HEXPTR:    .WORD HEXBUF    ; HEX OBJECT FILE POINTER
  90. SRCFCB:    .BLKB 36    ; SOURCE FILE CONTROL BLOCK
  91. SRCBUF:    .BLKB 128    ; SOURCE FILE BUFFER
  92. LSTFCB:    .BLKB 36    ; LISTING FILE CONTROL BLOCK
  93. LSTBUF:    .BLKB 128    ; LISTING FILE BUFFER
  94. HEXFCB:    .BLKB 36    ; OBJECT FILE CONTROL BLOCK
  95. HEXBUF:    .BLKB 128    ; OBJECT FILE BUFFER
  96. ;
  97. ;
  98. MACAD:    LXI    SP,MACRX+16EH    ; SET TEMP STACK
  99.     LXI H,SRCFCB    
  100.     LXI B,MACAD-SRCFCB
  101.     MVI A,0
  102. CLEAR:    MOV M,A        ; ZERO FCB AND BUFFER
  103.     INX H        ; AREAS
  104.     DCX B
  105.     CMP C    
  106.     JRNZ CLEAR
  107.     CMP B
  108.     JRNZ CLEAR
  109.     LDA TFCB+17    ; SAVE OPTIONS
  110.     STA OPT
  111.     LDA TFCB+18
  112.     STA OPT+1
  113.     MVI A,'L'    ; DON'T ALLOW LO
  114.     CALL OPTS    ; TOGETHER AS OPTIONS
  115.     JRNZ ..SKP
  116.     MVI A,'O'
  117.     CALL OPTS
  118.     JZ ILGOP
  119. ..SKP:    MVI C,IDISK    ; GET ACTIVE DRIVE #
  120.     CALL BDOS
  121.     MOV C,A
  122.     MVI A,'S'    ; IS THE
  123.     CALL OPTS    ; S OPTION SET
  124.     MOV A,C
  125.     JRNZ DUAL    ; NO,SET UP FOR 2 DRIVES
  126.     STA SDSK    ; SET UP FOR 1 DRIVE
  127.     STA ODSK
  128.     JMPR SKIP
  129. DUAL:    BIT 0,A        ; IS SOURCE ON A
  130.     JRZ SKIP
  131.     STA SDSK    ; SOURCE ON B
  132.     MVI A,0
  133.     STA ODSK
  134. SKIP:    LXI    H,AZM    ; INSERT FILETYPE
  135.     LXI    D,TFCB+9
  136.     LXI    B,3    ; IN TRANSIENT FCB
  137.     LDIR        ; MOVE FILETYPE
  138.     LXI    D,TFCB    ; CHECK DIRECTORY
  139.     MVI    C,SFRST    ; TO SEE IF FILE EXISTS
  140.     CALL    BDOS
  141.     MVI C,0        ; ERROR 0
  142.     CPI    0FFH
  143.     CZ    ERROR
  144.     LXI    H,TFCB    ; MOVE FILE NAME TO SRCFCB
  145.     LXI    D,SRCFCB
  146.     LXI    B,12
  147.     LDIR        ; MOVE BLOCK
  148.     LDED ODSK    ; LOG IN OUTPUT DRIVE
  149.     MVI C,SDISK
  150.     CALL BDOS
  151.     MVI A,'O'    ; IF O OPT SET
  152.     CALL OPTS    ; DON'T WANT LIST FILE
  153.     JRZ MHEX
  154.     LXI    D,LSTFCB; CREATE LISTING FILE
  155.     LXI    B,PRN
  156.     CALL    MAKEF
  157. MHEX:    MVI A,'L'    ; IF L OPT SET
  158.     CALL OPTS    ; DON'T WANT HEX FILE
  159.     JRZ ..SKP
  160.     LXI    D,HEXFCB; CREATE OBJECT FILE
  161.     LXI    B,HXR
  162.     CALL    MAKEF
  163. ..SKP:    JMP    MACRX    ; GO ASSEMBLE
  164. ;
  165. ; TABLE OF FILETYPES
  166. ;
  167. AZM:    .ASCII 'AZM'
  168. PRN:    .ASCII 'PRN'
  169. HXR:    .ASCII 'HXR'
  170. ;
  171. ; END OF ASSEMBLY
  172. ;
  173. TRPSIM:    MVI    C,EOF    ; EMPTY LIST BUFFER
  174.     MVI A,'O'    ; DON'T CLOSE IF
  175.     CALL OPTS    ; O OPT SET
  176.     JRZ CHEX
  177. LOOP:    CALL    LOSIM
  178.     JRNC    LOOP
  179.     MVI C,CLOSE    ; CLOSE FILE
  180.     LXI D,LSTFCB
  181.     CALL BDOS
  182. CHEX:    MVI A,'L'    ; DON'T CLOSE IF
  183.     CALL OPTS    ; L OPT SET
  184.     JRZ DONE
  185.     MVI C,EOF
  186. TRPS1:    CALL    POSIM    ; EMPTY HEX BUFFER
  187.     JRNC    TRPS1
  188.     MVI    C,CLOSE    ; CLOSE FILE
  189.     LXI    D,HEXFCB
  190.     CALL    BDOS
  191. DONE:    JMP    BOOT
  192. ;
  193. ; IF CHAR IN A MATCHES 1 OF THE
  194. ; OPTIONS, SET THE ZERO FLAG
  195. ;
  196. OPTS:    PUSH H
  197.     LXI H,OPT    ; POINT TO OPTIONS
  198.     CMP M        ; MATCH ?
  199.     JRZ ..SKP    ; YES,RETURN
  200.     INX H        ; NO,TRY NEXT ONE
  201.     CMP M
  202. ..SKP:    POP H
  203.     RET
  204. ;
  205. ; SIMULATE CONSOLE INPUT FOR PASS
  206. ; CONTROL OF ASSEMBLER.
  207. ; PASS 1 = SYMBOL TABLE
  208. ; PASS 2 = LISTING
  209. ; PASS 3 = HEX OBJECT FILE
  210. ;
  211. CISIM:    PUSH    H    ; SAVE ASSEMBLER REGISTERS
  212.     PUSH    D
  213.     PUSH    B
  214.     LDED SDSK    ; LOG IN SOURCE DRIVE
  215.     MVI C,SDISK
  216.     CALL BDOS
  217.     MVI    A,0    ; SET NEXT RECORD POINTER TO ZERO
  218.     STA    CSTSF    ; CLEAR CONSOLE STATUS FLAG
  219.     STA SRCFCB+12    ; CLEAR FCB
  220.     STA SRCFCB+15
  221.     STA SRCFCB+32
  222.     LXI D,SRCBUF    ;MAKE SURE SRCBUF
  223.     MVI C,SDMA    ;IS USED
  224.     CALL BDOS
  225.     LXI D,SRCFCB    
  226.     MVI C,OPEN    ;OPEN SOURCE FILE
  227.     CALL BDOS
  228.     MVI C,1        ; ERROR 1
  229.     CPI 0FFH
  230.     CZ ERROR
  231.     LXI    H,SRCBUF+128
  232.     SHLD    SRCPTR    ; SET SRC PTR TO END OF BUFFER
  233.     LHLD    PASSP    ; LOAD POINTER TO PASS #
  234.     MOV    C,M    ; GET PASS
  235.     MVI A,'1'    ; IS IT PASS 1
  236.     CMP M
  237.     JRNZ ..SKP    ; NO
  238.     MVI A,'O'    ; YES,CHECK FOR O OPT
  239.     CALL OPTS
  240.     JRNZ EXIT    ; NOT SET
  241.     INX H        ; SKIP LIST PASS
  242.     JMPR EXIT
  243. ..SKP:    MVI A,'2'    ; IS IT PASS 2
  244.     CMP M
  245.     JRNZ EXIT    ; NO
  246.     MVI A,'L'    ; YES,CHECK FOR L OPT
  247.     CALL OPTS
  248.     JRNZ EXIT    ; NOT SET
  249.     INX H        ; SKIP OBJECT PASS
  250. EXIT:    MOV A,C        ; A=PASS #
  251.     INX    H
  252.     SHLD    PASSP
  253.     POP B
  254.     POP D
  255.     POP    H
  256.     RET
  257. ;
  258. ;
  259. ; TABLE OF PASS NUMBERS
  260. ;
  261. PASST:    .ASCII '1230'
  262. ;
  263. ; CHARACTER INPUT SUBROUTINE
  264. ;
  265. ; CREATE A SOURCE BUFFER AND LOAD
  266. ; IT FROM THE DISK. AT EACH CALL
  267. ; SUPPLY ONE CHARCTER IN A REG.
  268. ; IF BUFFER EMPTY, CALL BDOS TO
  269. ; FILL IT. SET CARRY IF EOF IS
  270. ; FOUND IN FILE.
  271. ;
  272. RISIM:    PUSH    H    ; SAVE ASSM HL,DE
  273.     PUSH    D
  274.     LXI    D,SRCFCB; GET FCB ADDRESS
  275.     LHLD    SRCPTR    ; GET BUFFER POINTER
  276.     CALL    BUFIN    ; READ A BYTE
  277.     SHLD    SRCPTR    ; SAVE BUFFER POINTER
  278.     POP    D    ; RESTORE HL,DE
  279.     POP    H
  280.     CPI    EOF    ; CHECK FOR EOF CHAR
  281.     STC        ; SET EOF FLAG IN CARRY
  282.     RZ
  283.     CMC        ; NOT EOF, ERASE MARK
  284.     RET
  285. ;
  286. ; LIST CHARACTER OUTPUT
  287. ;
  288. ; CREATE AN OUTPUT BUFFER AND
  289. ; PUT EACH CHAR IN UNTIL FULL.
  290. ; THEN WRITE CONTENTS TO DISK
  291. ; FILE AND RESET POINTER.
  292. ;
  293. LOSIM:    PUSH    D
  294.     PUSH    H
  295.     LHLD    LSTPTR
  296.     LXI    D,LSTFCB
  297.     CALL    BUFOUT
  298.     SHLD    LSTPTR
  299.     POP    H
  300.     POP    D
  301.     MOV    A,C
  302.     RET
  303. ;
  304. ;
  305. ; PUNCH CHARACTER OUTPUT
  306. ; SIMILAR TO LIST OUTPUT
  307. ;
  308. POSIM:    PUSH    D
  309.     PUSH    H
  310.     LHLD    HEXPTR
  311.     LXI    D,HEXFCB
  312.     CALL    BUFOUT
  313.     SHLD    HEXPTR
  314.     POP    H
  315.     POP    D
  316.     MOV    A,C
  317.     RET
  318. ;
  319. ; SOURCE BUFFER CONTROL
  320. ; REFILL BUFFER IF EMPTY, PUT NEXT CHARACTER IN A
  321. ; ENTER WITH FCB ADDRESS IN DE, BUFFER POINTER IN HL
  322. ; SAVES BC, RETURNS WITH CHAR IN A, BUFFER POINTER IN HL
  323. ;
  324. BUFIN:    MOV    A,E    ; COMPUTE END OF BUFFER
  325.     ADI    SRCBUF+128-SRCFCB
  326.     CMP    L
  327.     JRNZ    SRCB1
  328.     PUSH    B
  329.     MVI    C,READ
  330.     CALL    REFILL
  331.     ANI    0FEH    ; CHECK FOR GOOD READ
  332.     CPI    0
  333.     MVI C,2        ; ERROR 2
  334.     CNZ    ERROR
  335.     POP B
  336. SRCB1:    MOV    A,M
  337.     INX    H
  338.     RET
  339. ;
  340. ;
  341. ; OUTPUT BUFFER CONTROL
  342. ;
  343. ; IF BUFFER FULL, WRITE CONTENTS TO DISK,
  344. ; PUT CHAR FROM C IN BUFFER.
  345. ;
  346. ; ENTER WITH FCB ADDR IN DE, BUFFER PTR IN HL,
  347. ; AND CHAR IN C.
  348. ; RETURN WITH BUFFER PTR IN HL,SAVE BC,SET CARRY AFTER
  349. ; BUFFER REFILL.
  350. ;
  351. BUFOUT:    MOV    A,E    ; COMPUTE END OF BUFFER
  352.     ADI    164
  353.     CMP    L    ; FULL?
  354.     STC        ; CLEAR CARRY
  355.     CMC
  356.     JRNZ    BUFOU1    ; NOT FULL, STORE CHAR
  357.     PUSH    B    ; FULL, SAVE CHAR
  358.     MVI    C,WRITE
  359.     CALL    REFILL
  360.     CPI    0    ; GOOD WRITE?
  361.     MVI C,3        ; ERROR 3
  362.     CNZ    ERROR
  363.     POP B
  364.     STC        ; MARK REFILL
  365. BUFOU1:    MOV    M,C    ; STORE CHAR IN BUFFER
  366.     INX    H    ; MOVE PTR TO NEXT CHAR
  367.     RET
  368. ;
  369. ;
  370. ; BUFFER I/O ROUTINE
  371. ;
  372. ; ENTER WITH CP/M READ OR WRITE CODE
  373. ; IN BC AND FCB ADDRESS IN DE.
  374. ; RETURN WITH INITIALIZED BUFFER
  375. ; POINTER IN HL.
  376. ;
  377. REFILL:    PUSH D
  378.     PUSH B
  379.     BIT 0,C    ; IN OR OUT DRIVE
  380.     JRZ SEL
  381.     LDED ODSK    ; OUTPUT DRIVE
  382.     JMPR CONT
  383. SEL:    LDED SDSK    ; SOURCE DRIVE
  384. CONT:    MVI C,SDISK    ; LOG IN DRIVE
  385.     CALL BDOS
  386.     POP B
  387.     POP D
  388.     LXI    H,36    ; CALC START OF BUFFER
  389.     DAD    D
  390.     PUSH    H    ; SAVE START OF BUFFER
  391.     PUSH    D    ; SAVE FCB ADDRESS
  392.     XCHG
  393.     PUSH    B    ; SAVE CP/M CODE
  394.     MVI    C,SDMA
  395.     CALL    BDOS    ; SET DMA ADDRESS
  396.     POP    B    ; GET CP/M CODE
  397.     POP    D    ; GET FCB ADDRESS
  398.     CALL    BDOS    ; READ OR WRITE BUFFER
  399.     POP    H    ; SET PTR TO START OF BUFFER
  400.     RET
  401. ;
  402. ;
  403. ; CREATE AND OPEN A FILE WITH SAME NAME AS DEFAULT FCB
  404. ;
  405. ; ENTER WITH ADDRESS OF FCB IN DE, AND
  406. ; ADDRESS OF FILETYPE STRING IN BC.
  407. ;
  408. MAKEF:    LXI    H,TFCB
  409.     PUSH    D
  410.     PUSH    B
  411.     LXI    B,9
  412.     LDIR        ; MOVE FILENAME
  413.     POP    H
  414.     LXI    B,3
  415.     LDIR        ; MOVE FILETYPE
  416.     MVI    C,FDELT
  417.     POP    D
  418.     PUSH    D
  419.     CALL    BDOS    ; DELETE FILE
  420.     MVI    C,CREATE
  421.     POP    D
  422.     PUSH    D
  423.     CALL    BDOS    ; CREATE FILE
  424.     MVI C,4        ; ERROR 4
  425.     CPI    0FFH
  426.     CZ    ERROR
  427.     MVI    C,OPEN
  428.     POP    D
  429.     CALL    BDOS    ; OPEN FILE
  430.     MVI C,5        ; ERROR 5
  431.     CPI    0FFH
  432.     CZ    ERROR
  433.     RET
  434. ;
  435. ; MEMORY SIZE TEST
  436. ;
  437. MEMSIM:    PUSH    H
  438.     LHLD    BDOS+1
  439.     DCX H
  440.     MOV    A,L
  441.     MOV    B,H
  442.     POP    H
  443.     RET
  444. ;
  445. ; CONSOLE STATUS CHECK
  446.  
  447. CSTSIM:    LDA    CSTSF    ; CHECK CONSOLE STATUS
  448.     RET
  449.  
  450. ; IOCHECK
  451. ;
  452. IOSIM:    MVI    A,0A8H
  453.     RET
  454. ;
  455. ; ERROR HANDLER
  456. ;
  457. ERROR:    PUSH B        ; SAVE ERROR INDEX
  458.     PUSH    PSW
  459.     LXI    D,ERMES1
  460.     CALL PRTMES
  461.     POP PSW
  462.     POP B
  463.     POP H        ; CALLER'S ADDRESS
  464.     PUSH B
  465.     ORA A        ; CLEAR CARRY
  466.     LXI D,3        ; ADJUST ADDRESS
  467.     DSBC D
  468.     PUSH PSW
  469.     CALL OUTHHL    ; PRINT IT
  470.     LXI D,ERMES2
  471.     CALL PRTMES
  472.     POP PSW
  473.     CALL OUT2H    ; PRINT ERR STATUS
  474.     LXI D,CRLF
  475.     CALL PRTMES
  476.     POP D        ; GET ERROR INDEX
  477.     MVI D,0        ; CLEAR HIGH ORDER BYTE
  478.     SLAR E        ; MULTIPLY BY 2
  479.     LXI H,MESLST    ; POINT TO MES ADDR
  480.     DAD D
  481.     MOV E,M        ; LOAD IT IN DE
  482.     INX H
  483.     MOV D,M
  484.     CALL PRTMES    ; PRINT IT
  485.     LXI D,CRLF
  486.     CALL PRTMES
  487.     JMP BOOT
  488. ;
  489. ILGOP:    LXI D,ILOPT    ; EXIT FOR ILLEGAL
  490.     CALL PRTMES    ; OPTIONS
  491.     JMP BOOT
  492. ;
  493. PRTMES:    MVI C,WCONB    ; PRINT A LINE
  494.     CALL BDOS
  495.     RET
  496. ;
  497. ;
  498. ERMES1:    .ASCII [CR][LF]'MACROASSEMBLER DISK ERROR '
  499.     .ASCII 'AT ADDRESS $'
  500. ERMES2:    .ASCII [CR][LF]'CP/M RETURNED A STATUS OF $'
  501. ILOPT:    .ASCII [CR][LF]'ILLEGAL OPTION COMBINATION'
  502. CRLF:    .ASCII [CR][LF]'$'
  503. ;
  504. MESLST:    .WORD EMES1
  505.     .WORD EMES2
  506.     .WORD EMES3
  507.     .WORD EMES4
  508.     .WORD EMES5
  509.     .WORD EMES6
  510. ;
  511. EMES1:    .ASCII 'SOURCE FILE NOT FOUND$'
  512. EMES2:    .ASCII 'CAN NOT OPEN SOURCE FILE$'
  513. EMES3:    .ASCII '** BAD READ **$'
  514. EMES4:    .ASCII '** BAD WRITE **$'
  515. EMES5:    .ASCII 'CAN NOT CREATE OUTPUT FILE$'
  516. EMES6:    .ASCII 'CAN NOT OPEN OUTPUT FILE$'
  517. ;
  518. ;
  519. ;    OUT2H    PRINT 2 HEX DIGITS FROM A
  520. ;    OUTHHL    PRINT HL
  521.  
  522. OUTHHL:    MOV    A,H    ; PRINT HL
  523.     CALL    OUT2H
  524.     MOV    A,L
  525.  
  526. OUT2H:    PUSH    PSW
  527.     CALL    OUTHL
  528.     POP    PSW
  529.     JMPR    OUTHR
  530.  
  531. OUTHL:    RRC
  532.     RRC
  533.     RRC
  534.     RRC
  535. OUTHR:    ANI    0FH
  536.     ADI    '0'
  537.     CPI    '9'+1
  538.     JRC    OUTHR1
  539.     ADI    '@'-'9'
  540. OUTHR1:    JMPR    OUTCH
  541.  
  542. CO:    MOV    A,C    ; CHECK FOR PASS REQUEST
  543.     CPI    '='
  544.     JRNZ    CO1
  545.     MVI    A,0FFH    ; SET CONSOLE STATUS
  546.     STA    CSTSF
  547. CO1:    MOV    A,C    ; SIMULATE TDL CO
  548. OUTCH:    PUSH    PSW    ; CONSOLE OUTPUT
  549.     PUSH    B
  550.     PUSH    D
  551.     PUSH    H
  552.     MVI    C,WCON
  553.     MOV    E,A
  554.     CALL    BDOS
  555.     POP    H
  556.     POP    D
  557.     POP    B
  558.     POP    PSW
  559.     RET
  560.  
  561.  
  562. ; NEW MACROASSEMBLER I/O VECTOR TABLE
  563. ; TO OVERWRITE PRESENT ASSEMBLER VECTOR TABLE
  564.  
  565.     .LOC    0800H
  566.  
  567. MACRX:    JMP    TDL
  568.     JMP    TDLR
  569.     JMP    CISIM
  570.     JMP    RISIM
  571.     JMP    CO
  572.     JMP    POSIM
  573.     JMP    LOSIM
  574.     JMP    CSTSIM
  575.     JMP    IOSIM
  576.     JMP    MEMSIM
  577.     JMP    TRPSIM
  578.  
  579.     .END
  580.