home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
mbug
/
mbug167.arc
/
PROWRT12.LBR
/
PROWRT12.AQM
/
PROWRT12.ASM
Wrap
Assembly Source File
|
1979-12-31
|
22KB
|
863 lines
0001 ; PROWRITE.ASM * Program to set the C.Itoh 8510 printer to various options
0002 ; version 1.2 *including use of the EVFU (Electronic Vertical Format Unit)
0003 ; * This revision uses DIRIO and rationalised error-checking.
0004 ; * Also includes fix to bug in GetLine with sbi/sui .
0005 ; (c) Tahrone Holdings Pty Ltd, 1985 -- Peter G. Martin 16/14 Royston St,
0006 ; King's Cross, 2010
0007 ; N.S.W. AUSTRALIA
0008 ESC EQU 1BH
0009 RS EQU 1EH
0010 GS EQU 1DH
0011 DC1 EQU 11H
0012 FormFeed EQU 0CH
0013 Nline EQU 01000000B
0014 TOF EQU 01000001B ; 'A' = TOP OF FORM CODE (send Nline after it)
0015 BOF EQU 01000011B ; 'C' = B.O.F. Code (send Nline after it)
0016 TABline EQU 01000010B ; 'B' = Vertical TAB set in Channel 2 (bit 1)
0017 CR EQU 0dh
0018 LF EQU 0ah
0019 TAB EQU 09H
0020 BS EQU 08H
0021 BELL EQU 07H
0022 Compressed EQU 'Q'
0023 Elite EQU 'E'
0024 Proportn EQU 'P'
0025 Pica EQU 'N'
0026 LongOn EQU 0EH
0027 LongOff EQU 0FH
0028 WarmBoot EQU 0000H
0029 VT EQU 0BH ; vertical tab command
0030
0031 org 0100h
0032
0033 push h
0034 call Start
0035
0036 ; /************* SCREEN MESSAGE STORAGE ***************/
0037 ClearScreen: db ESC,'*','$' ; <== SET TO OWN TERMINAL REQUIREMENTS
0038 Menu: db TAB,TAB,'INITIALISATION OF C.ITOH 8510 -- OPTIONS',CR,LF,LF
0039 db TAB,'1. Set Paper Feed and vertical tabs (page length)',CR,LF
0040 db TAB,'2. Set Character Pitch',CR,LF
0041 db TAB,'3. Set Line Feed Size ',CR,LF
0042 db TAB,'4. Set Bold Printing On/Off',CR,LF
0043 db TAB,'5. Set Left Margin Size',CR,LF
0044 db TAB,'6. Set Elongated, Graphics or Greek Chars etc',CR,LF
0045 db TAB,'7. Set Unidirectional, Bidirectional Printing',CR,LF
0046 db TAB,'8. Run a Printer Test of existing options',CR,LF
0047 db TAB,'9. EXIT to CP/M',CR,LF,LF,TAB,'ENTER Choice : $'
0048
0049 MsgPageSize: db CR,LF,TAB,'Enter No of lines in full page (03 to 72) : $'
0050 MsgCharPitch: db CR,LF,TAB,'Enter 1. Pica, 2. Elite, 3. Compressed, 4. '
0051 db 'Proportional : $'
0052 MsgGetLF: db CR,LF,TAB,'Enter A for 1/6in, B for 1/8in, or '
0053 db '2-digit no. for nn/144in : $'
0054 MsgBold: db CR,LF,TAB,'Enter 1. Bold or 2. No Bold : $'
0055 MsgMargin db CR,LF,TAB,'Enter 3 digits for column no. '
0056 db 'of left margin [RANGE 000 -- 134] : $'
0057 MsgLong: db CR,LF,TAB,TAB
0058 db 'NOTE: 7-BIT DIP SWITCH (2-6) MUST BE CLOSED',CR,LF
0059 db TAB,'Enter 1. ASCII , 2. ASCII Elongated, 3. Graphics, '
0060 db '4. Greek chars : $'
0061 MsgDirect: db CR,LF,TAB,'Enter 1. Bidirectional or 2. Unidirectional : $'
0062 TABMsg db VT,'Tab set here',CR,LF,0 ;
0063 ; /**************** DATA STORAGE AREA **********************/
0064 ;
0065 EVFUData: db GS,TOF,Nline
0066 REPT 70
0067 db Nline
0068 db Nline
0069 ENDM
0070 BOFData: db BOF,Nline
0071 db TOF,Nline
0072 db RS
0073 db CR,LF,0
0074
0075 CharPitch: db ESC,0,0
0076 LinePitch db ESC,0,0,0,0
0077 BoldString db ESC,0,0
0078 Margin db ESC,'L',0,0,0,0
0079 Long db ESC,0,0,0
0080 Direct db ESC,0,0
0081 Lines db 0
0082 VTABCount db 12
0083 Alflag db 0
0084
0085 Start:
0086 call SendCRLF ; send something. sometimes 1st char may be
0087 ; eaten by computer/printer?
0088 Main:
0089
0090 lxi d,Clearscreen
0091 call TypeString
0092 lxi d,Menu
0093 call TypeString
0094
0095 Main1:
0096 xra a
0097 sta Alflag
0098 call KeyIn
0099 cpi 3
0100 jz WarmBoot
0101 cpi '1'
0102 jz SetEVFU
0103 cpi '2'
0104 jz SetCharPitch
0105 cpi '3'
0106 jz SetLineFeed
0107 cpi '4'
0108 jz SetBold
0109 cpi '5'
0110 jz SetMargin
0111 cpi '6'
0112 jz SetLong
0113 cpi '7'
0114 jz SetDirect
0115 cpi '8'
0116 jz DoTest
0117 jmp WarmBoot
0118
0119 ; /* End of Main */
0120 ; /****** General purpose subroutines ******* /
0121
0122 SendToNull:
0123 mov e,m
0124 mov a,e
0125 ora a
0126 rz
0127 call ListOut
0128 inx h
0129 jmp SendToNull
0130
0131 SendCRLF:
0132 mvi e,CR
0133 call ListOut
0134 mvi e,LF
0135 call ListOut
0136 ret
0137
0138 TypeString:
0139 push psw
0140 push h
0141 push b
0142 lxi b,9
0143 call 5
0144 pop b
0145 pop h
0146 pop psw
0147 ret
0148
0149 KeyIn:
0150 push h
0151 push d
0152 push b
0153 jmp KeyIn1
0154
0155 KeyInErrAlf:
0156 dcr m
0157
0158 KeyInErr:
0159 call KeyInWrong
0160
0161 KeyIn1:
0162 mvi c,6
0163 lxi d,00ffh
0164 call 5
0165 ora a
0166 jz KeyIn1
0167 cpi 3
0168 jz KeyInEnd
0169 cpi '0'
0170 jc KeyInErr
0171 cpi '9'+1
0172 jc KeyOut
0173 lxi h,Alflag
0174 inr m
0175 jnz KeyInErrAlf
0176 dcr m
0177 ani 5fh
0178 cpi 'A'
0179 jz KeyOut
0180 cpi 'B'
0181 jz KeyOut
0182 jmp KeyInErr
0183
0184 KeyOut:
0185 push psw
0186 mov e,a
0187 mvi c,6
0188 call 5
0189 pop psw
0190
0191 KeyInEnd:
0192 pop b
0193 pop d
0194 pop h
0195 ret
0196
0197 KeyInWrong:
0198 push h
0199 push d
0200 push b
0201 mvi a,BELL
0202 jmp KeyOut
0203
0204 BackSpace:
0205 push h
0206 push d
0207 push b
0208 mvi a,BS
0209 jmp KeyOut
0210
0211 ListOut:
0212 push psw
0213 push h
0214 push b
0215 push d
0216 mvi c,5
0217 call 5
0218 pop d
0219 pop b
0220 pop h
0221 pop psw
0222 ret
0223
0224 CmpDH:
0225 push b
0226 mov b,a
0227 mov a,d
0228 cmp h
0229 jnz CmpDHZ
0230 mov a,e
0231 cmp l
0232
0233 CmpDHZ:
0234 mov a,b
0235 pop b
0236 ret
0237 ;
0238 ; /*********** Specific options subroutines *************/
0239 ;
0240 SetEVFU:
0241 call GetLine
0242 cpi 3
0243 jz Main
0244 lxi h,EVFUData
0245 jmp MenuReturn
0246
0247 SetCharPitch:
0248 call GetPitch
0249 cpi 3
0250 jz Main
0251 lxi h,CharPitch
0252 jmp MenuReturn
0253
0254 SetLineFeed:
0255 mvi a,0ffh
0256 sta Alflag
0257 call GetLFSize
0258 cpi 3
0259 jz Main
0260 lxi h,LinePitch
0261 jmp MenuReturn
0262
0263 SetBold:
0264 call GetBold
0265 cpi 3
0266 jz Main
0267 lxi h,BoldString
0268 jmp MenuReturn
0269
0270 SetMargin:
0271 call GetMargin
0272 cpi 3
0273 jz Main
0274 lxi h,Margin
0275 jmp MenuReturn
0276
0277 SetLong:
0278 call GetLong
0279 cpi 3
0280 jz Main
0281 lxi h,Long
0282 jmp MenuReturn
0283
0284 SetDirect:
0285 call GetDirect
0286 cpi 3
0287 jz Main
0288 lxi h,Direct
0289
0290 MenuReturn:
0291 call SendToNull
0292 jmp Main
0293
0294 ;
0295 ; PRINT TEST -- PRINTS 6 LINES OF 16 CHARS
0296 ; THEN SENDS VTAB SAMPLES AND FORM FEED .
0297 DoTest:
0298 mvi a,'!'
0299 mvi c,6
0300 DoTest1:
0301 mvi b,16
0302
0303 DoTest2:
0304 mov e,a
0305 call ListOut
0306 inr a
0307 dcr b
0308 jnz DoTest2
0309
0310 DoTest3:
0311 call SendCRLF
0312 dcr c
0313 jnz DoTest1
0314 call TabTest ; send 3 vertical tabs and print msg on each line
0315 mvi e,FormFeed
0316 call ListOut
0317 jmp Main
0318
0319 ;
0320 ; TABTEST
0321 ;
0322 TabTest:
0323 lda VTABCount
0324 rar ; /2
0325 mov b,a
0326
0327 TabTest1:
0328 lxi h,TABMsg
0329 call SendToNull
0330 dcr b
0331 jnz TabTest1
0332 ret
0333
0334 ;
0335 ; REINITIALISATION OF EVFU DATA -- setting to 72 lines
0336
0337 InitEVFU:
0338 lxi h,EVFUData+3
0339 mvi a,'@'
0340 mvi b,140 ; 70 lines of 2 bytes of '@'
0341
0342 Init2:
0343 mov m,a
0344 inx h
0345 dcr b
0346 jnz Init2
0347 mvi m,BOF
0348 inx h
0349 mov m,a
0350 inx h
0351 mvi m,TOF
0352 inx h
0353 mov m,a
0354 inx h
0355 mvi m,RS
0356 inx h
0357 mvi m,CR
0358 inx h
0359 mvi m,LF
0360 xra a
0361 inx h
0362 mov m,a
0363 ret
0364 ;
0365 ; EVFU ENTRIES - SET LENGTH OF PAGE AND V-TAB POSNS
0366 ;
0367 GetLine:
0368 lxi d,MsgPageSize
0369 call TypeString
0370 call InitEVFU
0371 jmp GetChar
0372
0373 GetCharWrong:
0374 call KeyInWrong
0375 call BackSpace
0376
0377 GetChar:
0378 call KeyIn
0379 cpi 3
0380 rz
0381 cpi '8'
0382 jc GetChar1
0383 jmp GetCharWrong
0384
0385 GetChar1:
0386 sui 30h ; ascii to bin
0387 add a ; *2
0388 mov b,a ; 2*bin saved
0389 add a ; *4
0390 add a ; *8
0391 add b ; +*2 bin = *10
0392 mov b,a
0393
0394 GetChar2:
0395 call KeyIn
0396 cpi 3
0397 rz
0398 sui 30h
0399 add b
0400 cpi 3
0401 jnc GetChar4
0402
0403 GetChar3:
0404 call KeyInWrong
0405 call BackSpace
0406 jmp GetChar2
0407
0408 GetChar4:
0409 cpi 73
0410 jnc GetChar3
0411 sta Lines
0412
0413 SetLines:
0414 lxi d,BOFData ; address for comparison
0415 lxi h,EVFUData-1
0416 lda VTABCount ; start at 12
0417 mov b,a
0418 lda Lines
0419 cpi 31 ; =< 30 lines ?
0420 jnc SetLines1
0421 push psw
0422 mvi a,10 ; V-TAB each 5th line 15>x<30
0423 sta VTABCount
0424 mov b,a
0425 pop psw
0426 cpi 16 ; =< 15 ?
0427 jnc SetLines1
0428 push psw
0429 mvi a,6 ; every 3rd line 15 or less
0430 sta VTABCount
0431 mov b,a
0432 pop psw
0433
0434 SetLines1:
0435 mov a,b
0436 add l
0437 jnc SetLines2
0438 inr h
0439
0440 SetLines2:
0441 mov l,a
0442 call CmpDH ; reached BOFData address yet?
0443 jnc SetLines2a ; no -- insert tabline and loop
0444 jmp SetLines3
0445
0446 SetLines2a:
0447 mvi m,TABLine ; no? insert a TABline here
0448 jmp SetLines1 ; and loop
0449
0450 SetLines3:
0451 lxi d,BOFData
0452 lxi h,EVFUData-1 ; pointer for end of page
0453 lda Lines
0454 add a ; 2 data units per line
0455 add l
0456 jnc SetLines4
0457 inr h
0458
0459 SetLines4:
0460 mov l,a
0461 xchg ; HL=> BOFData (from), DE=> page end
0462 lxi b,8 ; data to move up (includes end null)
0463 db 0edh,0b0h ;LDIR -- move it
0464 ret
0465
0466 ;
0467 ; CHARACTER PITCH ENTRIES
0468 ;
0469 GetPitch:
0470 lxi d,MsgCharPitch
0471 call TypeString
0472 jmp GetPitch1
0473
0474 GetPitchWrong:
0475 call KeyInWrong
0476 call BackSpace
0477
0478 GetPitch1:
0479 call KeyIn
0480 cpi 3
0481 rz
0482 cpi '1'
0483 jc GetPitchWrong
0484 jnz GetPitch2
0485 mvi a,Pica
0486 jmp GetPitchEnd
0487
0488 GetPitch2:
0489 cpi '5'
0490 jnc GetPitchWrong
0491
0492 GetPitch3:
0493 cpi '4'
0494 jnz GetPitch4
0495 mvi a,Proportn
0496 jmp GetPitchEnd
0497
0498 GetPitch4:
0499 cpi '3'
0500 jnz GetPitch5
0501 mvi a,Compressed
0502 jmp GetPitchEnd
0503
0504 GetPitch5:
0505 mvi a,Elite
0506
0507 GetPitchEnd:
0508 sta CharPitch+1
0509 ret
0510
0511 ;
0512 ; LINE FEED ENTRIES
0513 ;
0514 GetLFSize:
0515 lxi d,MsgGetLF
0516 call TypeString
0517
0518 GetLF1:
0519 call KeyIn
0520 cpi 3
0521 rz
0522 cpi '9'+1
0523 jnc Alphas
0524
0525 GetLF2:
0526 lxi h,LinePitch+1
0527 mvi m,'T'
0528 inx h
0529 mov m,a
0530
0531 GetLF3:
0532 xra a
0533 sta Alflag
0534 call KeyIn
0535 cpi 3
0536 rz
0537
0538 GetLF5:
0539 lxi h,LinePitch+3
0540 mov m,a
0541 ret
0542
0543 Alphas:
0544 lxi h,LinePitch+1
0545 mov m,a
0546 ret
0547
0548 ;
0549 ; BOLD/NO BOLD ENTRIES
0550 ;
0551
0552 GetBold:
0553 lxi d,MsgBold
0554 call TypeString
0555 jmp GetBold1
0556
0557 GetBoldWrong:
0558 call KeyInWrong
0559 call BackSpace
0560
0561 GetBold1:
0562 call KeyIn
0563 cpi 3
0564 rz
0565 cpi '3'
0566 jnc GetBoldWrong
0567 cpi '1'
0568 jc GetBoldWrong
0569 jnz GetBold2
0570 lxi h,BoldString+1
0571 mvi m,'!'
0572 ret
0573
0574 GetBold2:
0575 lxi h,BoldString+1
0576 mvi m,'"'
0577 ret
0578
0579 ;
0580 ; MARGIN SETTING ENTRIES
0581 ;
0582 GetMargin:
0583 lxi d,MsgMargin
0584 call TypeString
0585 lxi h,Margin+2
0586 jmp GetMargin1
0587
0588 GetMarginWrong:
0589 call KeyInWrong
0590 call BackSpace
0591
0592 GetMargin1:
0593 call KeyIn
0594 cpi 3
0595 rz
0596 cpi '2'
0597 jnc GetMarginWrong
0598 mov m,a
0599
0600 GetMargin2:
0601 call KeyIn
0602 cpi '4'
0603 mov b,a ; save char
0604 jc GetMargin4 ; 3 or less ok.
0605 mov a,m
0606 cpi '1' ; else was 1st char '1'?
0607 mov a,b
0608 jnz GetMargin3
0609 call KeyInWrong
0610 call BackSpace
0611 jmp GetMargin2
0612
0613 GetMargin3:
0614 lxi h,Margin+3
0615 mov m,a
0616
0617 GetMargin4:
0618 call KeyIn
0619 cpi 3
0620 rz
0621 cpi '4'
0622 jc GetMargin5
0623 mov c,a ; save char
0624 mov a,b
0625 cpi '3' ; was 2nd char < 3 ?
0626 mov a,c ; get current char back
0627 jc GetMargin5 ; <3 is ok
0628 lxi h,Margin+2
0629 mov a,m
0630 cpi '1'
0631 mov a,c
0632 jc GetMargin5
0633 call KeyInWrong
0634 call BackSpace
0635 jmp GetMargin4
0636
0637 GetMargin5:
0638 lxi h,Margin+4
0639 mov m,a
0640 ret
0641
0642 ;
0643 ; ELONGATED AND GRAPHICS INPUT ETC
0644 ;
0645 GetLong:
0646 lxi d,MsgLong
0647 call TypeString
0648 jmp GetLong1
0649
0650 GetLongWrong:
0651 call KeyInWrong
0652 call BackSpace
0653
0654 GetLong1:
0655 lxi h,Long+1
0656 call KeyIn
0657 cpi 3
0658 rz
0659 cpi '5'
0660 jnc GetLongWrong
0661 cpi '1'
0662 jc GetLongWrong
0663 jnz GetLong2
0664 mvi m,'$'
0665 inx h
0666 mvi m,LongOff
0667 ret
0668
0669 GetLong2:
0670 cpi '4'
0671 jnz GetLong3
0672 mvi m,'&'
0673 ret
0674
0675 GetLong3:
0676 cpi '3'
0677 jnz GetLong4
0678 mvi m,'#'
0679 ret
0680
0681 GetLong4:
0682 mvi m,'$'
0683 inx h
0684 mvi m,LongOn
0685 ret
0686
0687 ;
0688 ; PRINTING DIRECTION ENTRIES
0689 ;
0690 GetDirect:
0691 lxi d,MsgDirect
0692 call TypeString
0693 lxi h,Direct+1
0694 jmp GetDirect1
0695
0696 GetDirectWrong:
0697 call KeyInWrong
0698 call BackSpace
0699
0700 GetDirect1:
0701 call KeyIn
0702 cpi 3
0703 rz
0704 cpi '3'
0705 jnc GetDirectWrong
0706 cpi '1'
0707 jc GetDirectWrong
0708 jnz GetDirect2
0709 mvi m,'<'
0710 ret
0711
0712 GetDirect2:
0713 mvi m,'>'
0714 ret
0715
0716 end 0100h
* CROSS-REFERENCE
* def. val. symbol and uses
* 0083 0503 ALFLAG STA-97 LXI-173 STA-256 -533
* 0543 079F ALPHAS JNC-523
* 0204 05BD BACKSPACE CALL-375 -405 -476 -559 -590 -610 -634 -652
* -698
* 0021 0007 BELL MVI-201
* 0015 0043 BOF DB-70 MVI-347
* 0070 04E1 BOFDATA LXI-414 -451
* 0077 04F1 BOLDSTRING LXI-267 -570 -575
* 0020 0008 BS MVI-208
* 0075 04E9 CHARPITCH LXI-251 STA-508
* 0037 0104 CLEARSCREEN LXI-90
* 0224 05D3 CMPDH CALL-442
* 0233 05DC CMPDHZ JNZ-229
* 0022 0051 COMPRESSED MVI-501
* 0017 000D CR DB-38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -49 -50 -52
* -54 -55 -57 -58 -61 -62 -73 MVI-132 -357
* 0011 0011 DC1
* 0080 04FE DIRECT LXI-288 -693
* 0297 0649 DOTEST JZ-116
* 0300 064D DOTEST1 JNZ-313
* 0303 064F DOTEST2 JNZ-308
* 0310 0658 DOTEST3
* 0023 0045 ELITE MVI-505
* 0008 001B ESC DB-37 -75 -76 -77 -78 -79 -80
* 0065 0452 EVFUDATA LXI-244 -338 -415 -452
* 0012 000C FORMFEED MVI-315
* 0552 07A4 GETBOLD CALL-264
* 0561 07B3 GETBOLD1 JMP-555
* 0574 07CC GETBOLD2 JNZ-569
* 0557 07AD GETBOLDWRONG JNC-566 JC-568
* 0377 06AF GETCHAR JMP-371
* 0385 06BD GETCHAR1 JC-382
* 0394 06C5 GETCHAR2 JMP-406
* 0403 06D3 GETCHAR3 JNC-410
* 0408 06DC GETCHAR4 JNC-401
* 0373 06A9 GETCHARWRONG JMP-383
* 0690 0879 GETDIRECT CALL-285
* 0700 088B GETDIRECT1 JMP-694
* 0712 08A1 GETDIRECT2 JNZ-708
* 0696 0885 GETDIRECTWRONG JNC-705 JC-707
* 0518 077E GETLF1
* 0525 0789 GETLF2
* 0531 0790 GETLF3
* 0538 079A GETLF5
* 0514 0778 GETLFSIZE CALL-257
* 0367 069D GETLINE CALL-241
* 0645 0838 GETLONG CALL-278
* 0654 0847 GETLONG1 JMP-648
* 0669 0863 GETLONG2 JNZ-663
* 0675 086B GETLONG3 JNZ-671
* 0681 0873 GETLONG4 JNZ-677
* 0650 0841 GETLONGWRONG JNC-660 JC-662
* 0582 07D2 GETMARGIN CALL-271
* 0592 07E4 GETMARGIN1 JMP-586
* 0600 07F0 GETMARGIN2 JMP-611
* 0613 0809 GETMARGIN3 JNZ-608
* 0617 080D GETMARGIN4 JC-604 JMP-635
* 0637 0833 GETMARGIN5 JC-622 -627 -632
* 0588 07DE GETMARGINWRONG JNC-597
* 0469 0737 GETPITCH CALL-248
* 0478 0746 GETPITCH1 JMP-472
* 0488 0759 GETPITCH2 JNZ-484
* 0492 075E GETPITCH3
* 0498 0768 GETPITCH4 JNZ-494
* 0504 0772 GETPITCH5 JNZ-500
* 0507 0774 GETPITCHEND JMP-486 -496 -502
* 0474 0740 GETPITCHWRONG JC-483 JNC-490
* 0010 001D GS DB-65
* 0342 0681 INIT2 JNZ-346
* 0337 067A INITEVFU CALL-370
* 0149 056D KEYIN CALL-98 -378 -395 -479 -519 -534 -562 -593 -601
* -618 -656 -701
* 0161 0577 KEYIN1 JMP-153 JZ-166
* 0191 05B1 KEYINEND JZ-168
* 0158 0574 KEYINERR JC-170 JMP-182
* 0155 0573 KEYINERRALF JNZ-175
* 0197 05B5 KEYINWRONG CALL-159 -374 -404 -475 -558 -589 -609 -633
* -651 -697
* 0184 05A9 KEYOUT JC-172 JZ-179 -181 JMP-202 -209
* 0018 000A LF DB-38 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -47 -49
* -50 -52 -54 -55 -57 -58 -61 -62 -73 MVI-134 -359
* 0076 04EC LINEPITCH LXI-260 -526 -539 -544
* 0081 0501 LINES STA-411 LDA-418 -453
* 0211 05C5 LISTOUT CALL-127 -133 -135 -305 -316
* 0079 04FA LONG LXI-281 -655
* 0027 000F LONGOFF MVI-666
* 0026 000E LONGON MVI-684
* 0088 0507 MAIN JZ-243 -250 -259 -266 -273 -280 -287 JMP-292 -317
* 0095 0513 MAIN1
* 0078 04F4 MARGIN LXI-274 -585 -614 -628 -638
* 0038 0107 MENU LXI-92
* 0290 0643 MENURETURN JMP-245 -252 -261 -268 -275 -282
* 0054 0332 MSGBOLD LXI-553
* 0050 02B2 MSGCHARPITCH LXI-470
* 0061 0410 MSGDIRECT LXI-691
* 0052 02F0 MSGGETLF LXI-515
* 0057 039A MSGLONG LXI-646
* 0055 0354 MSGMARGIN LXI-583
* 0049 0282 MSGPAGESIZE LXI-368
* 0013 0040 NLINE DB-65 -67 -68 -70 -71
* 0025 004E PICA MVI-485
* 0024 0050 PROPORTN MVI-495
* 0009 001E RS DB-72 MVI-355
* 0131 0555 SENDCRLF CALL-86 -311
* 0122 054A SENDTONULL JMP-129 CALL-291 -329
* 0263 060E SETBOLD JZ-108
* 0247 05ED SETCHARPITCH JZ-104
* 0284 0638 SETDIRECT JZ-114
* 0240 05DF SETEVFU JZ-102
* 0254 05FB SETLINEFEED JZ-106
* 0413 06E4 SETLINES
* 0434 070B SETLINES1 JNC-420 -427 JMP-448
* 0440 0711 SETLINES2 JNC-437
* 0446 071B SETLINES2A JNC-443
* 0450 0720 SETLINES3 JMP-444
* 0459 072F SETLINES4 JNC-456
* 0277 062A SETLONG JZ-112
* 0270 061C SETMARGIN JZ-110
* 0085 0504 START CALL-34
* 0019 0009 TAB DB-38 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -47
* -49 -50 -52 -54 -55 -57 -57 -59 -61
* 0016 0042 TABLINE MVI-447
* 0062 0442 TABMSG LXI-328
* 0322 066A TABTEST CALL-314
* 0327 066F TABTEST1 JNZ-331
* 0014 0041 TOF DB-65 -71 MVI-351
* 0138 0560 TYPESTRING CALL-91 -93 -369 -471 -516 -554 -584 -647 -692
* 0029 000B VT DB-62
* 0082 0502 VTABCOUNT LDA-323 -416 STA-423 -430
* 0028 0000 WARMBOOT JZ-100 JMP-117
* CENSUS OF OPCODE USAGE
*
* ADD 8 ANI 1 CALL 64
* CMP 2 CPI 55 DB 42
* DCR 6 END 1 ENDM 1
* EQU 22 INR 4 INX 12
* JC 11 JMP 29 JNC 13
* JNZ 15 JZ 20 LDA 4
* LXI 37 MOV 35 MVI 37
* ORA 2 ORG 1 POP 14
* PUSH 21 RAR 1 REPT 1
* RET 20 RZ 11 STA 7
* SUI 2 XCHG 1 XRA 3