home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol020 / loader.z80 < prev    next >
Text File  |  1984-04-29  |  9KB  |  676 lines

  1. ;
  2. ;
  3. ;    STATIC LOADER FOR SYSTEM MONITOR RELEASE A.01
  4. ;
  5. ;   ****Donated to the Pascal/Z Users Group,July 1980****
  6. ;
  7. MAP    EQU    1000H
  8. ZERO    EQU    2000H
  9. LOCALE    EQU    3F00H
  10. ;
  11. SIZE    EQU    LOCALE
  12. VWORK    EQU    LOCALE+2
  13. MWORK    EQU    LOCALE+4
  14. CWORK    EQU    LOCALE+6
  15. TWORK    EQU    LOCALE+8
  16. DWORK    EQU    LOCALE+10
  17. VIDADD    EQU    LOCALE+12
  18. PATCH1    EQU    LOCALE+14
  19. PATCH2    EQU    LOCALE+16
  20. PATCH3    EQU    LOCALE+18
  21. PATCH4    EQU    LOCALE+20
  22. PATCH5    EQU    LOCALE+22
  23. CPTCH1    EQU    LOCALE+24
  24. CPTCH2    EQU    LOCALE+26
  25. CPTCH3    EQU    LOCALE+28
  26. CPTCH4    EQU    LOCALE+30
  27. ;
  28. ;    CP/M LINKAGES
  29. ;
  30. BDOS    EQU    05H
  31. BOUT    EQU    9
  32. BINP    EQU    10
  33. ;
  34. ;    START
  35. ;
  36. START    LD    SP,MAP
  37.     CALL    INPUT
  38.     CALL    SETUP
  39. LOOP    CALL    CHANGE
  40.     CALL    UPDATE
  41.     JR    NZ,LOOP
  42.     CALL    SETVID
  43.     CALL    SETIO
  44.     CALL    SETCAS
  45.     CALL    SETRAM
  46.     CALL    MOVE
  47.     LD    HL,(JUMP)
  48.     JP    (HL)
  49. ;
  50. ;    SET RAM MEMORY LOCATIONS
  51. ;
  52. SETRAM    LD    IX,(VWORK)
  53.     CALL    SETADD
  54.     LD    IX,(MWORK)
  55.     CALL    SETADD
  56.     CALL    ISTADD
  57.     LD    IX,(CWORK)
  58.     CALL    SETADD
  59.     CALL    ISTADD
  60.     LD    IX,(TWORK)
  61.     CALL    SETADD
  62.     LD    IX,(DWORK)
  63.     CALL    SETADD
  64.     RET
  65. ;
  66. ;    SET RAM ROUTINE
  67. ;
  68. SETADD    LD    BC,2000H
  69.     ADD    IX,BC
  70. STA1    LD    C,(IX)
  71.     LD    B,(IX+1)
  72.     LD    HL,(WORK)
  73.     ADD    HL,BC
  74.     LD    (IX),L
  75.     LD    (IX+1),H
  76.     RET
  77. ;
  78. ISTADD    INC    IX
  79.     INC    IX
  80.     JR    STA1
  81. ;
  82. ;    SET VIDEO RAM
  83. ;
  84. SETVID    LD    IX,(VIDADD)
  85.     LD    BC,2000H
  86.     ADD    IX,BC
  87.     LD    HL,(VIDEO)
  88.     LD    (IX),L
  89.     LD    (IX+1),H
  90.     LD    BC,1024-64
  91.     ADD    HL,BC
  92.     LD    (IX+2),L
  93.     LD    (IX+3),H
  94.     LD    BC,63
  95.     ADD    HL,BC
  96.     LD    (IX+4),L
  97.     LD    (IX+5),H
  98.     RET
  99. ;
  100. ;    SETUP
  101. ;
  102. SETUP    LD    IX,ZERO
  103.     LD    IY,MAP
  104.     LD    HL,(SIZE)
  105.     EX    DE,HL
  106.     LD    HL,(PAGE)
  107.     LD    C,(IY)
  108.     LD    B,8
  109.     RET
  110. ;
  111. ;    CHANGE
  112. ;
  113. CHANGE    LD    A,C
  114.     RRCA
  115.     LD    C,A
  116.     JR    NC,CH1
  117.     LD    A,(IX)
  118.     ADD    L
  119.     LD    (IX),A
  120. CH1    DEC    B
  121.     RET    NZ
  122.     INC    IY
  123.     LD    B,8
  124.     LD    C,(IY)
  125.     RET
  126. ;
  127. ;    UPDATE
  128. ;
  129. UPDATE    INC    IX
  130.     DEC    DE
  131.     LD    A,D
  132.     OR    E
  133.     RET
  134. ;
  135. ;    OUTPUT MESSAGE, INPUT DATA, AND DECODE HEX
  136. ;
  137. ENTER1    CALL    BUFOUT
  138.     LD    HL,DFLT1
  139.     CALL    BUFOUT
  140.     LD    L,(IX)
  141.     LD    H,(IX+1)
  142.     RET
  143. ;
  144. ENTER2    LD    HL,DFLT2
  145.     CALL    BUFOUT
  146.     CALL    BUFIN
  147.     JP    HEX
  148. ;
  149. ENTER3    LD    HL,DFLT2
  150.     CALL    BUFOUT
  151. ENTER4    CALL    BUFIN
  152.     LD    A,B
  153.     OR    A
  154.     RET    Z
  155.     LD    A,(HL)
  156.     RET
  157. ;
  158. AENTER    CALL    ENTER1
  159.     CALL    OUTADD
  160.     JR    ENTER2
  161. ;
  162. BENTER    CALL    ENTER1
  163.     LD    A,L
  164.     CALL    OUTBYT
  165.     CALL    ENTER2
  166.     RET    C
  167.     RET    Z
  168.     LD    A,H
  169.     OR    A
  170.     JR    Z,BE1
  171.     SCF
  172.     RET
  173. BE1    INC    A
  174.     RET
  175. ;
  176. PENTER    CALL    ENTER1
  177.     CALL    OUTPOL
  178.     CALL    ENTER3
  179.     RET    Z
  180.     CP    'P'
  181.     JR    Z,PE1
  182.     CP    'N'
  183.     JR    NZ,PE2
  184. PE0    LD    L,0
  185.     XOR    A
  186.     INC    A
  187.     RET
  188. PE1    LD    L,1
  189.     XOR    A
  190.     INC    A
  191.     RET
  192. PE2    SCF
  193.     RET
  194. ;
  195. YENTER    CALL    BUFOUT
  196.     CALL    ENTER4
  197.     CP    'Y'
  198.     JR    Z,PE1
  199.     CP    'N'
  200.     JR    NZ,PE2
  201.     JR    PE0
  202. ;
  203. ;    INPUT
  204. ;
  205. INPUT    LD    HL,MSG1
  206.     LD    IX,PAGE
  207.     CALL    BENTER
  208.     JR    C,INPUT
  209.     JR    Z,IP1
  210.     LD    A,L
  211.     LD    (PAGE),A
  212. ;
  213. IP1    LD    HL,MSG2
  214.     LD    IX,BIAS
  215.     CALL    AENTER
  216.     JR    C,IP1
  217.     JR    Z,IP2
  218.     LD    (BIAS),HL
  219. ;
  220. IP2    LD    HL,MSG3
  221.     LD    IX,VIDEO
  222.     CALL    AENTER
  223.     JR    C,IP2
  224.     JR    Z,IP3
  225.     LD    (VIDEO),HL
  226. ;
  227. IP3    LD    HL,MSG4
  228.     LD    IX,WORK
  229.     CALL    AENTER
  230.     JR    C,IP3
  231.     JR    Z,IP4
  232.     LD    (WORK),HL
  233. ;
  234. IP4    LD    HL,MSG5 ;STATUS PORT
  235.     LD    IX,SPORT
  236.     CALL    BENTER
  237.     JR    C,IP4
  238.     JR    Z,IP5
  239.     LD    A,L
  240.     LD    (SPORT),A
  241. ;
  242. IP5    LD    HL,MSG6 ;STATUS POLARITY
  243.     LD    IX,SPOL
  244.     CALL    PENTER
  245.     JR    C,IP5
  246.     JR    Z,IP6
  247.     LD    A,L
  248.     LD    (SPOL),A
  249. ;
  250. IP6    LD    HL,MSG7 ;STATUS MASK
  251.     LD    IX,SMASK
  252.     CALL    BENTER
  253.     JR    C,IP6
  254.     JR    Z,IP7
  255.     LD    A,L
  256.     LD    (SMASK),A
  257. ;
  258. IP7    LD    HL,MSG8 ;DATA PORT
  259.     LD    IX,DPORT
  260.     CALL    BENTER
  261.     JR    C,IP7
  262.     JR    Z,IP8
  263.     LD    A,L
  264.     LD    (DPORT),A
  265. ;
  266. IP8    LD    HL,MSG9 ;DATA POLARITY
  267.     LD    IX,DPOL
  268.     CALL    PENTER
  269.     JR    C,IP8
  270.     JR    Z,IP9
  271.     LD    A,L
  272.     LD    (DPOL),A
  273. ;
  274. IP9    LD    HL,MSG10    ;PRINTER STATUS
  275.     LD    IX,LSPORT
  276.     CALL    BENTER
  277.     JR    C,IP9
  278.     JR    Z,IP10
  279.     LD    A,L
  280.     LD    (LSPORT),A
  281. ;
  282. IP10    LD    HL,MSG11    ;PRINTER STAT POLARITY
  283.     LD    IX,LSPOL
  284.     CALL    PENTER
  285.     JR    C,IP10
  286.     JR    Z,IP11
  287.     LD    A,L
  288.     LD    (LSPOL),A
  289. ;
  290. IP11    LD    HL,MSG12    ;PRINTER STAT MASK
  291.     LD    IX,LSMASK
  292.     CALL    BENTER
  293.     JR    C,IP11
  294.     JR    Z,IP12
  295.     LD    A,L
  296.     LD    (LSMASK),A
  297. ;
  298. IP12    LD    HL,MSG13    ;PRINTER BUSY ASK
  299.     CALL    YENTER
  300.     JR    C,IP12
  301.     LD    A,L
  302.     LD    (BUSY),A
  303.     OR    A
  304.     JR    Z,IP16
  305. ;
  306. IP13    LD    HL,MSG14    ;PRINTER BUSY PORT
  307.     LD    IX,LBPORT
  308.     CALL    BENTER
  309.     JR    C,IP13
  310.     JR    Z,IP14
  311.     LD    A,L
  312.     LD    (LBPORT),A
  313. ;
  314. IP14    LD    HL,MSG15    ;PRINTER BUSY POLARITY
  315.     LD    IX,LBPOL
  316.     CALL    PENTER
  317.     JR    C,IP14
  318.     JR    Z,IP15
  319.     LD    A,L
  320.     LD    (LBPOL),A
  321. ;
  322. IP15    LD    HL,MSG16    ;PRINTER BUSY MASK
  323.     LD    IX,LBMASK
  324.     CALL    BENTER
  325.     JR    C,IP15
  326.     JR    Z,IP16
  327.     LD    A,L
  328.     LD    (LBMASK),A
  329. ;
  330. IP16    LD    HL,MSG17    ;PRINTER DATA PORT
  331.     LD    IX,LDPORT
  332.     CALL    BENTER
  333.     JR    C,IP16
  334.     JR    Z,IP17
  335.     LD    A,L
  336.     LD    (LDPORT),A
  337. ;
  338. IP17    LD    HL,MSG18    ;PRINTER DATA POLARITY
  339.     LD    IX,LDPOL
  340.     CALL    PENTER
  341.     JR    C,IP17
  342.     JR    Z,IP18
  343.     LD    A,L
  344.     LD    (LDPOL),A
  345. ;
  346. IP18    LD    HL,MSG19    ;CASSETTE BASE
  347.     LD    IX,TPBASE
  348.     CALL    BENTER
  349.     JR    C,IP18
  350.     JR    Z,IP19
  351.     LD    A,L
  352.     LD    (TPBASE),A
  353. ;
  354. IP19    LD    HL,MSG20    ;DONE?
  355.     CALL    YENTER
  356.     JR    C,IP19
  357.     LD    A,L
  358.     OR    A
  359.     JP    NZ,INPUT
  360. ;
  361. IP20    LD    HL,MSG21    ;JUMP ADDRESS
  362.     LD    IX,JUMP
  363.     CALL    AENTER
  364.     JR    C,IP20
  365.     RET    Z
  366.     LD    (JUMP),HL
  367.     RET
  368. ;
  369. ;    SET THE IO PATCHES
  370. ;
  371. SETIO    LD    IX,(PATCH1)
  372.     LD    BC,2000H
  373.     ADD    IX,BC
  374.     LD    A,(SPORT)
  375.     LD    (IX+1),A
  376.     LD    A,(SMASK)
  377.     LD    (IX+3),A
  378.     LD    (IX+4),0EEH
  379.     LD    (IX+5),A
  380.     LD    A,(SPOL)
  381.     OR    A
  382.     JR    Z,ST1
  383.     LD    (IX+4),0
  384.     LD    (IX+5),0
  385. ;
  386. ST1    LD    IX,(PATCH2)
  387.     ADD    IX,BC
  388.     LD    A,(DPORT)
  389.     LD    (IX+1),A
  390.     LD    A,(DPOL)
  391.     OR    A
  392.     JR    Z,ST2
  393.     LD    (IX+2),0
  394.     JR    ST3
  395. ST2    LD    (IX+2),2FH
  396. ;
  397. ST3    LD    IX,(PATCH3)
  398.     ADD    IX,BC
  399.     LD    A,(LSPORT)
  400.     LD    (IX+1),A
  401.     LD    A,(LSMASK)
  402.     LD    (IX+3),A
  403.     LD    (IX+4),0EEH
  404.     LD    (IX+5),A
  405.     LD    A,(LSPOL)
  406.     OR    A
  407.     JR    Z,ST4
  408.     LD    (IX+4),0
  409.     LD    (IX+5),0
  410. ;
  411. ST4    LD    A,(BUSY)
  412.     OR    A
  413.     JR    Z,ST5
  414.     LD    IX,(PATCH4)
  415.     ADD    IX,BC
  416.     LD    A,(LBPORT)
  417.     LD    (IX+1),A
  418.     LD    A,(LBMASK)
  419.     LD    (IX+3),A
  420.     LD    (IX+4),0EEH
  421.     LD    (IX+5),A
  422.     LD    A,(LBPOL)
  423.     OR    A
  424.     JR    Z,ST5
  425.     LD    (IX+4),0
  426.     LD    (IX+5),0
  427. ;
  428. ST5    LD    IX,(PATCH5)
  429.     ADD    IX,BC
  430.     LD    A,(LDPORT)
  431.     LD    (IX+9),A
  432.     LD    A,(BUSY)
  433.     OR    A
  434.     JR    NZ,ST6
  435.     XOR    A
  436.     LD    (IX+3),A
  437.     LD    (IX+4),A
  438.     LD    (IX+5),A
  439. ST6    LD    A,(LDPOL)
  440.     OR    A
  441.     RET    NZ
  442.     LD    (IX+7),2FH
  443.     RET
  444. ;
  445. ;    SET CASSETTE IOBASE
  446. ;
  447. SETCAS    LD    HL,(CPTCH1)
  448.     CALL    TBZZ
  449.     LD    HL,6
  450.     CALL    CPATCH
  451.     LD    HL,12
  452.     CALL    CPATCH
  453.     LD    HL,24
  454.     CALL    CPATCH
  455.     LD    HL,31
  456.     CALL    CPATCH
  457. ;
  458.     LD    HL,(CPTCH2)
  459.     CALL    TBZZ
  460.     LD    HL,10
  461.     CALL    CPATCH
  462.     LD    HL,17
  463.     CALL    CPATCH
  464.     LD    HL,28
  465.     CALL    CPATCH
  466.     LD    HL,42
  467.     CALL    CPATCH
  468. ;
  469.     LD    HL,(CPTCH3)
  470.     CALL    TBZZ
  471.     LD    HL,11
  472.     CALL    CPATCH
  473.     LD    HL,13
  474.     CALL    CPATCH
  475.     LD    HL,20
  476.     CALL    CPATCH
  477. ;
  478.     LD    HL,(CPTCH4)
  479.     CALL    TBZZ
  480.     LD    HL,12
  481.     CALL    CPATCH
  482.     LD    HL,14
  483.     CALL    CPATCH
  484.     LD    HL,22
  485.     CALL    CPATCH
  486.     RET
  487. ;
  488. TBZZ    LD    BC,2000H
  489.     ADD    HL,BC
  490.     EX    DE,HL
  491.     LD    A,(TPBASE)
  492.     LD    B,A
  493.     RET
  494. ;
  495. CPATCH    ADD    HL,DE
  496.     LD    A,(HL)
  497.     AND    0FH
  498.     ADD    B
  499.     LD    (HL),A
  500.     RET
  501. ;
  502. ;    BUFFER OUTPUT
  503. ;
  504. BUFOUT    EX    DE,HL
  505.     LD    C,BOUT
  506.     JP    BDOS
  507. ;
  508. ;    BUFFER INPUT
  509. ;
  510. BUFIN    LD    DE,BUFADD
  511.     LD    C,BINP
  512.     CALL    BDOS
  513.     LD    HL,BUFADD+1
  514.     LD    B,(HL)
  515.     INC    HL
  516.     RET
  517. ;
  518. ;    OUTPUT A BYTE
  519. ;
  520. OUTBYT    PUSH    AF
  521.     AND    0F0H
  522.     RRCA
  523.     RRCA
  524.     RRCA
  525.     RRCA
  526.     CALL    OB1
  527.     LD    (BTFLD),A
  528.     POP    AF
  529.     AND    0FH
  530.     CALL    OB1
  531.     LD    (BTFLD+1),A
  532.     LD    HL,BTFLD
  533.     JR    BUFOUT
  534. ;
  535. OB1    ADD    A,90H
  536.     DAA
  537.     ADC    A,40H
  538.     DAA
  539.     RET
  540. ;
  541. ;    OUTPUT AN ADDRESS
  542. ;
  543. OUTADD    LD    A,H
  544.     PUSH    HL
  545.     CALL    OUTBYT
  546.     POP    HL
  547.     LD    A,L
  548.     JR    OUTBYT
  549. ;
  550. ;    OUTPUT POLARITY BYTE
  551. ;
  552. OUTPOL    LD    A,L
  553.     OR    A
  554.     JR    Z,OP1
  555.     LD    HL,PBYTE
  556.     JR    BUFOUT
  557. OP1    LD    HL,NBYTE
  558.     JR    BUFOUT
  559. PBYTE    DEFB    'P$'
  560. NBYTE    DEFB    'N$'
  561. ;
  562. ;    HEX CONVERSION
  563. ;
  564. HEX    EX    DE,HL
  565.     LD    HL,0
  566.     LD    A,B
  567.     OR    A
  568.     RET    Z
  569. HX1    LD    A,(DE)
  570.     CP    20H
  571.     JR    Z,HX4
  572.     CP    30H
  573.     RET    C
  574.     SUB    30H
  575.     CP    0AH
  576.     JR    NC,HX3
  577. HX2    ADD    HL,HL
  578.     ADD    HL,HL
  579.     ADD    HL,HL
  580.     ADD    HL,HL
  581.     ADD    A,L
  582.     LD    L,A
  583.     DEC    B
  584.     JR    Z,HX4
  585.     INC    DE
  586.     JR    HX1
  587. HX3    SUB    7
  588.     CP    10H
  589.     JR    C,HX2
  590.     SCF
  591.     RET
  592. HX4    XOR    A
  593.     INC    A
  594.     RET
  595. ;
  596. ;    MOVE THE COPY
  597. ;
  598. MOVE    LD    HL,(PAGE)
  599.     LD    H,L
  600.     LD    L,0
  601.     EX    DE,HL
  602.     LD    HL,(BIAS)
  603.     ADD    HL,DE
  604.     EX    DE,HL
  605.     LD    HL,(SIZE)
  606.     LD    C,L
  607.     LD    B,H
  608.     LD    HL,ZERO
  609.     LDIR
  610.     RET
  611. ;
  612. ;    VARIABLES
  613. ;
  614. WORK    DEFW    0FD00H
  615. VIDEO    DEFW    0CC00H
  616. PAGE    DEFB    0D0H
  617. BIAS    DEFW    0
  618. JUMP    DEFW    0
  619. SPORT    DEFB    0
  620. SPOL    DEFB    1
  621. SMASK    DEFB    80H
  622. DPORT    DEFB    1
  623. DPOL    DEFB    1
  624. LSPORT    DEFB    2
  625. LSPOL    DEFB    1
  626. LSMASK    DEFB    80H
  627. BUSY    DEFB    1
  628. LBPORT    DEFB    3
  629. LBPOL    DEFB    1
  630. LBMASK    DEFB    80H
  631. LDPORT    DEFB    4
  632. LDPOL    DEFB    1
  633. TPBASE    DEFB    60H
  634. ;
  635. ;    MESSAGES
  636. ;
  637. MSG1    DEFB    0CH,'SYSTEM MONITOR LOADER A.01',0DH,0AH,0AH
  638.     DEFB    'ENTER THE DATA AS PROMPTED.',0DH,0AH
  639.     DEFB    'AN IMMEDIATE CARRIAGE RETURN WILL ALLOW'
  640.     DEFB    0DH,0AH,'THE DEFAULT TO STAND.',0DH,0AH,0AH
  641.     DEFB    'ENTER MONITOR BASE PAGE NUMBER$'
  642. MSG2    DEFB    0DH,0AH,0AH
  643.     DEFB    'ENTER BIAS ADDRESS$'
  644. MSG3    DEFB    0DH,0AH,0AH
  645.     DEFB    'ENTER VIDEO RAM BASE ADDRESS$'
  646. MSG4    DEFB    0DH,0AH,0AH
  647.     DEFB    'ENTER MONITOR VARIABLE RAM BASE$'
  648. MSG5    DEFB    0DH,0AH,0AH
  649.     DEFB    'ENTER THE KEYBOARD DRIVER VALUES'
  650.     DEFB    0DH,0AH,'   STATUS PORT NUMBER$'
  651. MSG6    DEFB    0DH,0AH,'   STATUS POLARITY(P/N)$'
  652. MSG7    DEFB    0DH,0AH,'   STATUS MASK$'
  653. MSG8    DEFB    0DH,0AH,'   DATA PORT NUMBER$'
  654. MSG9    DEFB    0DH,0AH,'   DATA POLARITY(P/N)$'
  655. MSG10    DEFB    0DH,0AH,0AH,'ENTER THE PRINTER DRIVER VALUES'
  656.     DEFB    0DH,0AH,'   STATUS PORT NUMBER$'
  657. MSG11    DEFB    0DH,0AH,'   STATUS POLARITY(P/N)$'
  658. MSG12    DEFB    0DH,0AH,'   STATUS MASK$'
  659. MSG13    DEFB    0DH,0AH,'DOES PRINTER HAVE ADDITIONAL BUSY'
  660.     DEFB    ' PORT ASSIGNED? (Y/N)$'
  661. MSG14    DEFB    0DH,0AH,'   BUSY PORT NUMBER$'
  662. MSG15    DEFB    0DH,0AH,'   BUSY POLARITY(P/N)$'
  663. MSG16    DEFB    0DH,0AH,'   BUSY MASK$'
  664. MSG17    DEFB    0DH,0AH,'   DATA PORT NUMBER$'
  665. MSG18    DEFB    0DH,0AH,'   DATA POLARITY(P/N)$'
  666. MSG19    DEFB    0DH,0AH,0AH,'CASSETTE DRIVER PORT BASE$'
  667. MSG20    DEFB    0DH,0AH,0AH,'DO YOU WANT TO RESTART'
  668.     DEFB    ' THE INPUT PROCESS?(Y/N)$'
  669. MSG21    DEFB    0DH,0AH,0AH,'COMPLETION JUMP ADDRESS$'
  670. DFLT1    DEFB    ' [DEFAULT = $'
  671. DFLT2    DEFB    ' ] $'
  672. BTFLD    DEFB    '00$'
  673. BUFADD    DEFB    80H
  674.     DEFS    81H
  675.     END    START
  676.