home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / mbug / mbug167.arc / PROWRT12.LBR / PROWRT12.AQM / PROWRT12.ASM
Assembly Source File  |  1979-12-31  |  22KB  |  863 lines

  1. 0001    ; PROWRITE.ASM * Program to set the C.Itoh 8510 printer to various options 
  2. 0002    ; version 1.2  *including use of the EVFU (Electronic Vertical Format Unit)
  3. 0003    ;           * This revision uses DIRIO and rationalised error-checking.
  4. 0004    ;           * Also includes fix to bug in GetLine with sbi/sui . 
  5. 0005    ; (c) Tahrone Holdings Pty Ltd, 1985  -- Peter G. Martin 16/14 Royston St,
  6. 0006    ;                             King's Cross, 2010
  7. 0007    ;                             N.S.W. AUSTRALIA
  8. 0008    ESC        EQU        1BH
  9. 0009    RS        EQU        1EH
  10. 0010    GS        EQU        1DH
  11. 0011    DC1        EQU        11H
  12. 0012    FormFeed    EQU        0CH
  13. 0013    Nline        EQU        01000000B
  14. 0014    TOF        EQU        01000001B    ; 'A' = TOP OF FORM CODE (send Nline after it)
  15. 0015    BOF        EQU        01000011B    ; 'C' = B.O.F. Code   (send Nline after it)
  16. 0016    TABline        EQU        01000010B    ; 'B' = Vertical TAB set in Channel 2 (bit 1)
  17. 0017    CR        EQU        0dh
  18. 0018    LF        EQU        0ah
  19. 0019    TAB        EQU        09H
  20. 0020    BS        EQU        08H
  21. 0021    BELL        EQU        07H
  22. 0022    Compressed  EQU        'Q'
  23. 0023    Elite        EQU        'E'
  24. 0024    Proportn    EQU        'P'
  25. 0025    Pica        EQU        'N'
  26. 0026    LongOn        EQU        0EH
  27. 0027    LongOff        EQU        0FH
  28. 0028    WarmBoot    EQU        0000H
  29. 0029    VT        EQU        0BH        ; vertical tab command
  30. 0030    
  31. 0031        org        0100h
  32. 0032    
  33. 0033        push    h
  34. 0034        call    Start
  35. 0035    
  36. 0036    ; /************* SCREEN MESSAGE STORAGE ***************/
  37. 0037    ClearScreen:    db  ESC,'*','$' ; <== SET TO OWN TERMINAL REQUIREMENTS
  38. 0038    Menu:    db  TAB,TAB,'INITIALISATION OF C.ITOH 8510 -- OPTIONS',CR,LF,LF
  39. 0039        db  TAB,'1. Set Paper Feed and vertical tabs (page length)',CR,LF
  40. 0040        db  TAB,'2. Set Character Pitch',CR,LF
  41. 0041        db  TAB,'3. Set Line Feed Size ',CR,LF
  42. 0042        db  TAB,'4. Set Bold Printing On/Off',CR,LF
  43. 0043        db  TAB,'5. Set Left Margin Size',CR,LF
  44. 0044        db  TAB,'6. Set Elongated, Graphics or Greek Chars etc',CR,LF
  45. 0045        db  TAB,'7. Set Unidirectional, Bidirectional Printing',CR,LF
  46. 0046        db  TAB,'8. Run a Printer Test of existing options',CR,LF
  47. 0047        db  TAB,'9. EXIT to CP/M',CR,LF,LF,TAB,'ENTER Choice : $'
  48. 0048    
  49. 0049    MsgPageSize:    db  CR,LF,TAB,'Enter No of lines in full page (03 to 72) : $'
  50. 0050    MsgCharPitch:    db  CR,LF,TAB,'Enter 1. Pica, 2. Elite, 3. Compressed, 4. '
  51. 0051            db  'Proportional : $'
  52. 0052    MsgGetLF:    db  CR,LF,TAB,'Enter A for 1/6in, B for 1/8in, or '
  53. 0053            db  '2-digit no. for nn/144in : $'
  54. 0054    MsgBold:    db  CR,LF,TAB,'Enter 1. Bold or 2. No Bold : $'
  55. 0055    MsgMargin    db  CR,LF,TAB,'Enter 3 digits for column no. '
  56. 0056            db  'of left margin [RANGE 000 -- 134] : $'
  57. 0057    MsgLong:    db  CR,LF,TAB,TAB
  58. 0058            db  'NOTE: 7-BIT DIP SWITCH (2-6) MUST BE CLOSED',CR,LF
  59. 0059            db  TAB,'Enter 1. ASCII , 2. ASCII Elongated, 3. Graphics, '
  60. 0060            db  '4. Greek chars : $'
  61. 0061    MsgDirect:    db  CR,LF,TAB,'Enter 1. Bidirectional or 2. Unidirectional : $'
  62. 0062    TABMsg        db  VT,'Tab set here',CR,LF,0  ;
  63. 0063    ; /**************** DATA STORAGE AREA **********************/
  64. 0064    ;
  65. 0065    EVFUData:    db  GS,TOF,Nline
  66. 0066            REPT    70
  67. 0067            db  Nline
  68. 0068            db  Nline
  69. 0069            ENDM
  70. 0070    BOFData:    db  BOF,Nline
  71. 0071            db  TOF,Nline
  72. 0072            db  RS
  73. 0073            db  CR,LF,0
  74. 0074    
  75. 0075    CharPitch:  db    ESC,0,0
  76. 0076    LinePitch   db    ESC,0,0,0,0
  77. 0077    BoldString  db    ESC,0,0
  78. 0078    Margin        db    ESC,'L',0,0,0,0
  79. 0079    Long        db    ESC,0,0,0
  80. 0080    Direct        db    ESC,0,0
  81. 0081    Lines        db    0
  82. 0082    VTABCount   db    12
  83. 0083    Alflag        db    0
  84. 0084    
  85. 0085    Start:
  86. 0086        call    SendCRLF        ; send something. sometimes 1st char may be
  87. 0087                    ; eaten by computer/printer?
  88. 0088    Main:
  89. 0089    
  90. 0090        lxi        d,Clearscreen
  91. 0091        call    TypeString
  92. 0092        lxi        d,Menu
  93. 0093        call    TypeString
  94. 0094    
  95. 0095    Main1:
  96. 0096        xra        a
  97. 0097        sta        Alflag
  98. 0098        call    KeyIn
  99. 0099        cpi        3
  100. 0100        jz        WarmBoot
  101. 0101        cpi        '1'
  102. 0102        jz        SetEVFU
  103. 0103        cpi        '2'
  104. 0104        jz        SetCharPitch
  105. 0105        cpi        '3'
  106. 0106        jz        SetLineFeed
  107. 0107        cpi        '4'
  108. 0108        jz        SetBold
  109. 0109        cpi        '5'
  110. 0110        jz        SetMargin
  111. 0111        cpi        '6'
  112. 0112        jz        SetLong
  113. 0113        cpi        '7'
  114. 0114        jz        SetDirect
  115. 0115        cpi        '8'
  116. 0116        jz        DoTest
  117. 0117        jmp        WarmBoot
  118. 0118    
  119. 0119    ; /* End of Main */
  120. 0120    ; /******    General purpose subroutines  ******* /
  121. 0121    
  122. 0122    SendToNull:
  123. 0123        mov        e,m
  124. 0124        mov        a,e
  125. 0125        ora        a
  126. 0126        rz        
  127. 0127        call    ListOut
  128. 0128        inx        h
  129. 0129        jmp        SendToNull
  130. 0130    
  131. 0131    SendCRLF:
  132. 0132        mvi        e,CR
  133. 0133        call    ListOut
  134. 0134        mvi        e,LF
  135. 0135        call    ListOut
  136. 0136        ret
  137. 0137    
  138. 0138    TypeString:
  139. 0139        push    psw
  140. 0140        push    h
  141. 0141        push    b
  142. 0142        lxi        b,9
  143. 0143        call    5
  144. 0144        pop        b
  145. 0145        pop        h
  146. 0146        pop        psw
  147. 0147        ret
  148. 0148    
  149. 0149    KeyIn:
  150. 0150        push    h
  151. 0151        push    d
  152. 0152        push    b
  153. 0153        jmp        KeyIn1
  154. 0154    
  155. 0155    KeyInErrAlf:
  156. 0156        dcr        m
  157. 0157    
  158. 0158    KeyInErr:
  159. 0159        call    KeyInWrong
  160. 0160    
  161. 0161    KeyIn1:
  162. 0162        mvi        c,6
  163. 0163        lxi        d,00ffh
  164. 0164        call    5
  165. 0165        ora        a
  166. 0166        jz        KeyIn1
  167. 0167        cpi        3
  168. 0168        jz        KeyInEnd
  169. 0169        cpi        '0'
  170. 0170        jc        KeyInErr
  171. 0171        cpi        '9'+1
  172. 0172        jc        KeyOut
  173. 0173        lxi        h,Alflag
  174. 0174        inr        m
  175. 0175        jnz        KeyInErrAlf
  176. 0176        dcr        m
  177. 0177        ani        5fh
  178. 0178        cpi        'A'
  179. 0179        jz        KeyOut
  180. 0180        cpi        'B'
  181. 0181        jz        KeyOut
  182. 0182        jmp        KeyInErr
  183. 0183    
  184. 0184    KeyOut:
  185. 0185        push    psw
  186. 0186        mov        e,a
  187. 0187        mvi        c,6
  188. 0188        call    5
  189. 0189        pop        psw
  190. 0190    
  191. 0191    KeyInEnd:
  192. 0192        pop        b
  193. 0193        pop        d
  194. 0194        pop        h
  195. 0195        ret
  196. 0196    
  197. 0197    KeyInWrong:
  198. 0198        push    h
  199. 0199        push    d
  200. 0200        push    b
  201. 0201        mvi        a,BELL
  202. 0202        jmp        KeyOut
  203. 0203    
  204. 0204    BackSpace:
  205. 0205        push    h
  206. 0206        push    d
  207. 0207        push    b
  208. 0208        mvi        a,BS
  209. 0209        jmp        KeyOut
  210. 0210    
  211. 0211    ListOut:
  212. 0212        push    psw
  213. 0213        push    h
  214. 0214        push    b
  215. 0215        push    d
  216. 0216        mvi        c,5
  217. 0217        call    5
  218. 0218        pop        d
  219. 0219        pop        b
  220. 0220        pop        h
  221. 0221        pop        psw
  222. 0222        ret
  223. 0223    
  224. 0224    CmpDH:
  225. 0225        push    b
  226. 0226        mov        b,a
  227. 0227        mov        a,d
  228. 0228        cmp        h
  229. 0229        jnz        CmpDHZ
  230. 0230        mov        a,e
  231. 0231        cmp        l
  232. 0232    
  233. 0233    CmpDHZ:
  234. 0234        mov        a,b
  235. 0235        pop        b
  236. 0236        ret
  237. 0237    ;
  238. 0238    ; /***********    Specific options subroutines *************/
  239. 0239    ;
  240. 0240    SetEVFU:
  241. 0241        call    GetLine
  242. 0242        cpi        3
  243. 0243        jz        Main
  244. 0244        lxi        h,EVFUData
  245. 0245        jmp        MenuReturn
  246. 0246    
  247. 0247    SetCharPitch:
  248. 0248        call    GetPitch
  249. 0249        cpi        3
  250. 0250        jz        Main
  251. 0251        lxi        h,CharPitch
  252. 0252        jmp        MenuReturn
  253. 0253    
  254. 0254    SetLineFeed:
  255. 0255        mvi        a,0ffh
  256. 0256        sta        Alflag
  257. 0257        call    GetLFSize
  258. 0258        cpi        3
  259. 0259        jz        Main
  260. 0260        lxi        h,LinePitch
  261. 0261        jmp        MenuReturn
  262. 0262    
  263. 0263    SetBold:
  264. 0264        call    GetBold
  265. 0265        cpi        3
  266. 0266        jz        Main
  267. 0267        lxi        h,BoldString
  268. 0268        jmp        MenuReturn
  269. 0269    
  270. 0270    SetMargin:
  271. 0271        call    GetMargin
  272. 0272        cpi        3
  273. 0273        jz        Main
  274. 0274        lxi        h,Margin
  275. 0275        jmp        MenuReturn
  276. 0276    
  277. 0277    SetLong:
  278. 0278        call    GetLong
  279. 0279        cpi        3
  280. 0280        jz        Main
  281. 0281        lxi        h,Long
  282. 0282        jmp        MenuReturn
  283. 0283    
  284. 0284    SetDirect:
  285. 0285        call    GetDirect
  286. 0286        cpi        3
  287. 0287        jz        Main
  288. 0288        lxi        h,Direct
  289. 0289    
  290. 0290    MenuReturn:
  291. 0291        call    SendToNull
  292. 0292        jmp        Main
  293. 0293    
  294. 0294    ;
  295. 0295    ; PRINT TEST -- PRINTS 6 LINES OF 16 CHARS
  296. 0296    ; THEN SENDS VTAB SAMPLES AND FORM FEED .
  297. 0297    DoTest:
  298. 0298        mvi        a,'!'
  299. 0299        mvi        c,6
  300. 0300    DoTest1:
  301. 0301        mvi        b,16
  302. 0302    
  303. 0303    DoTest2:
  304. 0304        mov        e,a
  305. 0305        call    ListOut
  306. 0306        inr        a
  307. 0307        dcr        b
  308. 0308        jnz        DoTest2
  309. 0309    
  310. 0310    DoTest3:
  311. 0311        call    SendCRLF
  312. 0312        dcr        c
  313. 0313        jnz        DoTest1
  314. 0314        call    TabTest    ; send 3 vertical tabs and print msg on each line
  315. 0315        mvi        e,FormFeed
  316. 0316        call    ListOut
  317. 0317        jmp        Main
  318. 0318    
  319. 0319    ;
  320. 0320    ; TABTEST
  321. 0321    ;
  322. 0322    TabTest:
  323. 0323        lda        VTABCount
  324. 0324        rar        ; /2
  325. 0325        mov        b,a
  326. 0326    
  327. 0327    TabTest1:
  328. 0328        lxi        h,TABMsg
  329. 0329        call    SendToNull
  330. 0330        dcr        b
  331. 0331        jnz        TabTest1
  332. 0332        ret
  333. 0333    
  334. 0334    ;
  335. 0335    ; REINITIALISATION OF EVFU DATA -- setting to 72 lines
  336. 0336    
  337. 0337    InitEVFU:
  338. 0338        lxi        h,EVFUData+3
  339. 0339        mvi        a,'@'
  340. 0340        mvi        b,140        ; 70 lines of 2 bytes of '@' 
  341. 0341    
  342. 0342    Init2:
  343. 0343        mov        m,a
  344. 0344        inx        h
  345. 0345        dcr        b
  346. 0346        jnz        Init2
  347. 0347        mvi        m,BOF
  348. 0348        inx        h
  349. 0349        mov        m,a
  350. 0350        inx        h
  351. 0351        mvi        m,TOF
  352. 0352        inx        h
  353. 0353        mov        m,a
  354. 0354        inx        h
  355. 0355        mvi        m,RS
  356. 0356        inx        h
  357. 0357        mvi        m,CR
  358. 0358        inx        h
  359. 0359        mvi        m,LF
  360. 0360        xra        a
  361. 0361        inx        h
  362. 0362        mov        m,a
  363. 0363        ret
  364. 0364    ;
  365. 0365    ; EVFU ENTRIES    - SET LENGTH OF PAGE AND V-TAB POSNS
  366. 0366    ;
  367. 0367    GetLine:
  368. 0368        lxi        d,MsgPageSize
  369. 0369        call    TypeString
  370. 0370        call    InitEVFU
  371. 0371        jmp        GetChar
  372. 0372    
  373. 0373    GetCharWrong:
  374. 0374        call    KeyInWrong
  375. 0375        call    BackSpace
  376. 0376    
  377. 0377    GetChar:
  378. 0378        call    KeyIn
  379. 0379        cpi        3
  380. 0380        rz
  381. 0381        cpi        '8'
  382. 0382        jc        GetChar1
  383. 0383        jmp        GetCharWrong
  384. 0384    
  385. 0385    GetChar1:
  386. 0386        sui        30h        ; ascii to bin
  387. 0387        add        a        ; *2
  388. 0388        mov        b,a        ; 2*bin saved
  389. 0389        add        a        ; *4
  390. 0390        add        a        ; *8
  391. 0391        add        b        ; +*2 bin = *10
  392. 0392        mov        b,a
  393. 0393    
  394. 0394    GetChar2:
  395. 0395        call    KeyIn
  396. 0396        cpi        3
  397. 0397        rz
  398. 0398        sui        30h
  399. 0399        add        b
  400. 0400        cpi        3
  401. 0401        jnc        GetChar4
  402. 0402    
  403. 0403    GetChar3:
  404. 0404        call    KeyInWrong
  405. 0405        call    BackSpace
  406. 0406        jmp        GetChar2
  407. 0407    
  408. 0408    GetChar4:
  409. 0409        cpi        73
  410. 0410        jnc        GetChar3
  411. 0411        sta        Lines
  412. 0412    
  413. 0413    SetLines:
  414. 0414        lxi        d,BOFData    ; address for comparison
  415. 0415        lxi        h,EVFUData-1
  416. 0416        lda        VTABCount    ; start at 12
  417. 0417        mov        b,a
  418. 0418        lda        Lines
  419. 0419        cpi        31        ; =< 30 lines ?
  420. 0420        jnc        SetLines1
  421. 0421        push    psw
  422. 0422        mvi        a,10    ; V-TAB each 5th line 15>x<30
  423. 0423        sta        VTABCount
  424. 0424        mov        b,a
  425. 0425        pop        psw
  426. 0426        cpi        16        ; =< 15 ?
  427. 0427        jnc        SetLines1
  428. 0428        push    psw
  429. 0429        mvi        a,6        ; every 3rd line 15 or less
  430. 0430        sta        VTABCount
  431. 0431        mov        b,a
  432. 0432        pop        psw
  433. 0433         
  434. 0434    SetLines1:
  435. 0435        mov        a,b
  436. 0436        add        l
  437. 0437        jnc        SetLines2
  438. 0438        inr        h
  439. 0439    
  440. 0440    SetLines2:
  441. 0441        mov        l,a
  442. 0442        call    CmpDH    ; reached BOFData address yet?
  443. 0443        jnc        SetLines2a    ; no -- insert tabline and loop
  444. 0444        jmp        SetLines3
  445. 0445    
  446. 0446    SetLines2a:
  447. 0447        mvi        m,TABLine    ; no? insert a TABline here
  448. 0448        jmp        SetLines1    ; and loop
  449. 0449    
  450. 0450    SetLines3:
  451. 0451        lxi        d,BOFData
  452. 0452        lxi        h,EVFUData-1 ; pointer for end of page
  453. 0453        lda        Lines
  454. 0454        add        a        ; 2 data units per line
  455. 0455        add        l
  456. 0456        jnc        SetLines4
  457. 0457        inr        h
  458. 0458    
  459. 0459    SetLines4:
  460. 0460        mov        l,a
  461. 0461        xchg        ; HL=> BOFData (from), DE=> page end
  462. 0462        lxi        b,8        ; data to move up (includes end null)
  463. 0463        db        0edh,0b0h    ;LDIR -- move it
  464. 0464        ret
  465. 0465    
  466. 0466    ;
  467. 0467    ; CHARACTER PITCH ENTRIES
  468. 0468    ;
  469. 0469    GetPitch:
  470. 0470        lxi        d,MsgCharPitch
  471. 0471        call    TypeString
  472. 0472        jmp        GetPitch1
  473. 0473    
  474. 0474    GetPitchWrong:
  475. 0475        call    KeyInWrong
  476. 0476        call    BackSpace
  477. 0477    
  478. 0478    GetPitch1:
  479. 0479        call    KeyIn
  480. 0480        cpi        3
  481. 0481        rz
  482. 0482        cpi        '1'
  483. 0483        jc        GetPitchWrong
  484. 0484        jnz        GetPitch2
  485. 0485        mvi        a,Pica
  486. 0486        jmp        GetPitchEnd
  487. 0487    
  488. 0488    GetPitch2:
  489. 0489        cpi        '5'
  490. 0490        jnc        GetPitchWrong
  491. 0491    
  492. 0492    GetPitch3:
  493. 0493        cpi        '4'
  494. 0494        jnz        GetPitch4
  495. 0495        mvi        a,Proportn      
  496. 0496        jmp        GetPitchEnd
  497. 0497    
  498. 0498    GetPitch4:
  499. 0499        cpi        '3'
  500. 0500        jnz        GetPitch5
  501. 0501        mvi        a,Compressed
  502. 0502        jmp        GetPitchEnd
  503. 0503    
  504. 0504    GetPitch5:
  505. 0505        mvi        a,Elite
  506. 0506    
  507. 0507    GetPitchEnd:
  508. 0508        sta        CharPitch+1
  509. 0509        ret
  510. 0510    
  511. 0511    ;
  512. 0512    ;   LINE FEED ENTRIES
  513. 0513    ;
  514. 0514    GetLFSize:
  515. 0515        lxi        d,MsgGetLF
  516. 0516        call    TypeString
  517. 0517    
  518. 0518    GetLF1:
  519. 0519        call    KeyIn
  520. 0520        cpi        3
  521. 0521        rz
  522. 0522        cpi        '9'+1
  523. 0523        jnc        Alphas
  524. 0524    
  525. 0525    GetLF2:
  526. 0526        lxi        h,LinePitch+1
  527. 0527        mvi        m,'T'
  528. 0528        inx        h
  529. 0529        mov        m,a
  530. 0530    
  531. 0531    GetLF3:
  532. 0532        xra        a
  533. 0533        sta        Alflag
  534. 0534        call    KeyIn
  535. 0535        cpi        3
  536. 0536        rz
  537. 0537    
  538. 0538    GetLF5:
  539. 0539        lxi        h,LinePitch+3
  540. 0540        mov        m,a
  541. 0541        ret
  542. 0542    
  543. 0543    Alphas:
  544. 0544        lxi        h,LinePitch+1
  545. 0545        mov        m,a
  546. 0546        ret
  547. 0547    
  548. 0548    ;
  549. 0549    ;  BOLD/NO BOLD ENTRIES
  550. 0550    ;
  551. 0551    
  552. 0552    GetBold:
  553. 0553        lxi        d,MsgBold
  554. 0554        call    TypeString
  555. 0555        jmp        GetBold1
  556. 0556    
  557. 0557    GetBoldWrong:
  558. 0558        call    KeyInWrong
  559. 0559        call    BackSpace
  560. 0560    
  561. 0561    GetBold1:
  562. 0562        call    KeyIn
  563. 0563        cpi        3
  564. 0564        rz
  565. 0565        cpi        '3'
  566. 0566        jnc        GetBoldWrong
  567. 0567        cpi        '1'
  568. 0568        jc        GetBoldWrong
  569. 0569        jnz        GetBold2
  570. 0570        lxi        h,BoldString+1
  571. 0571        mvi        m,'!'
  572. 0572        ret
  573. 0573    
  574. 0574    GetBold2:
  575. 0575        lxi        h,BoldString+1
  576. 0576        mvi        m,'"'
  577. 0577        ret
  578. 0578    
  579. 0579    ;
  580. 0580    ; MARGIN SETTING ENTRIES
  581. 0581    ; 
  582. 0582    GetMargin:
  583. 0583        lxi        d,MsgMargin
  584. 0584        call    TypeString
  585. 0585        lxi        h,Margin+2
  586. 0586        jmp        GetMargin1
  587. 0587    
  588. 0588    GetMarginWrong:
  589. 0589        call    KeyInWrong
  590. 0590        call    BackSpace
  591. 0591    
  592. 0592    GetMargin1:
  593. 0593        call    KeyIn
  594. 0594        cpi        3
  595. 0595        rz
  596. 0596        cpi        '2'
  597. 0597        jnc        GetMarginWrong
  598. 0598        mov        m,a
  599. 0599    
  600. 0600    GetMargin2:
  601. 0601        call    KeyIn
  602. 0602        cpi         '4'
  603. 0603        mov        b,a        ; save char 
  604. 0604        jc        GetMargin4    ; 3 or less ok.
  605. 0605        mov        a,m
  606. 0606        cpi        '1'        ; else was 1st char '1'?
  607. 0607        mov        a,b
  608. 0608        jnz        GetMargin3
  609. 0609        call    KeyInWrong
  610. 0610        call    BackSpace
  611. 0611        jmp        GetMargin2
  612. 0612    
  613. 0613    GetMargin3:
  614. 0614        lxi        h,Margin+3
  615. 0615        mov        m,a
  616. 0616    
  617. 0617    GetMargin4:
  618. 0618        call    KeyIn
  619. 0619        cpi        3
  620. 0620        rz
  621. 0621        cpi        '4'
  622. 0622        jc        GetMargin5
  623. 0623        mov        c,a        ; save char
  624. 0624        mov        a,b
  625. 0625        cpi        '3'        ; was 2nd char < 3 ?
  626. 0626        mov        a,c        ; get current char back
  627. 0627        jc        GetMargin5    ; <3 is ok 
  628. 0628        lxi        h,Margin+2
  629. 0629        mov        a,m
  630. 0630        cpi        '1'
  631. 0631        mov        a,c
  632. 0632        jc        GetMargin5
  633. 0633        call    KeyInWrong
  634. 0634        call    BackSpace
  635. 0635        jmp        GetMargin4
  636. 0636    
  637. 0637    GetMargin5:
  638. 0638        lxi        h,Margin+4
  639. 0639        mov        m,a
  640. 0640        ret
  641. 0641    
  642. 0642    ; 
  643. 0643    ; ELONGATED AND GRAPHICS INPUT ETC
  644. 0644    ;
  645. 0645    GetLong:
  646. 0646        lxi        d,MsgLong
  647. 0647        call    TypeString
  648. 0648        jmp        GetLong1
  649. 0649    
  650. 0650    GetLongWrong:
  651. 0651        call    KeyInWrong
  652. 0652        call    BackSpace
  653. 0653    
  654. 0654    GetLong1:
  655. 0655        lxi        h,Long+1
  656. 0656        call    KeyIn
  657. 0657        cpi        3
  658. 0658        rz
  659. 0659        cpi        '5'
  660. 0660        jnc        GetLongWrong
  661. 0661        cpi        '1'
  662. 0662        jc        GetLongWrong
  663. 0663        jnz        GetLong2
  664. 0664        mvi        m,'$'
  665. 0665        inx        h
  666. 0666        mvi        m,LongOff
  667. 0667        ret
  668. 0668    
  669. 0669    GetLong2:
  670. 0670        cpi        '4'
  671. 0671        jnz        GetLong3
  672. 0672        mvi        m,'&'
  673. 0673        ret
  674. 0674    
  675. 0675    GetLong3:
  676. 0676        cpi        '3'
  677. 0677        jnz        GetLong4
  678. 0678        mvi        m,'#'
  679. 0679        ret
  680. 0680    
  681. 0681    GetLong4:
  682. 0682        mvi        m,'$'
  683. 0683        inx        h
  684. 0684        mvi        m,LongOn
  685. 0685        ret
  686. 0686    
  687. 0687    ;
  688. 0688    ; PRINTING DIRECTION ENTRIES
  689. 0689    ;
  690. 0690    GetDirect:
  691. 0691        lxi        d,MsgDirect
  692. 0692        call    TypeString
  693. 0693        lxi        h,Direct+1
  694. 0694        jmp        GetDirect1
  695. 0695    
  696. 0696    GetDirectWrong:
  697. 0697        call    KeyInWrong
  698. 0698        call    BackSpace
  699. 0699    
  700. 0700    GetDirect1:
  701. 0701        call    KeyIn
  702. 0702        cpi        3
  703. 0703        rz
  704. 0704        cpi        '3'
  705. 0705        jnc        GetDirectWrong
  706. 0706        cpi        '1' 
  707. 0707        jc        GetDirectWrong
  708. 0708        jnz        GetDirect2
  709. 0709        mvi        m,'<'
  710. 0710        ret
  711. 0711    
  712. 0712    GetDirect2:
  713. 0713        mvi        m,'>'
  714. 0714        ret
  715. 0715    
  716. 0716       end 0100h
  717. * CROSS-REFERENCE
  718. * def.  val.  symbol and uses
  719. * 0083 0503 ALFLAG STA-97 LXI-173 STA-256 -533
  720. * 0543 079F ALPHAS JNC-523
  721. * 0204 05BD BACKSPACE CALL-375 -405 -476 -559 -590 -610 -634 -652
  722. *        -698
  723. * 0021 0007 BELL MVI-201
  724. * 0015 0043 BOF DB-70 MVI-347
  725. * 0070 04E1 BOFDATA LXI-414 -451
  726. * 0077 04F1 BOLDSTRING LXI-267 -570 -575
  727. * 0020 0008 BS MVI-208
  728. * 0075 04E9 CHARPITCH LXI-251 STA-508
  729. * 0037 0104 CLEARSCREEN LXI-90
  730. * 0224 05D3 CMPDH CALL-442
  731. * 0233 05DC CMPDHZ JNZ-229
  732. * 0022 0051 COMPRESSED MVI-501
  733. * 0017 000D CR DB-38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -49 -50 -52
  734. *        -54 -55 -57 -58 -61 -62 -73 MVI-132 -357
  735. * 0011 0011 DC1
  736. * 0080 04FE DIRECT LXI-288 -693
  737. * 0297 0649 DOTEST JZ-116
  738. * 0300 064D DOTEST1 JNZ-313
  739. * 0303 064F DOTEST2 JNZ-308
  740. * 0310 0658 DOTEST3
  741. * 0023 0045 ELITE MVI-505
  742. * 0008 001B ESC DB-37 -75 -76 -77 -78 -79 -80
  743. * 0065 0452 EVFUDATA LXI-244 -338 -415 -452
  744. * 0012 000C FORMFEED MVI-315
  745. * 0552 07A4 GETBOLD CALL-264
  746. * 0561 07B3 GETBOLD1 JMP-555
  747. * 0574 07CC GETBOLD2 JNZ-569
  748. * 0557 07AD GETBOLDWRONG JNC-566 JC-568
  749. * 0377 06AF GETCHAR JMP-371
  750. * 0385 06BD GETCHAR1 JC-382
  751. * 0394 06C5 GETCHAR2 JMP-406
  752. * 0403 06D3 GETCHAR3 JNC-410
  753. * 0408 06DC GETCHAR4 JNC-401
  754. * 0373 06A9 GETCHARWRONG JMP-383
  755. * 0690 0879 GETDIRECT CALL-285
  756. * 0700 088B GETDIRECT1 JMP-694
  757. * 0712 08A1 GETDIRECT2 JNZ-708
  758. * 0696 0885 GETDIRECTWRONG JNC-705 JC-707
  759. * 0518 077E GETLF1
  760. * 0525 0789 GETLF2
  761. * 0531 0790 GETLF3
  762. * 0538 079A GETLF5
  763. * 0514 0778 GETLFSIZE CALL-257
  764. * 0367 069D GETLINE CALL-241
  765. * 0645 0838 GETLONG CALL-278
  766. * 0654 0847 GETLONG1 JMP-648
  767. * 0669 0863 GETLONG2 JNZ-663
  768. * 0675 086B GETLONG3 JNZ-671
  769. * 0681 0873 GETLONG4 JNZ-677
  770. * 0650 0841 GETLONGWRONG JNC-660 JC-662
  771. * 0582 07D2 GETMARGIN CALL-271
  772. * 0592 07E4 GETMARGIN1 JMP-586
  773. * 0600 07F0 GETMARGIN2 JMP-611
  774. * 0613 0809 GETMARGIN3 JNZ-608
  775. * 0617 080D GETMARGIN4 JC-604 JMP-635
  776. * 0637 0833 GETMARGIN5 JC-622 -627 -632
  777. * 0588 07DE GETMARGINWRONG JNC-597
  778. * 0469 0737 GETPITCH CALL-248
  779. * 0478 0746 GETPITCH1 JMP-472
  780. * 0488 0759 GETPITCH2 JNZ-484
  781. * 0492 075E GETPITCH3
  782. * 0498 0768 GETPITCH4 JNZ-494
  783. * 0504 0772 GETPITCH5 JNZ-500
  784. * 0507 0774 GETPITCHEND JMP-486 -496 -502
  785. * 0474 0740 GETPITCHWRONG JC-483 JNC-490
  786. * 0010 001D GS DB-65
  787. * 0342 0681 INIT2 JNZ-346
  788. * 0337 067A INITEVFU CALL-370
  789. * 0149 056D KEYIN CALL-98 -378 -395 -479 -519 -534 -562 -593 -601
  790. *        -618 -656 -701
  791. * 0161 0577 KEYIN1 JMP-153 JZ-166
  792. * 0191 05B1 KEYINEND JZ-168
  793. * 0158 0574 KEYINERR JC-170 JMP-182
  794. * 0155 0573 KEYINERRALF JNZ-175
  795. * 0197 05B5 KEYINWRONG CALL-159 -374 -404 -475 -558 -589 -609 -633
  796. *        -651 -697
  797. * 0184 05A9 KEYOUT JC-172 JZ-179 -181 JMP-202 -209
  798. * 0018 000A LF DB-38 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -47 -49
  799. *        -50 -52 -54 -55 -57 -58 -61 -62 -73 MVI-134 -359
  800. * 0076 04EC LINEPITCH LXI-260 -526 -539 -544
  801. * 0081 0501 LINES STA-411 LDA-418 -453
  802. * 0211 05C5 LISTOUT CALL-127 -133 -135 -305 -316
  803. * 0079 04FA LONG LXI-281 -655
  804. * 0027 000F LONGOFF MVI-666
  805. * 0026 000E LONGON MVI-684
  806. * 0088 0507 MAIN JZ-243 -250 -259 -266 -273 -280 -287 JMP-292 -317
  807. * 0095 0513 MAIN1
  808. * 0078 04F4 MARGIN LXI-274 -585 -614 -628 -638
  809. * 0038 0107 MENU LXI-92
  810. * 0290 0643 MENURETURN JMP-245 -252 -261 -268 -275 -282
  811. * 0054 0332 MSGBOLD LXI-553
  812. * 0050 02B2 MSGCHARPITCH LXI-470
  813. * 0061 0410 MSGDIRECT LXI-691
  814. * 0052 02F0 MSGGETLF LXI-515
  815. * 0057 039A MSGLONG LXI-646
  816. * 0055 0354 MSGMARGIN LXI-583
  817. * 0049 0282 MSGPAGESIZE LXI-368
  818. * 0013 0040 NLINE DB-65 -67 -68 -70 -71
  819. * 0025 004E PICA MVI-485
  820. * 0024 0050 PROPORTN MVI-495
  821. * 0009 001E RS DB-72 MVI-355
  822. * 0131 0555 SENDCRLF CALL-86 -311
  823. * 0122 054A SENDTONULL JMP-129 CALL-291 -329
  824. * 0263 060E SETBOLD JZ-108
  825. * 0247 05ED SETCHARPITCH JZ-104
  826. * 0284 0638 SETDIRECT JZ-114
  827. * 0240 05DF SETEVFU JZ-102
  828. * 0254 05FB SETLINEFEED JZ-106
  829. * 0413 06E4 SETLINES
  830. * 0434 070B SETLINES1 JNC-420 -427 JMP-448
  831. * 0440 0711 SETLINES2 JNC-437
  832. * 0446 071B SETLINES2A JNC-443
  833. * 0450 0720 SETLINES3 JMP-444
  834. * 0459 072F SETLINES4 JNC-456
  835. * 0277 062A SETLONG JZ-112
  836. * 0270 061C SETMARGIN JZ-110
  837. * 0085 0504 START CALL-34
  838. * 0019 0009 TAB DB-38 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -47
  839. *        -49 -50 -52 -54 -55 -57 -57 -59 -61
  840. * 0016 0042 TABLINE MVI-447
  841. * 0062 0442 TABMSG LXI-328
  842. * 0322 066A TABTEST CALL-314
  843. * 0327 066F TABTEST1 JNZ-331
  844. * 0014 0041 TOF DB-65 -71 MVI-351
  845. * 0138 0560 TYPESTRING CALL-91 -93 -369 -471 -516 -554 -584 -647 -692
  846. * 0029 000B VT DB-62
  847. * 0082 0502 VTABCOUNT LDA-323 -416 STA-423 -430
  848. * 0028 0000 WARMBOOT JZ-100 JMP-117
  849.  
  850. * CENSUS OF OPCODE USAGE
  851. *    
  852. *    ADD     8    ANI     1    CALL     64
  853. *    CMP     2    CPI     55    DB     42
  854. *    DCR     6    END     1    ENDM     1
  855. *    EQU     22    INR     4    INX     12
  856. *    JC     11    JMP     29    JNC     13
  857. *    JNZ     15    JZ     20    LDA     4
  858. *    LXI     37    MOV     35    MVI     37
  859. *    ORA     2    ORG     1    POP     14
  860. *    PUSH     21    RAR     1    REPT     1
  861. *    RET     20    RZ     11    STA     7
  862. *    SUI     2    XCHG     1    XRA     3
  863.