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 / BEEHIVE / UTILITYS / SCSLIB.ARC / LIBRARY.Z80 < prev   
Text File  |  1989-09-27  |  15KB  |  934 lines

  1. .COMMENT *
  2.  
  3.     This library was created by M.L.C and M.A.S of Superior Computer
  4. Software... Feel free to use and distribute it! If you would like to send
  5. a donation or an enquiry about our many high quality microbee games then
  6. send a letter to:
  7.  
  8. MARK COCQUIO
  9. c/ Superior Computer Software
  10. 9 Aston St
  11. Gladesville NSW 2111
  12.  
  13.     Look for other S.C.S public domain releases like OPEN, FIGHTER,
  14. NANOC the DESTROYER and FORTRIS.
  15.  
  16.     This library is designed for M80. Modifications may be needed for
  17. other assembler like Z8E (or whatever its called) and MAC. If you have
  18. EDASM (c/ Microbee Systems!) then THROW IT OUT!!!
  19.  
  20.     Stay tuned (in) for more S.C.S releases... M.L.C 8-) 26/01/91 *
  21.  
  22.  
  23.  
  24. ; THIS FILE CONTAINS A LIBRARY OF THE SUBROUTINES THAT I USE THE MOST...
  25.  
  26. ; NOTE THAT MANY OF THESE ROUTINES RELY ON OTHER ROUTINES (INCLUDED HERE)
  27. ; TO WORK PROPERLY... EG:  CHKCOL: SHOULD BE CALLED AT THE START OF EVERY
  28. ; PROGRAMME USING THESE ROUTINES; PUTCRT MUST BE CALLED BEFORE CALLING PCGLAY:
  29.  
  30. ; FINALLY, NEARLY *ALL* OF THESE ROUTINES USE MACROS. THE MACROS ARE INCLUDED
  31. ; AFTER THESE COMMENTS
  32. ; USE THESE AS MUCH AS YOU WANT!
  33.  
  34. ; USEAGE OF SOME ROUTINES:
  35. ; GRLOAD - loads a file (filename pointed to by HL). A=0, normal load,
  36. ; A=1, pixel fadeout screen first, A=2, pixel fade-in new screen, A=3 fadeout
  37. ; old screen and then fade-in new screen. When returned, A=255 means file not
  38. ; found, A=0 means all went as planned. P.S. - When calling, if bit 7 of a is
  39. ; set then the screen will be loaded as 32-line. (32 LINES CAN'T BE FADED IN!)
  40. ; PIXOUT - Fades out both pcgs and text. Needs no parms
  41. ; PIXIN  - Fades in text then pcgs. Needs (DESTIN), where destin is the spot
  42. ; where the screen was loaded (it calculates destin+128+1024 to get PCG loc).
  43. ; PRINTS - Load hl,source and de,destination (in memory). String format is:
  44. ; first_byte,'Stringtoprint$',colour_number. First byte=1 for pcg string.
  45. ; LOADM  - HL points to destination. It calls FNF if the file is not found.
  46. ; SAVEM  - Start save at HL and save for BC sectors (1 sector = 128 bytes)
  47. ; MOREHE - Call this BEFORE calling INKEY. It determines the keyboard type and
  48. ; directs a call to INKEY to the XBIOS-C driver if the machine is a TC.
  49. ; INKEY  - Load A with the value of the key to test. Z if pressed.
  50. ; PUTCRT - Load A with 32 for 64*32 mode. Any other value places the screen in
  51. ; 64*16 mode.
  52. ;
  53. ; TO USE A ROUTINE:
  54. ; YOUR PROGRAMME MUST HAVE THE COMMAND:
  55. ;     .REQUEST    LIBRARY
  56. ; FOLLOWED BY THE COMMAND:
  57. ;     EXTERN    <name>, [<name>,...]
  58. ; WHERE NAME(S) ARE THOSE OF THE ROUTINES WITH :: AFTER THE LABEL.
  59. ; YOU CAN THEN CALL THE ROUTINES AT WILL IN THE REST OF YOUR PROGRAMME,
  60. ; PROVIDED THAT YOU HAVE A COPY OF LIBRARY.REL (THE ASSEMBLED VERSION OF
  61. ; THIS FILE) ON THE SAME DRIVE.
  62.  
  63.  
  64.     .Z80            ; Z80 MNEMONICS
  65.     CSEG            ; RELOCATABLE CODE SEGMENT (NOT ASEG!)
  66.     .RADIX    10D        ; DEFAULT RADIX IS BASE 10 (DECIMAL)
  67.  
  68.  
  69. ; START OF MACROS
  70.  
  71. CLS    MACRO    AMOUNT        ; WRITES <AMOUNT> SPACES TO THE SCREEN RAM
  72.     LD    HL,61440
  73.     LD    DE,61441
  74.     LD    BC,AMOUNT
  75.     LD    (HL),32
  76.     LDIR
  77.     ENDM
  78. PUSHALL    MACRO            ; PUSHES ALL REGISTERS
  79.     PUSH    AF
  80.     PUSH    BC
  81.     PUSH    DE
  82.     PUSH    HL
  83.     PUSH    IX
  84.     PUSH    IY
  85.     ENDM
  86. POPALL    MACRO            ; POPS ALL REGISTERS
  87.     POP    IY
  88.     POP    IX
  89.     POP    HL
  90.     POP    DE
  91.     POP    BC
  92.     POP    AF
  93.     ENDM
  94. BIOS    MACRO    NUMBER        ; PERFORMS BIOS CALL NUMBERED <NUMBER>
  95.     LD    HL,(1)
  96.     PUSH    DE
  97.     LD    DE,3*NUMBER
  98.     ADD    HL,DE
  99.     POP    DE
  100.     LD    IX,$+7
  101.     PUSH    IX
  102.     JP    (HL)
  103.     ENDM
  104.  
  105.  
  106. ; START OF ROUTINES!
  107.  
  108. PUTCRT::    CP    32
  109.     JP    Z,L323
  110.     LD    HL,CTREND        ; PLACE THE SCREEN IN 64*16 MODE
  111. RL323:    LD    B,16
  112. HYDE:   LD    A,B
  113.     DEC    A
  114.     OUT    (12),A
  115.     LD    A,(HL)
  116.     OUT    (13),A
  117.     DEC    HL
  118.     DJNZ    HYDE
  119.     RET
  120.     DB    6BH
  121.     DB    40H
  122.     DB    51H
  123.     DB    37H
  124.     DB    12H
  125.     DB    09H
  126.     DB    12H
  127.     DB    12H
  128.     DB    48H
  129.     DB    0FH
  130.     DB    2FH
  131.     DB    0FH
  132.     DB    0
  133.     DB    0
  134.     DB    0
  135. CTREND: DB    0
  136.     DB    6BH
  137.     DB    40H
  138.     DB    51H
  139.     DB    37H
  140.     DB    25H
  141.     DB    09H
  142.     DB    20H
  143.     DB    23H
  144.     DB    48H
  145.     DB    07H
  146.     DB    20H
  147.     DB    0FH
  148.     DB    20H
  149.     DB    0
  150.     DB    0
  151. L32END:    DB    0
  152. L323:    LD    HL,L32END
  153.     JP    RL323
  154.  
  155.  
  156.  
  157. MORHE::    LD    HL,(1)            ; CALL HERE TO DETERMINE KEYBOARD
  158.     LD    DE,30H            ; TYPE
  159.     ADD    HL,DE
  160.     LD    A,(HL)
  161.     LD    D,0
  162.     CP    2
  163.     JP    C,TEST2
  164.     CP    6
  165.     JP    NC,TEST2
  166.     JP    KXBIOS
  167. TEST2:    CP    7
  168.     JP    C,TEST3
  169.     CP    17H
  170.     JP    NC,TEST3
  171.     JP    KXBIOS
  172. TEST3:    CP    1EH
  173.     JP    C,TEST4
  174.     CP    2FH
  175.     JP    NC,TEST4
  176.     JP    KXBIOS
  177. TEST4:    CP    44H
  178.     JP    C,K6545
  179.     CP    0BFH
  180.     JP    NC,K6545
  181. KXBIOS:    LD    D,0FFH
  182. K6545:    LD    A,D
  183.     CP    255
  184.     JP    Z,TCC
  185.     JP    DONE
  186.  
  187. JOYKEY::    LD    A,255            ; CALL HERE TO INPUT JOYSTICK
  188.     OUT    (1),A            ; AUTOMATICALLY DETECTS LACK OF
  189.     LD    A,191            ; JOYSTICK (IE PRINTER)
  190.     OUT    (1),A
  191.     LD    A,64
  192.     OUT    (0),A
  193.     IN    A,(0)
  194.     PUSH    AF
  195.     BIT    0,A
  196.     JP    Z,WANSET
  197.     POP    AF
  198.     RET
  199. WANSET:    BIT    1,A
  200.     JP    Z,NOJOY
  201.     POP    AF
  202.     RET
  203. NOJOY:    POP    AF
  204.     LD    A,255
  205.     RET
  206.  
  207. INKEY::    PUSH    BC            ; AFTER CALLING MOREHE: CALL HERE
  208.     LD    C,A            ; TO SCAN KEY IN "A" Z=PRESSED
  209.     LD    B,A
  210.     LD    A,12H
  211.     OUT    (0CH),A
  212.     LD    A,B
  213.     RRCA
  214.     RRCA
  215.     RRCA
  216.     RRCA
  217.     AND    3
  218.     OUT    (0DH),A
  219.     LD    A,13H
  220.     OUT    (0CH),A
  221.     LD    A,B
  222.     RLCA
  223.     RLCA
  224.     RLCA
  225.     RLCA
  226.     OUT    (0DH),A
  227.     LD    A,1
  228.     OUT    (0BH),A
  229.     LD    A,10H
  230.     OUT    (0CH),A
  231.     IN    A,(0DH)
  232.     LD    A,1FH
  233.     OUT    (0CH),A
  234.     OUT    (0DH),A
  235. FA:    IN    A,(0CH)
  236.     BIT    7,A
  237.     JR    Z,FA
  238.     IN    A,(0CH)
  239.     CPL
  240.     BIT    6,A
  241.     LD    A,0            ; DO NOT CHANGE TO XOR A!
  242.     OUT    (0BH),A
  243.     LD    A,C
  244.     POP    BC
  245.     RET
  246.  
  247. TCC:    LD    DE,INKEY            ; CALLED BY MOREHE: IF TC
  248.     LD    HL,COMM
  249.     LD    BC,3
  250.     LDIR
  251.     JP    DONE
  252. COMM:    JP    XBIOS
  253. XBIOS:    LD    C,A                ; CALLED BY INKEY: IF TC
  254.     LD    A,15
  255.     RST    28H
  256. DONE:    RET
  257.  
  258.  
  259. SAVEM::    XOR    A            ; SAVE MEMORY STARTING AT HL
  260.     LD    (7CH),A            ; - SAVE FOR BC SECTORS (128 BYTE)
  261.     PUSH    HL            ; (FILENAME IS AT 5CH)
  262.     PUSH    BC
  263.     LD    HL,5CH+12
  264.     LD    DE,5CH+13
  265.     LD    BC,5
  266.     LD    (HL),0
  267.     LDIR
  268.     POP    BC
  269.     POP    HL
  270.     PUSH    HL
  271.     PUSH    BC
  272.     LD    C,19
  273.     LD    DE,5CH
  274.     CALL    BDOS
  275.     LD    C,22
  276.     LD    DE,5CH
  277.     CALL    BDOS
  278.     LD    C,15
  279.     LD    DE,5CH
  280.     POP    BC
  281.     POP    HL
  282. NONG:    LD    DE,128
  283.     PUSH    BC
  284.     PUSH    HL
  285.     PUSH    DE
  286.     LD    C,26
  287.     EX    DE,HL
  288.     CALL    BDOS
  289.     LD    DE,5CH
  290.     LD    C,21
  291.     CALL    BDOS
  292.     POP    DE
  293.     POP    HL
  294.     POP    BC
  295.     ADD    HL,DE
  296.     DEC    BC
  297.     LD    A,B
  298.     OR    C
  299.     JP    NZ,NONG
  300.     LD    C,16
  301.     LD    DE,5CH
  302.     CALL    BDOS
  303.     RET
  304.  
  305.  
  306.  
  307. FNF1:    LD    A,255
  308.     RET
  309. LOADM::    LD    (DESTIN),HL
  310.     XOR    A            ; LOAD FILE (AT 5CH) INTO MEMORY AT
  311.     LD    (7CH),A            ; LOCATION HL
  312.     LD    HL,68H
  313.     LD    DE,69H
  314.     LD    BC,5
  315.     LD    (HL),0
  316.     LDIR
  317.     LD    DE,5CH
  318.     LD    C,15
  319.     CALL    BDOS
  320.     CP    0FFH
  321.     JP    Z,FNF1
  322.     LD    HL,(DESTIN)
  323.     LD    DE,80H
  324. HYDE1:  EX    DE,HL
  325.     PUSH    HL
  326.     PUSH    DE
  327.     LD    C,26
  328.     CALL    BDOS
  329.     POP    DE
  330.     POP    HL
  331.     EX    DE,HL
  332.     ADD    HL,DE
  333.     PUSH    HL
  334.     PUSH    DE
  335.     LD    DE,5CH
  336.     LD    C,20
  337.     CALL    BDOS
  338.     POP    DE
  339.     POP    HL
  340.     OR    A
  341.     JP    Z,HYDE1
  342.     LD    DE,5CH
  343.     LD    C,16
  344.     CALL    BDOS
  345.     RET
  346. DESTIN::    DS    2
  347.  
  348.  
  349. CHKCOL::    LD    A,103            ; (COLFLG)=255 IF COLOUR FITTED
  350.     LD    (63488),A
  351.     LD    A,64
  352.     OUT    (8),A
  353.     LD    A,(63488)
  354.     CP    103
  355.     JP    Z,NOCOL
  356.     XOR    A
  357.     OUT    (8),A
  358.     LD    A,255
  359.     LD    (COLFLG),A
  360.     JP    CHKATT
  361. NOCOL:  XOR    A
  362.     LD    (COLFLG),A
  363.     JP    CHKATT
  364. COLFLG::    DS    1
  365. ATTFLG::    DS    1
  366. CHKATT: LD    A,128
  367.     OUT    (28),A
  368.     LD    A,103        ; ROUTINE TO CHECK IF MACH IS PREMIUM
  369.     LD    (63488),A    ; (CALLED BY CHKCOL:)
  370.     LD    A,129
  371.     OUT    (28),A
  372.     LD    A,(63488)
  373.     CP    103
  374.     JP    Z,NOATT
  375.     LD    A,128
  376.     OUT    (28),A
  377.     LD    A,255
  378.     LD    (ATTFLG),A
  379.     RET
  380. NOATT:  XOR    A
  381.     LD    (ATTFLG),A
  382.     RET
  383.  
  384.  
  385. PRTSTR::    LD    A,(HL)        ; PRINT A STRING ENDING IN "$" TO THE PRINTER
  386.     CP    '$'        ; HL=STRING START
  387.     RET    Z
  388.     CALL    OUTCHR
  389.     INC    HL
  390.     JP    PRTSTR
  391. OUTCHR:    PUSHALL
  392.     LD    E,A
  393.     LD    C,5
  394.     CALL    BDOS        ; SEND CHAR IN "A" TO PRINTER
  395.     POPALL
  396.     RET
  397.  
  398.  
  399. PCGLAY::    CLS    2048
  400.     LD    A,(COLFLG)
  401.     CP    255
  402.     JP    NZ,COLNON
  403.     LD    A,64
  404.     OUT    (8),A
  405.     LD    HL,63488
  406.     LD    DE,63489
  407.     LD    BC,2047
  408.     LD    (HL),2
  409.     LDIR
  410.     XOR    A
  411.     OUT    (8),A
  412. COLNON:    LD    BC,128
  413.     LD    HL,0
  414.     XOR    A
  415. PCGLP:    PUSH    HL
  416.     LD    DE,61440
  417.     ADD    HL,DE
  418.     LD    (HL),A
  419.     INC    HL
  420.     SET    7,A
  421.     LD    (HL),A
  422.     RES    7,A
  423.     DEC    HL
  424.     POP    HL
  425.     INC    HL
  426.     INC    HL
  427.     INC    HL
  428.     INC    HL
  429.     INC    A
  430.     DEC    BC
  431.     PUSH    AF
  432.     LD    A,B
  433.     OR    C
  434.     JP    Z,OUTLP
  435.     POP    AF
  436.     JP    PCGLP
  437. OUTLP:    POP    AF
  438.     LD    HL,61440+512+128
  439.     LD    A,128
  440.     LD    B,128
  441. LOUP3:    LD    (HL),A
  442.     INC    HL
  443.     INC    A
  444.     DJNZ    LOUP3
  445. ;    LD    HL,5CH            ; CAN BE ENABLED TO DISPLAY
  446. ;    LD    DE,61440+14*64        ; A FILENAME
  447. ;    LD    BC,12
  448. ;    LDIR
  449.     RET
  450.  
  451.  
  452. INVERT::    LD    A,(ATTFLG)        ; WILL INVERT BANK(S) ACCORDING TO
  453.     CP    255            ; MACINE TYPE (DEFINED BY ATTFLG)
  454.     JP    NZ,ONEB
  455.     LD    A,128
  456. ILP2:    OUT    (28),A        ;INVERT ALL 8 BANKS
  457.     PUSH    AF
  458.     LD    HL,63488
  459.     LD    BC,2048
  460. ILP1:    LD    A,255
  461.     SUB    (HL)
  462.     LD    (HL),A
  463.     INC    HL
  464.     DEC    BC
  465.     LD    A,B
  466.     OR    C
  467.     JP    NZ,ILP1
  468.     POP    AF
  469.     INC    A
  470.     CP    136
  471.     JP    NZ,ILP2
  472.     RET
  473. ONEB:    LD    HL,63488    ; INVERT ONE BANK
  474.     LD    BC,2048
  475. ILP3:    LD    A,255
  476.     SUB    (HL)
  477.     LD    (HL),A
  478.     INC    HL
  479.     DEC    BC
  480.     LD    A,B
  481.     OR    C
  482.     JP    NZ,ILP3
  483.     RET
  484.  
  485.  
  486. FADE::    LD    BC,2048        ; NUMBER OF LOCS TO BLANK
  487.     LD    DE,0500H    ; SPECIAL MASK
  488.     LD    HL,1
  489. LOUP1:    PUSH    BC        ; ROUTINE TO PICK "RANDOM" NUMBERS ONCE ONLY
  490.     LD    B,255
  491. CRAP:    DEC    B
  492.     JR    NZ,CRAP
  493.     POP    BC
  494.     SRL    H
  495.     RR    L
  496.     JP    NC,OBER
  497.     LD    A,H
  498.     XOR    D
  499.     LD    H,A
  500.     LD    A,L
  501.     XOR    E
  502.     LD    L,A
  503. OBER:    PUSH    DE
  504.     PUSH    HL
  505.     LD    DE,61440-1
  506.     ADD    HL,DE
  507.     PUSH    AF
  508.     LD    A,(TOBL)
  509.     LD    (HL),A
  510.     PUSH    HL
  511.     PUSH    DE
  512.     LD    A,(COLFLG)
  513.     CP    255
  514.     JP    NZ,DONOT
  515.     LD    A,64
  516.     OUT    (8),A
  517.     LD    DE,2048
  518.     ADD    HL,DE
  519.     LD    (HL),15
  520.     XOR    A
  521.     OUT    (8),A
  522. DONOT:    POP    DE
  523.     POP    HL
  524.     POP    AF
  525.     POP    HL
  526.     POP    DE
  527.     DEC    BC
  528.     LD    A,B
  529.     OR    C
  530.     JP    NZ,LOUP1
  531.     LD    HL,61440
  532.     LD    (HL),64
  533.     LD    A,(COLFLG)
  534.     CP    255
  535.     RET    NZ
  536.     LD    A,64
  537.     OUT    (8),A
  538.     LD    HL,63488
  539.     LD    DE,63489
  540.     LD    BC,2048        ; ALSO CLEARS COLOUR
  541.     LD    (HL),7
  542.     LDIR
  543.     XOR    A
  544.     OUT    (8),A
  545.     RET
  546. TOBL:    DB    32        ; CHANGE THIS BYTE FOR DIFFERENT FILLS
  547.  
  548.  
  549. PRINTS::    PUSHALL            ; MISC PRINTING ROUTINE; USAGE:
  550.     LD    A,(HL)        ; PCG=1,'STRINGENDINGIN$',COLOUR
  551.     LD    (PRINT0),A    ; THEN LD HL,STRING AND LD DE,DESTINATION
  552.     INC    HL
  553.     PUSH    HL
  554.     PUSH    DE
  555. PRLP:    LD    A,(HL)
  556.     CP    '$'
  557.     JP    Z,NEXT
  558.     EX    AF,AF'
  559.     LD    A,(PRINT0)
  560.     CP    1
  561.     JP    NZ,CONT
  562.     EX    AF,AF'
  563.     ADD    A,128
  564.     EX    AF,AF'
  565. CONT:    EX    AF,AF'
  566.     LD    (DE),A
  567.     INC    HL
  568.     INC    DE
  569.     JP    PRLP
  570. NEXT:    INC    HL
  571.     PUSH    HL
  572.     POP    BC
  573.     POP    DE
  574.     POP    HL
  575.     LD    A,(COLFLG)
  576.     CP    255
  577.     JR    NZ,COLNT
  578.     LD    A,64
  579.     OUT    (8),A
  580.     LD    A,(BC)
  581.     LD    BC,2048
  582.     PUSH    HL
  583.     PUSH    DE
  584.     POP    HL
  585.     ADD    HL,BC
  586.     PUSH    HL
  587.     POP    DE
  588.     POP    HL
  589. CLP:    PUSH    AF
  590.     LD    A,(HL)
  591.     CP    '$'
  592.     JP    Z,PREND
  593.     INC    HL
  594.     POP    AF
  595.     LD    (DE),A
  596.     INC    DE
  597.     JP    CLP
  598. PREND:  POP    AF
  599.     XOR    A
  600.     OUT    (8),A
  601. COLNT:    POPALL
  602.     RET
  603. PRINT0:    DS    1            ; FLAG USED INTERNALLY
  604.  
  605.  
  606. FNF:    POP    AF
  607.     LD    A,255            ; A=255=FILE NOT FOUND
  608.     RET
  609. GRLOAD::    PUSH    AF
  610.     PUSH    HL
  611.     BIT    1,A
  612.     CALL    NZ,PIXOUT
  613.     POP    HL
  614.     LD    DE,5CH
  615.     LD    BC,12
  616.     LDIR
  617.     LD    HL,30000        ; GRLOAD NEEDS A SCRATCH AREA AT LEAST
  618.     CALL    LOADM            ; 5120 BYTES IN SIZE. CHANGE HL TO A
  619.     CP    255            ; SUITABLE AREA AS REQUIRED
  620.     JR    Z,FNF
  621.     POP    AF
  622.     LD    HL,63488
  623.     LD    DE,63489
  624.     LD    BC,2048
  625.     LD    (HL),0
  626.     LDIR
  627.     PUSH    AF
  628.     LD    A,(COLFLG)
  629.     CP    255
  630.     JP    NZ,SKCOL        ; SKIP COLOUR IF NO COLOUR RAM
  631.     LD    A,64
  632.     OUT    (8),A
  633.     POP    AF
  634.     BIT    7,A
  635.     PUSH    AF
  636.     JP    NZ,L321
  637.     LD    HL,30000+128        ; AREA CONTAINING COLOUR RAM DATA
  638.     LD    DE,63488
  639.     LD    BC,1024
  640.     LDIR
  641. RL321:    XOR    A
  642.     OUT    (8),A
  643. SKCOL:    POP    AF
  644.     BIT    0,A
  645.     JP    NZ,PIX1
  646.     BIT    7,A
  647.     JP    NZ,L322
  648.     LD    HL,30000+128+1024
  649.     LD    DE,63488
  650.     LD    BC,2048
  651.     LDIR
  652.     LD    HL,30000+128+1024+2048    ; AREA CONTAINING SCREEN RAM DATA
  653.     LD    DE,61440
  654.     LD    BC,1024
  655.     LDIR
  656. RL322:    XOR    A
  657.     RET
  658. PIX1:    CALL    PIXIN
  659.     XOR    A
  660.     RET
  661. L321:    LD    HL,30000+128
  662.     LD    DE,63488
  663.     LD    BC,2048
  664.     LDIR
  665.     JP    RL321
  666. L322:    LD    HL,30000+128+2048
  667.     LD    DE,63488
  668.     LD    BC,2048
  669.     LDIR
  670.     LD    HL,30000+128+2048+2048
  671.     LD    DE,61440
  672.     LD    BC,2048
  673.     LDIR
  674.     JP    RL322
  675.  
  676.  
  677. PIXOUT::    PUSHALL
  678.     CALL    PCGOUT            ; CALL PIXOUT AND HAVE A PIXEL-BY-PIXEL
  679.     LD    HL,61440        ; FADEOUT OF PCG AND THEN TEXT ONSCREEN
  680.     LD    BC,1024
  681. LOOPFF:    LD    A,(HL)
  682.     BIT    7,A
  683.     CALL    NZ,CLEAR
  684.     DEC    BC
  685.     INC    HL
  686.     LD    A,B
  687.     OR    C
  688.     JP    NZ,LOOPFF
  689.     LD    A,1
  690.     OUT    (11),A
  691.     LD    HL,61440
  692.     LD    DE,63488
  693.     LD    BC,2048
  694.     LDIR
  695.     XOR    A
  696.     OUT    (11),A
  697.     LD    HL,61440
  698.     LD    BC,1024
  699. LOOPFE:    SET    7,(HL)
  700.     INC    HL
  701.     DEC    BC
  702.     LD    A,B
  703.     OR    C
  704.     JP    NZ,LOOPFE
  705.     CALL    PCGOUT
  706.     POPALL
  707.     RET
  708. PCGOUT::    LD    HL,FODATA
  709.     LD    B,128
  710. LOOP:    LD    IY,63488
  711.     LD    C,128
  712. LOOP2:    PUSH    IY
  713.     LD    A,(HL)
  714.     LD    E,A
  715.     LD    D,0
  716.     ADD    IY,DE
  717.     INC    HL
  718.     LD    A,(HL)
  719.     PUSH    HL
  720.     CALL    BITTY
  721.     POP    HL
  722.     DEC    HL
  723.     POP    IY
  724.     LD    DE,16
  725.     ADD    IY,DE
  726.     DEC    C
  727.     JP    NZ,LOOP2
  728.     INC    HL
  729.     INC    HL
  730.     DJNZ    LOOP
  731.     RET
  732. BITTY:    PUSH    IY
  733.     POP    HL
  734.     CP    0
  735.     JP    Z,ZERO
  736.     CP    1
  737.     JP    Z,ONE
  738.     CP    2
  739.     JP    Z,TWO
  740.     CP    3
  741.     JP    Z,THREE
  742.     CP    4
  743.     JP    Z,FOUR
  744.     CP    5
  745.     JP    Z,FIVE
  746.     CP    6
  747.     JP    Z,SIX
  748.     RES    7,(HL)
  749.     RET
  750. ZERO:    RES    0,(HL)
  751.     RET
  752. ONE:    RES    1,(HL)
  753.     RET
  754. TWO:    RES    2,(HL)
  755.     RET
  756. THREE:    RES    3,(HL)
  757.     RET
  758. FOUR:    RES    4,(HL)
  759.     RET
  760. FIVE:    RES    5,(HL)
  761.     RET
  762. SIX:    RES    6,(HL)
  763.     RET
  764. SPOT::    DS    2
  765. PIXIN::    PUSHALL
  766.     LD    HL,63488            ; CALL HERE TO HAVE A PIXEL
  767.     LD    DE,63489            ; FADE-IN
  768.     LD    BC,2047
  769.     LD    (HL),0
  770.     LDIR
  771.     LD    HL,(DESTIN)
  772.     LD    DE,128+1024+2048
  773.     ADD    HL,DE
  774.     LD    DE,61440
  775.     LD    BC,1024
  776. ANGAG:    LD    A,(HL)
  777.     BIT    7,A
  778.     JP    NZ,HMMAA
  779.     SET    7,A
  780.     LD    (DE),A
  781. HMMAA:    INC    DE
  782.     INC    HL
  783.     DEC    BC
  784.     LD    A,B
  785.     OR    C
  786.     JP    NZ,ANGAG
  787.     LD    HL,61440
  788.     LD    (SPOT),HL
  789.     LD    A,1
  790.     OUT    (11),A            ; SWITCH IN CHARACTER ROM
  791.     CALL    INPCG
  792.     XOR    A
  793.     OUT    (11),A
  794.     LD    HL,(DESTIN)
  795.     LD    DE,1152
  796.     ADD    HL,DE
  797.     LD    (SPOT),HL
  798.     LD    HL,(DESTIN)
  799.     LD    DE,128+1024+2048
  800.     ADD    HL,DE
  801.     LD    DE,61440
  802.     LD    BC,1024
  803.     LDIR
  804.     LD    HL,63488
  805.     LD    DE,63489
  806.     LD    BC,2047
  807.     LD    (HL),0
  808.     LDIR
  809.     CALL    INPCG
  810.     POPALL
  811.     RET
  812. INPCG::    LD    HL,FODATA
  813.     LD    B,128
  814. LOUP:    LD    IY,(SPOT)
  815.     LD    C,128
  816. LOUP2:    PUSH    IY
  817.     LD    A,(HL)
  818.     LD    E,A
  819.     LD    D,0
  820.     ADD    IY,DE
  821.     INC    HL
  822.     LD    A,(HL)
  823.     PUSH    HL
  824.     CALL    BITTE
  825.     POP    HL
  826.     DEC    HL
  827.     POP    IY
  828.     LD    DE,16
  829.     ADD    IY,DE
  830.     DEC    C
  831.     JP    NZ,LOUP2
  832.     INC    HL
  833.     INC    HL
  834.     DJNZ    LOUP
  835.     RET
  836. BITTE:    PUSH    IY
  837.     POP    HL
  838.     CP    0
  839.     JP    Z,ZERO1
  840.     CP    1
  841.     JP    Z,ONE1
  842.     CP    2
  843.     JP    Z,TWO1
  844.     CP    3
  845.     JP    Z,THREE1
  846.     CP    4
  847.     JP    Z,FOUR1
  848.     CP    5
  849.     JP    Z,FIVE1
  850.     CP    6
  851.     JP    Z,SIX1
  852.     BIT    7,(HL)
  853.     RET    Z
  854.     CALL    FIXHL
  855.     SET    7,(HL)
  856.     RET
  857. ZERO1:    BIT    0,(HL)
  858.     RET    Z
  859.     CALL    FIXHL
  860.     SET    0,(HL)
  861.     RET
  862. ONE1:    BIT    1,(HL)
  863.     RET    Z
  864.     CALL    FIXHL
  865.     SET    1,(HL)
  866.     RET
  867. TWO1:    BIT    2,(HL)
  868.     RET    Z
  869.     CALL    FIXHL
  870.     SET    2,(HL)
  871.     RET
  872. THREE1:    BIT    3,(HL)
  873.     RET    Z
  874.     CALL    FIXHL
  875.     SET    3,(HL)
  876.     RET
  877. FOUR1:    BIT    4,(HL)
  878.     RET    Z
  879.     CALL    FIXHL
  880.     SET    4,(HL)
  881.     RET
  882. FIVE1:    BIT    5,(HL)
  883.     RET    Z
  884.     CALL    FIXHL
  885.     SET    5,(HL)
  886.     RET
  887. SIX1:    BIT    6,(HL)
  888.     RET    Z
  889.     CALL    FIXHL
  890.     SET    6,(HL)
  891.     RET
  892. FIXHL:    PUSH    DE
  893.     PUSH    HL
  894.     LD    DE,(SPOT)
  895.     LD    HL,63488
  896.     XOR    A
  897.     SBC    HL,DE
  898.     PUSH    HL
  899.     POP    DE
  900.     POP    HL
  901.     ADD    HL,DE
  902.     POP    DE
  903.     RET
  904. CLEAR:    LD    A,32
  905.     LD    (HL),A
  906.     RET
  907. FODATA:    DB    14,0,5,6,12,4,15,7,2,0,14,3,2,1,9,3    ; PIXEL FADEOUT DATA
  908.     DB    11,6,10,7,4,4,1,5,2,4,6,7,8,1,2,3
  909.     DB    9,4,13,2,11,3,5,7,14,6,0,5,15,4,3,6
  910.     DB    9,7,3,0,5,5,6,6,8,7,5,1,9,5,13,3
  911.     DB    2,6,14,4,4,2,6,0,13,6,0,2,1,4,15,6
  912.     DB    14,2,11,1,8,4,12,1,4,0,6,5,9,2,10,5
  913.     DB    10,6,5,2,1,6,15,2,3,7,10,1,5,0,11,7
  914.     DB    7,2,3,3,6,4,12,7,15,5,9,6,13,7,14,5
  915.     DB    8,3,8,2,0,7,7,1,12,3,10,4,12,6,0,4
  916.     DB    15,1,13,4,8,6,11,5,9,1,14,7,0,1,7,4
  917.     DB    11,4,1,2,3,1,9,0,4,7,1,7,7,6,1,0
  918.     DB    1,3,6,3,7,0,13,1,6,1,6,2,15,0,12,5
  919.     DB    3,4,0,6,3,2,5,4,13,5,0,3,4,5,4,6
  920.     DB    10,3,7,3,10,2,2,7,12,0,14,1,2,2,5,3
  921.     DB    0,0,2,5,12,2,13,0,4,3,7,5,10,0,11,2
  922.     DB    8,0,15,3,7,7,4,1,11,0,1,1,3,5,8,5
  923.  
  924. ; COMMONLY USED EQUATES
  925.  
  926. ESC    EQU    27
  927. CR    EQU    0DH
  928. LF    EQU    0AH
  929. BDOS    EQU    5
  930.  
  931.     END    ; OF ASSEMBLY
  932.  
  933.