home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG036.ARK / MBMBOT.ASC < prev    next >
Text File  |  1984-04-29  |  15KB  |  440 lines

  1. .TITLE "Initialization, bootstrap relocation,"
  2. .SBTTL "and multi-bank memory management program."
  3. .REMARK `
  4. Memory bank management program designed for
  5. a multi-bank memory system equipped with an
  6. IMSAI VIOC video board and an IMSAI MIO I/O
  7. board specially wired to turn memory on the
  8. VIOC board on and off. This program initia-
  9. lizes the computer  and  moves  a bootstrap
  10. routine from a Cromemco 16-KPR ROM board in
  11. Bank 0  to an Industrial Micro Systems  32K
  12. RAM board in Bank 1.  This bootstrap, then,
  13. boots in the CPM disk operating system from
  14. disk drive 0 to Bank 1 RAM memory.  Console
  15. Status, STATUS (CONST); Console Input, KYBD
  16. (CONIN);  Console Output, VIOC (CONOT)  and
  17. Printer  Output/Control,  PRINT (LIST) sub-
  18. routines called by CPM's  BIOS are also in-
  19. cluded in this program.  A  RUBOUT  routine
  20. handles onscreen character deletion for the
  21. CPM and  BASIC language environments (back-
  22. slashes generated by most BASICs to set off
  23. deleted blocks are supressed) and an ESCAPE
  24. routine provides  large  letter (ESC L) and
  25. inverse video (ESC V) switches for the VIOC
  26. vidoe board.
  27.  
  28. COMPILED BY LEONARD GOGOL ON 8-13-1979.
  29. (Use TDL Z80 Relocating/Linking Assembler.)`
  30.  
  31.  
  32. .IDENT  MBMBOT
  33. .INTERN .MAIN.
  34. .PREL
  35. .LINK
  36. .MAIN.  = 8000H
  37.  
  38.  
  39. ;
  40. ; PROGRAM DATA TABLES.
  41. ;
  42.  
  43.         ;I/O EQUATES.
  44.  
  45. ACBIT   = 8     ;ACK CHARACTER READY BIT.
  46. CDATA   = 2     ;CONSOLE DATA PORT.
  47. CKBR    = 2     ;KEYBOARD READY BIT.
  48. CSTAT   = 3     ;CONSOLE STATUS PORT.
  49. LDATA   = 1     ;PRINTER DATA PORT.
  50. LRBIT   = 1     ;PRINTER READY BIT.
  51. LSTAT   = 3     ;PRINTER STATUS PORT.
  52. CHARC   = 7     ;PRINTER CHARACTER COUNT.
  53. BUFFC   = 30    ;PRINTER BUFFER COUNT.
  54. FRPN    = 0FFH  ;FRONT PANEL I/O PORT.
  55. DCOM    = 0F8H  ;TARBELL
  56. DDATA   = 0FBH  ;DISK
  57. DSTAT   = 0F8H  ;CONTROLLER
  58. SECT    = 0FAH  ;PORT
  59. WAIT    = 0FCH  ;ASSIGNMENTS.
  60.  
  61.  
  62.         ;IOFLAG BUFFER, FLAGS.
  63.  
  64. RUBFL   = 7     ;RUBOUT FLAG.
  65. BSLFL   = 6     ;BACKSLASH FLAG.
  66. BOLFL   = 5     ;BEGINNING OF LINE FLAG.
  67. ESCFL   = 4     ;ESCAPE FLAG.
  68.  
  69.  
  70.         ;RESERVED MEMORY AREA.
  71.  
  72. STACK   = 0E3FFH;STACK LOCATION IN BANK 0.
  73. BEGSCR  = 0E000H;SCRATCH AND STACK
  74. ENDSCR  = 0EFFFH;SPACE IN BANK 0.
  75. SPSAVE  = 0F63CH;SP STORAGE IN BANK 1.
  76.  
  77.  
  78.         ;DEFINED ADDRESSES.
  79.  
  80. CLEAR   = 0F800H;VIOC INITIALIZATION ROUTINE.
  81. VIOC    = 0F803H;VIOC CHAR. OUTPUT ROUTINE.
  82.  
  83.  
  84.         ;SELECTIVE BANK-ON SWITCHES.
  85.  
  86. B0A     = 4     ;0000-3FFF ROM BANK 0.
  87. B0B     = 2     ;4000-7FFF ROM BANK 0.
  88. B0C     = 1     ;8000-BFFF ROM BANK 0.
  89. B0D     = 8     ;C000-DFFF ROM BANK 0.
  90. B0E     = 16    ;E000-EFFF RAM BANK 0.
  91. B0FON   = 0     ;F000-FFFF VIOC BANK 0.
  92.  
  93. BXA     = 1     ;0000-0FFF RAM BANK 1A,
  94.                 ;8000-8FFF RAM BANK 1B.
  95. BXB     = 2     ;1000-1FFF RAM BANK 1A,
  96.                 ;9000-9FFF RAM BANK 1B.
  97. BXC     = 4     ;2000-2FFF RAM BANK 1A,
  98.                 ;A000-AFFF RAM BANK 1B.
  99. BXD     = 8     ;3000-3FFF RAM BANK 1A,
  100.                 ;B000-BFFF RAM BANK 1B.
  101. BXE     = 16    ;4000-4FFF RAM BANK 1A,
  102.                 ;C000-CFFF RAM BANK 1B.
  103. BXF     = 32    ;5000-5FFF RAM BANK 1A,
  104.                 ;D000-DFFF RAM BANK 1B.
  105. BXG     = 64    ;6000-6FFF RAM BANK 1A,
  106.                 ;E000-EFFF RAM BANK 1B.
  107. BXH     = 128   ;7000-7FFF RAM BANK 1A,
  108.                 ;F000-FFFF RAM BANK 1B.
  109.  
  110. BXI     = 3     ;0000-1FFF RAM BANK 1A,
  111.                 ;8000-9FFF RAM BANK 1B.
  112. BXJ     = 0CH   ;2000-3FFF RAM BANK 1A,
  113.                 ;A000-BFFF RAM BANK 1B.
  114. BXK     = 30H   ;4000-5FFF RAM BANK 1A,
  115.                 ;C000-DFFF RAM BANK 1B.
  116. BXL     = 0C0H  ;6000-7FFF RAM BANK 1A,
  117.                 ;E000-FFFF RAM BANK 1B.
  118.  
  119. BXM     = 0FH   ;0000-3FFF RAM BANK 1A,
  120.                 ;8000-BFFF RAM BANK 1B.
  121. BXN     = 0F0H  ;4000-7FFF RAM BANK 1A,
  122.                 ;C000-FFFF RAM BANK 1B.
  123.  
  124. BXO     = 0FFH  ;0000-7FFF RAM BANK 1A,
  125.                 ;8000-FFFF RAM BANK 1B.
  126.  
  127.  
  128.         ;BANK-OFF SWITCHES.
  129.  
  130. BKOFF   = 0     ;ALL BANKS EXCEPT VIOC.
  131. B0FOFF  = 1     ;F000-FFFF VIOC OFF.
  132.  
  133.  
  134.         ;BANK SELECT PORTS.
  135.  
  136. B0PA    = 40H   ;BANK 0A (0000-EFFF).
  137. B0PB    = 2     ;BANK 0B (F000-FFFF VIOC).
  138. B1PA    = 41H   ;BANK 1A (0000-7FFF).
  139. B1PB    = 51H   ;BANK 1B (8000-FFFF).
  140. B2PA    = 42H   ;BANK 2A (0000-7FFF).
  141. B2PB    = 52H   ;BANK 2B (8000-7FFF).
  142.  
  143.  
  144. ;
  145. ; JUMP TABLE.
  146. ;
  147.  
  148.         .LOC .MAIN.
  149.  
  150.         JMP  START      ;START OF MBMBOT.
  151.         JMP  STATUS     ;STATUS ROUTINE.
  152.         JMP  KYBD       ;KEYBORD. INPUT ROUTN.
  153.         JMP  VIDEO      ;CONSOLE OUTPUT ROUTN.
  154.         JMP  PRINT      ;PRINTER OUTPUT ROUTN.
  155.  
  156.  
  157. ;
  158. ;INITIALIZATION AND BOOTSTRAP ROUTINES.
  159. ;
  160.  
  161.         .LOC .MAIN.+30H
  162.  
  163.         ;INITIALIZE TU-ART.
  164. START:  MVI  A,01       ;RESET TU-ART
  165.         OUT  62H
  166.         OUT  72H
  167.         MVI  A,00       ;TURN OFF INTRRUPTS.
  168.         OUT  63H
  169.         OUT  73H
  170.         MVI  A,0C0H     ;SET BAUD RATE TO 9600.
  171.         OUT  60H
  172.         OUT  70H
  173.         ;CLEAR EC00-EFFF IN BANK 0 SCRATCH RAM.
  174.         LXI  B,ENDSCR-BEGSCR ;# BYTES TO CLEAR.
  175.         LXI  H,BEGSCR   ;STARTING ADDRESS.
  176.         LXI  D,BEGSCR+1 ;+1.
  177.         XRA  A          ;CLEAR WITH ZEROS.
  178.         MOV  M,A        ;CLEAR FIRST BYTE.
  179.         LDIR            ;DO THE REST!
  180.         ;INIT. STACK, CALL VIOC INIT. ROUTINE
  181.         ;& SET UP VIOC FOR UPPER & LOWER CASE.
  182.         LXI  SP,STACK   ;SET STACK POINTER.
  183.         CALL CLEAR      ;VIOC INIT. ROUTINE.
  184.         MVI  A,1BH      ;SET UP
  185.         CALL VIOC       ;VIOC
  186.         MVI  A,55H      ;FOR UPPER AND
  187.         CALL VIOC       ;LOWER CASE.
  188.         ;MANAGE MEMORY.
  189.         MVI  A,B0C      ;TURN OFF
  190.         OUT  B0PA       ;RAM AT SCRATCH.
  191.         ;MOVE BOOT.
  192.         LXI  B,EBOOT-SBOOT ;#OF BYTES TO MOVE.
  193.         LXI  H,RBOOT    ;STARTING AT RBOOT.
  194.         LXI  D,SBOOT    ;TO SBOOT.
  195.         LDIR            ;DO IT!
  196.         JMP  SBOOT      ;RUN BOOTSTRAP.
  197. RBOOT:
  198.  
  199.         .LOC 3000H      ;DESTINATION OF BOOT.
  200.  
  201.         ;CPM BOOTSTRAP LOADER.
  202.         ;MANAGE MEMORY.
  203. SBOOT:  MVI  A,BKOFF    ;TURN OFF ROM
  204.         OUT  B0PA       ;AT 8000-BFFF.
  205.         MVI  A,B0FOFF   ;TURN OFF
  206.         OUT  B0PB       ;VIOC.
  207.         MVI  A,BXO      ;TURN ON RAM
  208.         OUT  B1PB       ;AT 8000-FFFF.
  209.         ;BOOT CPM.
  210.         IN   WAIT       ;WAIT FOR HOME.
  211.         XRA  A          ;SET
  212.         MOV  L,A        ;L=0,
  213.         MOV  H,A        ;H=0,
  214.         INR  A          ;A=1,
  215.         OUT  SECT       ;SECTOR=1.
  216.         MVI  A,8CH      ;SEND COMMAND TO
  217.         OUT  DCOM       ;READ SECTOR TO 1771.
  218. RLOOP:  IN   WAIT       ;WAIT FOR DRQ OR INTRQ.
  219.         ORA  A          ;SET FLAGS.
  220.         JP   RDONE      ;DONE IF INTRQ.
  221.         IN   DDATA      ;READ DATA.
  222.         MOV  M,A        ;PUT INTO MEMORY.
  223.         INX  H          ;INCREMENT MEM POINTER.
  224.         JMP  RLOOP      ;READ ANOTHER BYTE.
  225. RDONE:  IN   DSTAT      ;READ DISK STATUS.
  226.         ORA  A          ;SET FLAGS.
  227.         JZ   0          ;GO TO CPM LOADER IF 0.
  228.         HLT             ;HALT IF ERROR.
  229. EBOOT:
  230.  
  231.  
  232. ;
  233. ;CP/M BIOS SUBROUTINES CALLED FROM BANK 1.
  234. ;
  235.  
  236.         .LOC RBOOT+EBOOT-3000H ;PLACE IN ROM.
  237.  
  238.         ;STATUS TEST ROUTINE.
  239. STATUS: IN   CSTAT      ;READ CONSOLE STATUS.
  240.         ANI  CKBR       ;LOOK AT KB READY BIT.
  241.         MVI  A,0        ;SET A=0 FOR RETURN.
  242.         RZ              ;NOT READY WHEN LOW.
  243.         IN   LSTAT      ;READ NEC ACK STATUS.
  244.         ANI  ACBIT      ;LOOK AT ACK READY BIT.
  245.         MVI  A,0        ;SET A=0 FOR RETURN.
  246.         RNZ             ;NOT READY WHEN HIGH.
  247.         CMA             ;IF READY, A=0FFH.
  248.         RET             ;RETURN FROM STAT. TST.
  249.  
  250.         ;KEYBOARD INPUT ROUTINE.
  251.         ;MANAGE STACK POINTERS AND MEMORY.
  252. KYBD:   CALL IN         ;INBOUND HOUSEKEEPING.
  253.         ;LOOP UNTIL INPUT FROM KEYBD. OR PRNTR.
  254.         ;MANAGE RUB AND BEG. OF LINE FLAGS.
  255.         ;IVERT VIDEO IF ESC V, SET VIOC TO
  256.         ;LARGE LETTERS IF ESC L.
  257. KYBD1:  IN   CSTAT      ;READ CONSOLE STATUS.
  258.         ANI  CKBR       ;IF NOT READY,
  259.         JZ   NEC        ;TRY NEC.
  260.         IN   CDATA      ;READ A CHARACTER.
  261.         ANI  7FH        ;MAKE MOST SIG. BIT=0.
  262.         PUSH H          ;SAVE H&L REGISTERS.
  263.         LXI  H,IOFLAG   ;POINT TO IOFLAG.
  264.         CPI  1BH        ;IS IT AN ESCAPE?
  265.         JZ   KYBD4      ;IF SO,-->KB4.
  266.         BIT  ESCFL,M    ;TEST IF ESC FLAG SET.
  267.         JZ   KYBD5      ;IF NOT,-->KB5. IF SO,
  268.         ANI  0DFH       ;LOWER TO UPPER CASE.
  269.         CPI  56H        ;IS IT A 'V'?
  270.         JNZ  KYBD2      ;IF NOT,-->KB2.
  271.         MVI  A,1BH      ;IF SO, LOAD ESC.
  272.         CALL VIOC       ;SEND IT OUT.
  273.         MVI  A,56H      ;LOAD 'V'.
  274.         CALL VIOC       ;SEND IT OUT.
  275.         MVI  A,0DH      ;LOAD CR.
  276.         JMP  KYBD3      ;GO ON.
  277. KYBD2:  CPI  4CH        ;IS IT A 'L'?
  278.         JNZ  KYBD3      ;IF NOT,-->KB3.
  279.         MVI  A,1BH      ;IF SO, LOAD ESC.
  280.         CALL VIOC       ;SEND IT OUT.
  281.         MVI  A,4CH      ;LOAD 'L'.
  282.         CALL VIOC       ;SEND IT OUT.
  283.         MVI  A,1BH      ;LOAD ESC.
  284.         CALL VIOC       ;SEND IT OUT.
  285.         MVI  A,43H      ;LOAD 'C'.
  286.         CALL VIOC       ;SEND IT OUT.
  287.         MVI  A,0DH      ;LOAD CR.
  288. KYBD3:  RES  ESCFL,M    ;RESET ESC FLAG.
  289.         JMP  KYBD5      ;GO ON.
  290. KYBD4:  SET  ESCFL,M    ;SET ESC FLAG.
  291. KYBD5:  CPI  7FH        ;IS IT A RUB?
  292.         JNZ  KYBD7      ;RETURN IF NOT.
  293.         BIT  BOLFL,M    ;TEST BOL FLAG.
  294.         JNZ  KYBD6      ;IF SET,-->KB6.
  295.         SET  BOLFL,M    ;IF NOT, SET BOL
  296.         SET  RUBFL,M    ;AND RUB FLAG.
  297.         JMP  KYBD7      ;RETURN.
  298. KYBD6:  RES  RUBFL,M    ;RESET RUB FLAG.
  299. KYBD7:  POP  H          ;RESTORE H&L REGS.
  300.         JMP  RETURN     ;RETURN FROM TYPE.
  301. NEC:    IN   LSTAT      ;READ NEC ACK STATUS.
  302.         ANI  ACBIT      ;IF ACK NOT READY,
  303.         JZ   KYBD1      ;TRY KYBD.
  304.         IN   LDATA      ;INPUT NEC.
  305.         ANI  7FH        ;MAKE MOST SIG. BIT=0.
  306.         ;SAVE CHARACTER.  MANAGE MEMORY AND
  307.         ;STACK POINTER.  RETURN WITH
  308.         ;CHARACTER IN A REGISTER.
  309. RETURN: MOV  C,A        ;SAVE CHAR. IN C REG.
  310.         CALL OUT        ;OUTBOUND HOUSEKEEPING.
  311.         MOV  A,C        ;RESTORE CHAR. TO A.
  312.         RET             ;RETURN TO RAM.
  313.  
  314.         ;VIDEO OUTPUT ROUTINE.
  315.         ;MANAGE STACK POINTERS AND MEMORY.
  316. VIDEO:  CALL IN         ;INBOUND HOUSEKEEPING.
  317.         ;OUTPUT CHARACTER.
  318.         CALL BACKSP     ;CALL BKSP. & VIDEO.
  319.         CALL FROPA      ;ECHO AT PANEL.
  320.         ;MANAGE MEMORY AND STACK POINTER.
  321.         CALL OUT        ;OUTBOUND HOUSEKEEPING.
  322.         RET             ;RETURN TO BANK 1 RAM.
  323.         ;BACKSPACE AND VIDEO OUTPUT ROUTINES.
  324. BACKSP: PUSH H          ;SAVE H&L REGS.
  325.         LXI  H,IOFLAG   ;POINT TO FLAG BUFFER.
  326.         BIT  RUBFL,M    ;TEST RUB FLAG.
  327.         MOV  A,C        ;GET CHARACTER.
  328.         JNZ  BKSP1      ;IF RUB FLG SET-->BS1.
  329.         BIT  BSLFL,M    ;IF NOT, TEST BSL FLAG.
  330.         JZ   BKSP4      ;NOT SET, OUTPUT CHAR.
  331.         RES  BSLFL,M    ;IF SET, RESET BSL
  332.         RES  BOLFL,M    ;AND BOL FLAGS.
  333.         POP  H          ;RESTORE H&L REGS.
  334.         RET             ;RETURN FROM BACKSP.
  335. BKSP1:  CPI  5CH        ;IS CHARACTER A BSL?
  336.         JNZ  BKSP2      ;IF NOT, -->BS2.
  337.         SET  BSLFL,M    ;IF SO, SET BSL FLAG
  338.         RES  BOLFL,M    ;AND RESET BOL FLAG.
  339.         POP  H          ;RESTORE H&L REGS.
  340.         RET             ;RETURN FROM BACKSP.
  341. BKSP2:  CPI  7FH        ;IS CHARACTER A RUB?
  342.         JNZ  BKSP3      ;IF NOT, -->BS3.
  343.         POP  H          ;IF YES, DROP IT, RST
  344.         RET             ;H&L REGISTERS AND RET.
  345. BKSP3:  MVI  A,8        ;BACKSPACE,
  346.         CALL VIOC
  347.         MVI  A,20H      ;SPACE
  348.         CALL VIOC
  349.         MVI  A,8        ;AND BACKSPACE AGAIN.
  350. BKSP4:  CALL VIOC       ;OUTPUT CHARACTER.
  351.         RES  RUBFL,M    ;RESET RUB
  352.         RES  BOLFL,M    ;AND BOL FLAGS.
  353.         POP  H          ;RESTORE H&L REGS.
  354.         RET             ;RETURN FROM BACKSP.
  355.         ;FRONT PANEL PROGRAMMED OUTPUT LIGHTS
  356.         ;DRIVER ROUTINE.
  357. FROPA:  CMA             ;INVERT BYTE.
  358.         OUT  FRPN       ;ECHO AT FRONT PANEL.
  359.         RET             ;RETURN FROM FROPA.
  360.  
  361.         ;PRINTER OUTPUT ROUTINE.
  362.         ;MANAGE STACK POINTERS AND MEMORY.
  363. PRINT:  CALL IN         ;INBOUND HOUSEKEEPING.
  364.         ;NEC SPINWRITER 1200 BAUD PRINT PROG.
  365.         IN   LSTAT      ;READ PRINTER STATUS.
  366.         ANI  LRBIT      ;LOOK AT READY BIT.
  367.         JZ   PRINT      ;LOOP TILL HIGH.
  368.         PUSH H          ;SAVE H&L.
  369.         LDA  CCOUNT     ;GET CHARACTER COUNT.
  370.         CPI  CHARC      ;7 CHARACTERS YET?
  371.         JC   PRINT2     ;NOPE--PRINT ONE.
  372.         MVI  A,03       ;CTL. C TO A REGISTER,
  373.         OUT  LDATA      ;SEND IT TO PRINTER.
  374.         XRA  A          ;ZERO IN A REGISTER AND
  375.         STA  CCOUNT     ;IN CHARACTER COUNTER.
  376.         LXI  H,BCOUNT   ;LOCATION OF BUFFER.
  377.         INR  M          ;INCREMENT IT!
  378. PRINT1: LDA  BCOUNT     ;GET COUNT FROM BUFFER.
  379.         CPI  BUFFC      ;IS IT 30 YET?
  380.         JC   PRINT2     ;IF NOT, THEN PRINT.
  381.         IN   LSTAT      ;READ PRINTER ACK STAT.
  382.         ANI  ACBIT      ;LOOK AT ACK READY BIT.
  383.         JZ   PRINT1     ;LOOP TILL HIGH.
  384.         IN   LDATA      ;READ INPUT.
  385.         ANI  7FH        ;MASK FOR ASCII.
  386.         CPI  06         ;IS IT A CTL. F?
  387.         JC   PRINT1     ;IF NOT, TRY AGAIN.
  388.         DCR  M          ;IF YES, DECR. BCOUNT.
  389. PRINT2: LDA  CCOUNT     ;GET CHARACTER COUNT.
  390.         INR  A          ;INCREMENT IT AND
  391.         STA  CCOUNT     ;PUT IT BACK.
  392.         MOV  A,C        ;GET DATA.
  393.         CPI  03         ;IS IT A CTL.C?
  394.         JC   PRINT3     ;RETURN IF IT IS.
  395.         OUT  LDATA      ;OTHERWISE, PRINT IT!!!
  396.         CALL FROPA      ;DISPLAY AT PANEL.
  397.         POP  H          ;RESTORE H&L.
  398.         ;MANAGE MEMORY AND STACK POINTER.
  399. PRINT3: CALL OUT        ;OUTBOUND HOUSEKEEPING.
  400.         RET             ;RETURN TO BANK 1 RAM.
  401.  
  402.  
  403. ;
  404. ; ENTRY AND EXIT HOUSEKEEPING ROUTINES.
  405. ;
  406.  
  407. IN:     POP  H          ;RET. ADDRESS IN H&L.
  408.         SSPD SPSAVE     ;SAVE BANK 1 SP.
  409.         MVI  A,BKOFF    ;TURN OFF RAM AT
  410.         OUT  B1PB       ;E000-FFFF IN BANK 1.
  411.         MVI  A,B0C+B0D+B0E ;TURN ON BANK 0
  412.         OUT  B0PA       ;SCRATCH RAM.
  413.         LXI  SP,STACK   ;INIT. BANK 0 SP.
  414.         MVI  A,B0FON    ;TURN ON.
  415.         OUT  B0PB       ;VIOC.
  416.         PUSH H          ;RET. ADDRESS ON STACK.
  417.         RET             ;RETURN TO CALLER.
  418. OUT:    POP  H          ;RET. ADDRESS IN H&L.
  419.         MVI  A,B0FOFF   ;TURN OFF
  420.         OUT  B0PB       ;VIOC
  421.         MVI  A,B0C+B0D  ;AND BANK 0
  422.         OUT  B0PA       ;SCRATCH RAM.
  423.         MVI  A,BXL      ;TURN ON RAM AT
  424.         OUT  B1PB       ;E000-FFFF IN BANK 1.
  425.         LSPD SPSAVE     ;RESTORE BANK 1 SP.
  426.         PUSH H          ;RET. ADDRESS ON STACK.
  427.         RET             ;RETURN TO CALLER.
  428.  
  429.  
  430. ;
  431. ; RESERVED AREA IN BANK 0 SCRATCH RAM.
  432. ;
  433.  
  434.         .LOC 0EFFDH
  435.  
  436. IOFLAG: .BLKB   1       ;RUB, BSL, BOL, ESC FL.
  437. BCOUNT: .BLKB   1       ;CHARACTER COUNTERS FOR
  438. CCOUNT: .BLKB   1       ;1200 BAUD I/O DRIVER.
  439.         .END    .MAIN.
  440.