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 / OPEN63.ARC / OPEN.Z80 < prev    next >
Text File  |  1991-07-10  |  20KB  |  1,274 lines

  1.     ASEG
  2.     .Z80
  3.     .RADIX 10D
  4.  
  5. ; SOURCE CODE FOR OPEN.COM, VERSION (SEE BELOW!). THIS IS THE ".COM" VERSION
  6. ; OF THE BASIC PROGRAMME I WROTE WHICH "OPENS" (THE TERM COMES FROM WAY BACK
  7. ; WHEN I WAS GETTING INTO BASIC DATA FILES - AND GRAPHICS - BUT MORE OF THAT
  8. ; LATER) AND DISPLAYS, IF YOU LIKE, GRSAVED SCREENS CREATED IN THE "GRSAVE"
  9. ; FORMAT USED BY BASIC. IT SUPPORTS NORMAL SCREENS (COLOUR OR NOT), BEING
  10. ; 64 CHARACTERS BY 16 LINES, DOUBLE DEPTH SCREENS (64 BY 32); A FORMAT
  11. ; DEVEOPED BY S.C.S (BASIC CANNOT SUPPORT IT WITHOUT MODIFICATION) AND THE
  12. ; LATEST SCREEN SAVE - MULTI-BANK OR HIRES2.
  13. ; THIS LATEST VERSION ALSO RECOGNISES, DISPLAYS AND WILL DUMP 80 BY 24 SCREENS.
  14. ; THIS FORMAT MAKES OPEN WORK 100% WITH DEXIGN. IT DETERMINES BETWEEN SCREEN
  15. ; TYPES BY CHECKING THEIR LENGTH AS THEY ARE LOADED. OTHER SUPPORTED FEATURES
  16. ; ARE: OPTION OF DISPLAYING SCREEN AS A PCG LAYOUT ONLY (DISABLED WITH HIRES2
  17. ; SCREENS (OBVIOUSLY) - YOU ONLY SEE ONE BANK), DISPLAYING INVERTED, MULTIPLE
  18. ; DRIVES ARE ALLOWED, AND A SUPER SCREEN DUMPER (WORKS WITH WHATEVER
  19. ; PRINTER THE SYSTEM IS SET TO - THAT IS PARALLEL OR SERIAL).
  20. ; ANYWAY, MODIFY AND HAVE FUN. THANKS ARE IN ORDER TO M.A.S FOR SOME ROOTEENS
  21. ; (!). P.S. MY CODING MAY BE CRYPTIC, AND MY LABELS WIERD, BUT AT LEAST IT
  22. ; WORKS!!
  23. ; P.P.S - THE SCREEN DUMPING ROUTINE COMES FROM AN ANCIENT ONLINE MAGAZINE.
  24. ; IT WAS ORIGINALLY IN "USR" FORMAT SO I DISASSEMBLED IT AND GOT IT GOING IN
  25. ; VARIOUS MODES. THUS THE REASON FOR THE "LABELX" AND ALL THAT STUFF (IE I
  26. ; HAVEN'T GONE THROUGH THE CODE IN GREAT DETAIL). YOU CAN THANK THE FREAKY
  27. ; DAZZLESTAR FOR THE FREAKY RADIX - THAT DOG OF A PROGRAMME!
  28.  
  29.  
  30. ; UPDATES: (FOR VERSION...)
  31.  
  32. ;      6.3 - ADDED SUPPORT FOR CP/M 80 BY 24 SCREENS (ALA DEXIGN)
  33. ;       6.2 - ALLOWS THE PROPER "D:FNAME.EXT" FILENAME FORMAT
  34. ;      6.1 - DISPLAYED THE DEFAULT DRIVE (HAD A BUG). SUPERCEEDED BY 6.2
  35. ;      6.0 - ORIGINAL ".COM" VERSION
  36.  
  37.  
  38. CLS    MACRO    AMOUNT
  39.     LD    HL,61440
  40.     LD    DE,61441
  41.     LD    BC,AMOUNT
  42.     LD    (HL),32
  43.     LDIR
  44.     ENDM
  45.  
  46. PUSHALL    MACRO
  47.     PUSH    AF
  48.     PUSH    BC
  49.     PUSH    DE
  50.     PUSH    HL
  51.     PUSH    IX
  52.     PUSH    IY
  53.     ENDM
  54.  
  55. POPALL    MACRO
  56.     POP    IY
  57.     POP    IX
  58.     POP    HL
  59.     POP    DE
  60.     POP    BC
  61.     POP    AF
  62.     ENDM
  63.  
  64. BIOS    MACRO    NUMBER
  65.     LD    HL,(1)
  66.     PUSH    DE
  67.     LD    DE,3*NUMBER
  68.     ADD    HL,DE
  69.     POP    DE
  70.     LD    IX,$+7
  71.     PUSH    IX
  72.     JP    (HL)
  73.     ENDM
  74.  
  75.  
  76.     ORG    100H
  77.  
  78.     JP    OVER
  79.  
  80. BDOS    EQU    5
  81. CR    EQU    0DH
  82. LF    EQU    0AH
  83. ESC    EQU    27
  84.  
  85.     DB    0DH,0AH,'OPEN.COM super screen displayer/dumper V6.3.',0Dh,0Ah
  86.     DB    'By M.L.C for S.C.S. What a nosey person you are!!',0Dh,0Ah,0Dh,0Ah,1Ah
  87. FILNAM:    DB    '               '    ; FILENAME STORE
  88. PRINT0:    DS    1            ; FLAG USED BY "PRINTS"
  89. COLFLG:    DS    1            ; COLOUR FLAG - SAME AS BASIC
  90. ATTFLG:    DS    1            ; AS ABOVE, FOR ATTRIBUTE RAM
  91. LINES:    DS    1            ; NUMBER OF LINES IN PIC FOR DUMPING
  92. MODE:    DS    1            ; PRINTING MODE (SMALL, MED OR LARGE)
  93. SPESH:    DS    1            ; USED WHEN PRINTING IN 80 BY 24
  94. ANS1:    DS    1
  95. ANS2:    DS    1
  96. ANS3:    DS    1            ; } ANSWERS TO ALL THE QUESTIONS
  97. ANS5:    DS    1
  98. ANS6:    DS    1
  99. ANS7:    DS    1
  100. SAVEEM:    DS    2            ; USED BY INPUT:
  101. INITPR:    DB    ESC,'@$'
  102. ENDSTR:    DB    7,7,7,7,7,ESC,'@',0DH,0AH,'$'
  103.     DB    ESC,'A',8,'$'
  104. BEEPR:    DB    ESC,'K',0,2,'$'
  105. BEEP1:    DB    ESC,'K',128,2,'$'
  106. ;    DB    ESC,'Z',0,2,'$'
  107. ;    DB    ESC,'Y',0,2,'$'
  108. ;    DB    ESC,'*',0,0,2,'$'
  109. TOBL:    DB    ' '
  110. TITLE:    DB    0,'----**** OPEN.COM VERSION 6.3. AGE 09/07/91. BY M.L.C ****---- $',15
  111. INSTR:    DB    0,'PRESS <CR> TO ACCEPT DEFAULT QUESTION VALUE (SHOWN ON LEFT). $',2
  112. QUES1:    DB    0,'What is the name of the screen for  opening? $',3
  113. QUES2:    DB    0,'[S] Display  as a (S)creen or  (P)CG layout? $',4
  114. QUES3:    DB    0,'[N] Display screen (N)ormally or (I)nverted? $',2
  115. QUES5:    DB    0,'[N] Dump screen to  a printer after loading? $',3
  116. QUES6:    DB    0,'[E] Dump for (E)pson  printer or (M)icrobee? $',4
  117. QUES7:    DB    0,'[S] (S)mall,  (M)edium or (L)arge  printout? $',6
  118.  
  119.     DB    6BH,50H,58H,37H,1BH,05H,18H,1AH,48H,0AH,2AH,0AH,20H,0,0
  120. L24END:    DB    0        ; CRT FOR CP/M'S 80 BY 24 SCREEN FORMAT
  121.  
  122.     DB    'k@Q7&'
  123.     DB    3
  124.     DB    ' "H'
  125.     DB    7
  126.     DB    'o'        ; CRT DATA FOR 32 LINE DISPLAY
  127.     DB    7
  128.     DB    ' '
  129.     DB    0
  130.     DB    0FFh
  131. L32END:    DB    0FFH
  132.  
  133.     DB    'k@Q7'
  134.     DB    12h,9,10h,11h
  135.     DB    'H'
  136.     DB    0Fh        ; AS ABOVE FOR 16 LINES; ALA BASIC
  137.     DB    '/'
  138.     DB    0Fh,0,0,0
  139. CTREND:    DB    0
  140.  
  141.  
  142. CHKCOL: CALL    CHKATT
  143.     LD    A,103        ; ROUTINE TO CHECK IF MACH HAS COLOUR
  144.     LD    (63488),A
  145.     LD    A,64
  146.     OUT    (8),A
  147.     LD    A,(63488)
  148.     CP    103
  149.     JP    Z,NOCUL
  150.     XOR    A
  151.     OUT    (8),A
  152.     LD    A,255
  153.     LD    (COLFLG),A
  154.     RET
  155. NOCUL:  XOR    A
  156.     LD    (COLFLG),A
  157.     RET
  158.  
  159. CHKATT: LD    A,128
  160.     OUT    (28),A
  161.     LD    A,103        ; ROUTINE TO CHECK IF MACH IS PREMIUM
  162.     LD    (63488),A
  163.     LD    A,129
  164.     OUT    (28),A
  165.     LD    A,(63488)
  166.     CP    103
  167.     JP    Z,NOATT
  168.     LD    A,128
  169.     OUT    (28),A
  170.     LD    A,255
  171.     LD    (ATTFLG),A
  172.     RET
  173. NOATT:  XOR    A
  174.     LD    (ATTFLG),A
  175.     RET
  176.  
  177. PRTSTR:    LD    A,(HL)        ; PRINT A STRING (PRINTER)
  178.     CP    '$'
  179.     RET    Z
  180.     CALL    OUTCHR
  181.     INC    HL
  182.     JP    PRTSTR
  183.  
  184. SPCOL:    LD    A,(COLFLG)    ; SPECIAL COLOUR ROUTINE - COLOUR LHS OF SCREEN
  185.     CP    255
  186.     RET    NZ
  187.     LD    A,64
  188.     OUT    (8),A
  189.     LD    HL,63488+256+128
  190.     LD    B,13
  191. GRUNT:    LD    (HL),15
  192.     INC    HL
  193.     LD    (HL),15
  194.     INC    HL
  195.     LD    (HL),15
  196.     LD    DE,62
  197.     ADD    HL,DE
  198.     DJNZ    GRUNT
  199.     XOR    A
  200.     OUT    (8),A
  201.     RET    
  202.  
  203. PRINTS:    PUSHALL            ; MISC PRINTING ROUTINE; USAGE:
  204.     LD    A,(HL)        ; PCG=1,'STRINGENDINGIN$',COLOUR
  205.     LD    (PRINT0),A    ; THEN LD HL,STING, AND DE, DESTINATION
  206.     INC    HL
  207.     PUSH    HL
  208.     PUSH    DE
  209. PRLP:    LD    A,(HL)
  210.     CP    '$'
  211.     JP    Z,NEXT
  212.     EX    AF,AF'
  213.     LD    A,(PRINT0)
  214.     CP    1
  215.     JP    NZ,CONT
  216.     EX    AF,AF'
  217.     ADD    A,128
  218.     EX    AF,AF'
  219. CONT:    EX    AF,AF'
  220.     LD    (DE),A
  221.     INC    HL
  222.     INC    DE
  223.     JP    PRLP
  224. NEXT:    INC    HL
  225.     PUSH    HL
  226.     POP    BC
  227.     POP    DE
  228.     POP    HL
  229.     LD    A,(COLFLG)
  230.     CP    255
  231.     JR    NZ,COLNT
  232.     LD    A,64
  233.     OUT    (8),A
  234.     LD    A,(BC)
  235.     LD    BC,2048
  236.     PUSH    HL
  237.     PUSH    DE
  238.     POP    HL
  239.     ADD    HL,BC
  240.     PUSH    HL
  241.     POP    DE
  242.     POP    HL
  243. CLP:    PUSH    AF
  244.     LD    A,(HL)
  245.     CP    '$'
  246.     JP    Z,PREND
  247.     INC    HL
  248.     POP    AF
  249.     LD    (DE),A
  250.     INC    DE
  251.     JP    CLP
  252. PREND:  POP    AF
  253.     XOR    A
  254.     OUT    (8),A
  255. COLNT:    POPALL
  256.     CALL    SPCOL
  257.     RET
  258.  
  259.  
  260. ;LIN16A:    LD    BC,1024
  261. ;    LD    DE,        ; NEEDS THE MASK FOR 1024 BYTES
  262. ;    LD    HL,1
  263. ;    JR    LOUP
  264. FADE:    ;LD    A,(LINES)
  265. ;    CP    32
  266. ;    JR    NZ,LIN16A
  267.     LD    BC,2048        ; NUMBER OF LOCS TO BLANK
  268.     LD    DE,0500H    ; SPECIAL MASK
  269.     LD    HL,1
  270. LOUP:    PUSH    BC        ; ROUTINE TO PICK "RANDOM" NUMBERS ONCE ONLY
  271.     LD    B,255
  272. CRAP:    DEC    B
  273.     JR    NZ,CRAP
  274.     POP    BC
  275.     SRL    H
  276.     RR    L
  277.     JP    NC,OBER
  278.     LD    A,H
  279.     XOR    D
  280.     LD    H,A
  281.     LD    A,L
  282.     XOR    E
  283.     LD    L,A
  284. OBER:    PUSH    DE
  285.     PUSH    HL
  286.     LD    DE,61440-1
  287.     ADD    HL,DE
  288.     PUSH    AF
  289.     LD    A,(TOBL)
  290.     LD    (HL),A
  291.     PUSH    HL
  292.     PUSH    DE
  293.     LD    A,(COLFLG)
  294.     CP    255
  295.     JP    NZ,DONOT
  296.     LD    A,64
  297.     OUT    (8),A
  298.     LD    DE,2048
  299.     ADD    HL,DE
  300.     LD    (HL),15
  301.     XOR    A
  302.     OUT    (8),A
  303. DONOT:    POP    DE
  304.     POP    HL
  305.     POP    AF
  306.     POP    HL
  307.     POP    DE
  308.     DEC    BC
  309.     LD    A,B
  310.     OR    C
  311.     JP    NZ,LOUP
  312.     LD    HL,61440
  313.     LD    (HL),64
  314.     LD    A,(COLFLG)
  315.     CP    255
  316.     RET    NZ
  317.     LD    A,64
  318.     OUT    (8),A
  319.     LD    HL,63488
  320.     LD    DE,63489
  321.     LD    BC,2048        ; ALSO CLEARS COLOUR
  322.     LD    (HL),7
  323.     LDIR
  324.     XOR    A
  325.     OUT    (8),A
  326.     RET
  327.  
  328. OUTCHR:    PUSHALL
  329.     LD    E,A
  330.     LD    C,5
  331.     CALL    BDOS        ; SEND CHAR IN "A" TO PRINTER
  332.     POPALL
  333.     RET
  334.  
  335. LOADM:    PUSHALL            ; PRETTY EXPLANITORY!
  336.     PUSH    HL
  337.     XOR    A
  338.     LD    (7CH),A
  339.     LD    HL,5CH+12
  340.     LD    DE,5CH+13
  341.     LD    BC,6
  342.     LD    (HL),0
  343.     LDIR
  344.     LD    DE,5CH
  345.     LD    C,15
  346.     CALL    BDOS
  347.     CP    0FFH
  348.     JP    Z,LODERR
  349.     POP    HL
  350.     LD    DE,128
  351. LOOP1:  EX    DE,HL
  352.     PUSH    HL
  353.     PUSH    DE
  354.     LD    C,26
  355.     CALL    BDOS        ; FILE LOAD ROUTINE
  356.     POP    DE
  357.     POP    HL
  358.     EX    DE,HL
  359.     ADD    HL,DE
  360.     PUSH    HL
  361.     PUSH    DE
  362.     LD    DE,5CH
  363.     LD    C,20
  364.     CALL    BDOS
  365.     POP    DE
  366.     POP    HL
  367.     OR    A
  368.     JR    Z,LOOP1
  369.     LD    DE,5CH
  370.     LD    C,16
  371.     CALL    BDOS
  372.     POPALL
  373.     XOR    A
  374.     RET
  375. LODERR:    POP    HL
  376.     POPALL
  377.     LD    A,2
  378.     RET
  379.  
  380. INVERT:    LD    A,(ATTFLG)
  381.     CP    255
  382.     JP    NZ,ONE
  383.     LD    A,128
  384. ILP2:    OUT    (28),A        ;INVERT ALL 8 BANKS
  385.     PUSH    AF
  386.     LD    HL,63488
  387.     LD    BC,2048
  388. ILP1:    LD    A,255
  389.     SUB    (HL)
  390.     LD    (HL),A
  391.     INC    HL
  392.     DEC    BC
  393.     LD    A,B
  394.     OR    C
  395.     JP    NZ,ILP1
  396.     POP    AF
  397.     INC    A
  398.     CP    136
  399.     JP    NZ,ILP2
  400.     RET
  401. ONE:    LD    HL,63488
  402.     LD    BC,2048
  403. ILP3:    LD    A,255
  404.     SUB    (HL)
  405.     LD    (HL),A
  406.     INC    HL
  407.     DEC    BC
  408.     LD    A,B
  409.     OR    C
  410.     JP    NZ,ILP3
  411.     RET
  412.  
  413. GETKEY:    BIOS    2
  414.     CP    32
  415.     RET    Z
  416.     RES    5,A        ; ALWAYS UPPER CASE!!
  417.     RET
  418.  
  419. GOCPM:    LD    A,7FH        ; FADE WITH 'DEL CHAR' INSTEAD OF SPACE
  420.     LD    (TOBL),A
  421.     CALL    FADE        ; RETURN TO CP/M
  422.     CLS    2047
  423.     BIOS    0        ; WARM BOOT
  424.  
  425. PUTCRT: LD    B,16        ; PUT VALUES POINTED TO BY HL INTO 6545
  426. HYE:    LD    A,B
  427.     DEC    A
  428.     OUT    (12),A
  429.     LD    A,(HL)
  430.     OUT    (13),A
  431.     DEC    HL
  432.     DJNZ    HYE
  433.     RET
  434.  
  435. INCHR:    PUSH    BC        ; FILNAME INPUT ROUTINE
  436.     PUSH    HL
  437.     PUSH    DE
  438.     BIOS    2
  439.     CP    65
  440.     JP    C,SPCBB        ; FIX CHARS IF LOWER CASE
  441.     RES    5,A
  442. SPCBB:    POP    DE
  443.     POP    HL
  444.     POP    BC
  445.     RET
  446. INPUT:    EX    DE,HL
  447.     LD    HL,QUES1
  448.     CALL    PRINTS
  449.     EX    DE,HL
  450.     LD    HL,61440+256+64+46
  451.     LD    (SAVEEM),HL
  452.     LD    B,0
  453. INPUT1:    LD    (HL),'_'
  454.     PUSH    IX
  455.     PUSH    BC
  456.     CALL    INCHR
  457.     POP    BC
  458.     POP    IX
  459. INPUT2:    CP    8
  460.     JP    NZ,INPUT3
  461.     LD    A,B
  462.     CP    1
  463.      JP    C,INPUT1
  464.     LD    (HL),32
  465.     DEC    B
  466.     DEC    HL
  467.     JP    INPUT1
  468. INPUT3:    CP    13
  469.     JP    NZ,INPUT4
  470.     LD    A,B
  471.     PUSH    AF
  472.     PUSH    HL
  473.     POP    DE
  474.     LD    HL,(SAVEEM)
  475.     CALL    CNVRT
  476.     POP    AF
  477.     RET
  478. INPUT4:    CP    33
  479.     JP    C,INPUT1
  480.     CP    128
  481.     JP    NC,INPUT1
  482.     LD    C,A
  483.     LD    A,B
  484.     CP    14
  485.     JP    Z,INPUT1
  486.     INC    B
  487.     LD    (HL),C
  488.     INC    HL
  489.     JP    INPUT1
  490. CNVRT:    LD    DE,FILNAM-1
  491. WHELL:    LD    A,(HL)
  492.     CP    '_'
  493.     JP    Z,OWHELL
  494.     INC    DE
  495.     INC    HL
  496.     LD    (DE),A
  497.     JP    WHELL
  498. OWHELL:    RET
  499.  
  500. COLOUR:    PUSH    HL
  501.     POP    DE
  502.     INC    DE
  503.     LD    (HL),A
  504.     LDIR
  505.     RET
  506.  
  507. OVER:    LD    A,144        ; START OF MAIN PROG (FINALLY!)
  508.     OUT    (28),A
  509.     LD    HL,61440
  510.     LD    DE,61441
  511.     LD    BC,2048
  512.     LD    (HL),0
  513.     LDIR
  514.     LD    A,128
  515.     OUT    (28),A
  516.     CLS    2048
  517.     CALL    CHKCOL
  518.     LD    (18000),A
  519.     LD    HL,64000
  520.     LD    DE,64001
  521.     LD    BC,16
  522.     LD    (HL),0
  523.     LDIR
  524.     LD    E,1AH
  525.     LD    C,2
  526.     CALL    BDOS
  527.     LD    HL,CTREND
  528.     CALL    PUTCRT
  529.     LD    HL,TITLE
  530.     LD    DE,61440
  531.     CALL    PRINTS
  532.     LD    HL,INSTR
  533.     LD    DE,61440+128
  534.     CALL    PRINTS
  535.     LD    A,64
  536.     OUT    (8),A
  537.     LD    A,13
  538.     LD    HL,63488+9
  539.     LD    BC,7
  540.     CALL    COLOUR
  541.     LD    A,14
  542.     LD    HL,63488+18+8
  543.     LD    BC,2
  544.     CALL    COLOUR
  545.     LD    A,14
  546.     LD    HL,63488+18+11+6
  547.     LD    BC,7
  548.     CALL    COLOUR
  549.     LD    A,11
  550.     LD    HL,63488+18+11+10+8
  551.     LD    BC,5
  552.     CALL    COLOUR
  553.     LD    A,15
  554.     LD    HL,63488+128+7
  555.     LD    BC,1
  556.     CALL    COLOUR
  557.     XOR    A
  558.     OUT    (8),A
  559.     LD    A,0C9H
  560.     LD    (20000),A
  561.     LD    (16000),A
  562.     LD    (15000),A
  563.     LD    (14000),A
  564.     LD    HL,10000-128
  565.     CALL    LOADM            ; CHECK IF FILENAME GIVEN ON COMMAND
  566.     CP    2            ; LINE (IE A>OPEN GOOGLE.SCN)
  567.     JP    NZ,NOINP
  568.     LD    A,32
  569.     LD    (FILNAM),A
  570.     LD    A,0
  571.     LD    (5CH),A
  572.     LD    HL,61440+256+64
  573.     CALL    INPUT            ; NO NAME, SO INPUT ONE
  574.     LD    A,(FILNAM)
  575.     CP    32
  576.     JP    Z,GOCPM            ; NO NAME EVEN NOW, SO QUIT
  577. FINISH:    LD    A,(FILNAM+1)
  578.     CP    ':'
  579.     JR    NZ,NODRIV
  580.     LD    A,(FILNAM)
  581.     SUB    64
  582.     LD    (5CH),A
  583.     LD    HL,FILNAM+2
  584.     LD    DE,FILNAM
  585.     LD    BC,12
  586.     LDIR
  587. NODRIV:    LD    HL,5DH
  588.     LD    DE,5EH
  589.     LD    BC,12
  590.     LD    (HL),32
  591.     LDIR
  592.     LD    HL,FILNAM-1
  593.     LD    DE,5CH
  594.     LD    B,8
  595. NODOT:    INC    HL
  596.     INC    DE
  597.     LD    A,(HL)
  598.     CP    '.'
  599.     JP    Z,FOUNIT
  600.     LD    (DE),A
  601.     DJNZ    NODOT        ; FIX UP THE FILENAME IN 5C HEX
  602.     LD    HL,FILNAM+9
  603.     LD    DE,5CH+9
  604.     LD    BC,3
  605.     LDIR
  606.     JP    FLOK
  607. FOUNIT:    INC    HL
  608.     LD    DE,5CH+9
  609.     LD    BC,3
  610.     LDIR
  611. FLOK:    LD    HL,5DH        ; ACTUAL START OF FILENAME
  612.     LD    B,11        ; NO OF BYTES
  613. NEXB:    LD    A,(HL)
  614.     CP    65
  615.     JP    C,SPACE
  616.     RES    5,A
  617. SPACE:    LD    (HL),A        ; CONVERT LOWER TO UPPER CASE (BUT WATCH SPACES)
  618.     INC    HL
  619.     DJNZ    NEXB
  620.     LD    HL,QUES2
  621.     LD    DE,61440+6*64        ; AND NOW ASK THE VARIOUS QUESTIONS!
  622.     CALL    PRINTS
  623.     CALL    GETKEY
  624.     CP    'P'
  625.     JP    Z,IP1OK
  626.     LD    A,'S'
  627. IP1OK:    LD    (ANS2),A
  628.     LD    (61440+6*64+46),A
  629.     LD    HL,QUES3
  630.     LD    DE,61440+7*64
  631.     CALL    PRINTS
  632.     CALL    GETKEY
  633.     CP    'I'
  634.     JP    Z,IP2OK
  635.     LD    A,'N'
  636. IP2OK:    LD    (ANS3),A
  637.     LD    (61440+7*64+46),A
  638.     LD    HL,QUES5
  639.     LD    DE,61440+8*64
  640.     CALL    PRINTS
  641.     CALL    GETKEY
  642.     CP    'Y'
  643.     JP    Z,IP4OK
  644.     LD    A,'N'
  645. IP4OK:    LD    (ANS5),A
  646.     LD    (61440+8*64+46),A
  647.     CP    'Y'
  648.     JP    NZ,NOPR
  649.     LD    HL,QUES6
  650.     LD    DE,61440+9*64
  651.     CALL    PRINTS
  652.     CALL    GETKEY
  653.     CP    'M'
  654.     JP    Z,IP5OK
  655.     LD    A,'E'
  656. IP5OK:    LD    (ANS6),A
  657.     LD    (61440+9*64+46),A
  658.     LD    A,(ANS6)
  659.     CP    'E'
  660.     JP    NZ,NOPR
  661.     LD    HL,QUES7
  662.     LD    DE,61440+10*64
  663.     CALL    PRINTS
  664.     CALL    GETKEY
  665.     CP    'S'
  666.     JP    Z,IP6OK
  667.     CP    'M'
  668.     JP    Z,IP6OK
  669.     CP    'L'
  670.     JP    Z,IP6OK
  671.     LD    A,'S'
  672. IP6OK:    LD    (ANS7),A
  673.     LD    (61440+10*64+46),A
  674.  
  675. NOPR:    LD    A,0C9H        ; NOW LOAD THE PICTURE!
  676.     LD    (20000),A    ; FOR HIRES2
  677.     LD    (16000),A    ; FOR THIRTY-TWO LINE PIKKIE
  678.     LD    (15000),A    ; FOR 80 BY 24 PIC
  679.     LD    (14000),A    ; FOR NORMAL, OTHER ASSUMED NON_COLOUR
  680.     LD    HL,10000-128
  681.     CALL    LOADM
  682.     CP    2
  683.     JP    Z,GOCPM
  684. NOINP:    LD    A,16
  685.     LD    (LINES),A
  686.     LD    A,(20000)    ; THE PROGRAMME CHECKS HOW MUCH MEMORY THE
  687.     CP    0C9H        ; SCREEN TAKES UP AND DISPLAYS ACCORDINGLY
  688.     JP    NZ,OPIK        ; IE NORMALSCREEN<32LINES<HIRES2SCREEN
  689.     LD    A,(16000)
  690.     CP    0C9H
  691.     JP    NZ,BIGPIC
  692.     LD    A,(15000)
  693.     CP    0C9H
  694.     JP    NZ,BY24
  695. OPIK:    LD    A,(14000)
  696.     CP    0C9H
  697.     JP    Z,LESCOL
  698.     LD    HL,10000
  699.     LD    DE,63488
  700.     LD    A,64
  701.     OUT    (8),A
  702.     LD    BC,1024
  703.     LDIR
  704.     XOR    A
  705.     OUT    (8),A
  706.     LD    A,(20000)
  707.     CP    0C9H
  708.     JP    NZ,HIRES2
  709.     LD    HL,10000+1024
  710.     LD    DE,63488
  711.     LD    BC,2048
  712.     LDIR
  713.     LD    A,(ANS2)
  714.     CP    'P'            ; DISPLAY AS PCGS IF FLAG SET
  715.     JP    Z,PCGLAY
  716.     LD    HL,10000+2048+1024
  717.     LD    DE,61440
  718.     LD    BC,1024
  719.     LDIR
  720. AFTR:    LD    A,(ANS3)
  721.     CP    'I'
  722.     CALL    Z,INVERT        ; AND ACT UPON VARIOUS OTHER FLAGS
  723.     LD    A,(ANS5)
  724.     CP    'Y'
  725.     JP    Z,DUMPIC
  726.     CALL    GETKEY
  727.     CP    27            ; QUIT IF ESC PRESSED, ELSE RUN THE
  728.     JP    Z,GOCPM            ; PROGRAMME AGAIN!
  729.     CALL    FADE
  730.     XOR    A
  731.     LD    (5DH),A
  732.     JP    100H
  733.  
  734. LESCOL:    LD    A,(COLFLG)
  735.     CP    255
  736.     JP    NZ,YNGWIE
  737.     LD    A,64
  738.     OUT    (8),A
  739.     LD    HL,63488
  740.     LD    DE,63489
  741.     LD    BC,1024
  742.     LD    (HL),7
  743.     LDIR
  744.     XOR    A
  745.     OUT    (8),A
  746. YNGWIE:    LD    HL,10000        ; SUB TO LOAD ANCIENT NON-COLOUR
  747.     LD    DE,63488        ; SCREENS (ALA CHOOK, ETC)
  748.     LD    BC,2048
  749.     LDIR
  750.     LD    A,(ANS2)
  751.     CP    'P'            ; DISPLAY AS PCGS IF FLAG SET
  752.     JP    Z,PCGLAY
  753.     LD    HL,10000+2048
  754.     LD    DE,61440
  755.     LD    BC,1024
  756.     LDIR
  757.     JP    AFTR
  758.  
  759. BY24:    LD    HL,10000        ; SUB TO DISPLAY AN 80 BY 24 SCREEN
  760.     LD    DE,63488
  761.     LD    BC,1920            ; 80*24
  762.     LD    A,64
  763.     OUT    (8),A
  764.     LDIR
  765.     XOR    A
  766.     OUT    (8),A
  767.     LD    HL,10000+1920
  768.     LD    DE,63488
  769.     LD    BC,2048
  770.     LDIR
  771.     LD    A,(ANS2)
  772.     CP    'P'            ; DISPLAY AS PCGS IF FLAG SET
  773.     JP    Z,PCGLAY
  774.     LD    HL,10000+1920+2048
  775.     LD    DE,61440
  776.     LD    BC,1920
  777.     LDIR
  778.     LD    HL,L24END
  779.     CALL    PUTCRT
  780.     LD    A,24
  781.     LD    (LINES),A
  782.     JP    AFTR
  783.  
  784. HIRES2:    LD    A,7            ; SUB TO LOAD HIRES2 SCREENS
  785.     LD    B,8
  786.     LD    HL,10000+1024
  787.     PUSH    HL
  788. LOOPIE:    ADD    A,128
  789.     OUT    (28),A
  790.     SUB    128
  791.     POP    HL
  792.     PUSH    HL
  793.     LD    DE,63488
  794.     PUSH    BC
  795.     LD    BC,2048
  796.     LDIR
  797.     POP    BC
  798.     DEC    A
  799.     LD    DE,2048
  800.     POP    HL
  801.     ADD    HL,DE
  802.     PUSH    HL
  803.     DJNZ    LOOPIE
  804.     LD    HL,10000+1024+8*2048
  805.     LD    DE,61440
  806.     LD    BC,1024
  807.     LDIR
  808.     LD    HL,10000+9*2048
  809.     LD    DE,61440
  810.     LD    A,144
  811.     OUT    (28),A
  812.     LD    BC,1024
  813.     LDIR
  814.     LD    A,128
  815.     OUT    (28),A
  816.     JP    AFTR
  817.  
  818. BIGPIC:    LD    A,32            ; SUB TO LOAD 32 LINES PICTURES
  819.     LD    (LINES),A
  820.     LD    HL,L32END
  821.     CALL    PUTCRT
  822.     LD    HL,10000
  823.     LD    DE,63488
  824.     LD    A,64
  825.     OUT    (8),A
  826.     LD    BC,2048
  827.     LDIR
  828.     XOR    A
  829.     OUT    (8),A
  830.     LD    HL,10000+2048
  831.     LD    DE,63488
  832.     LD    BC,2048
  833.     LDIR
  834.     LD    A,(ANS2)
  835.     CP    'P'
  836.     JP    Z,PCGLAY
  837.     LD    HL,10000+4096
  838.     LD    DE,61440
  839.     LD    BC,2048
  840.     LDIR
  841.     JP    AFTR
  842.  
  843. PCGLAY:    LD    HL,CTREND        ; SUB TO DISPLAY AS PCG LAYOUT
  844.     CALL    PUTCRT
  845.     LD    A,16
  846.     LD    (LINES),A
  847.     CLS    2048
  848.     LD    A,(COLFLG)
  849.     CP    255
  850.     JP    NZ,COLNON
  851.     LD    A,64
  852.     OUT    (8),A
  853.     LD    HL,63488
  854.     LD    DE,63489
  855.     LD    BC,2047
  856.     LD    (HL),2
  857.     LDIR
  858.     XOR    A
  859.     OUT    (8),A
  860. COLNON:    LD    BC,128
  861.     LD    HL,0
  862.     XOR    A
  863. PCGLP:    PUSH    HL
  864.     LD    DE,61440
  865.     ADD    HL,DE
  866.     LD    (HL),A
  867.     INC    HL
  868.     SET    7,A
  869.     LD    (HL),A
  870.     RES    7,A
  871.     DEC    HL
  872.     POP    HL
  873.     INC    HL
  874.     INC    HL
  875.     INC    HL
  876.     INC    HL
  877.     INC    A
  878.     DEC    BC
  879.     PUSH    AF
  880.     LD    A,B
  881.     OR    C
  882.     JP    Z,OUTLP
  883.     POP    AF
  884.     JP    PCGLP
  885. OUTLP:    POP    AF
  886.     LD    HL,61440+512+128
  887.     LD    A,128
  888.     LD    B,128
  889. LOUP1:    LD    (HL),A
  890.     INC    HL
  891.     INC    A
  892.     DJNZ    LOUP1
  893.     LD    HL,FILNAM
  894.     LD    DE,61440+14*64
  895.     LD    BC,12
  896.     LDIR
  897.     JP    AFTR
  898.  
  899. SMAL:    LD    A,6
  900.     LD    (MODE),A
  901.     RET
  902. MEDI:    LD    A,4
  903.     LD    (MODE),A
  904.     RET
  905. LARG:    LD    A,5
  906.     LD    (MODE),A
  907.     RET
  908.  
  909.     .RADIX    16D            ; (THANKS TO DZ.COM!)
  910.  
  911. DUMPIC:    LD    A,(ANS7)        ; SCREEN DUMPING ROUTINE
  912.     CP    'S'
  913.     CALL    Z,SMAL
  914.     LD    A,(ANS7)
  915.     CP    'M'
  916.     CALL    Z,MEDI
  917.     LD    A,(ANS7)
  918.     CP    'L'
  919.     CALL    Z,LARG
  920.     PUSH    AF
  921.     PUSH    BC
  922.     PUSH    DE
  923.     PUSH    HL
  924.     LD    A,1B
  925.     CALL    OUTCHR
  926.     LD    A,'A'
  927.     CALL    OUTCHR
  928.     LD    A,8
  929.     CALL    OUTCHR
  930.     LD    HL,0F000
  931.     LD    A,(LINES)
  932.     CP    18
  933.     JP    Z,WIERD
  934.     LD    B,A
  935.  
  936. LABEL1:    PUSH    BC
  937.     PUSH    HL
  938.     PUSH    HL
  939.     LD    DE,0F000
  940.     LD    C,00
  941.  
  942. LABEL2:    POP    HL
  943.     LD    A,(ANS6)
  944.     CP    'E'
  945.     JP    Z,EPSON
  946.     PUSHALL
  947.     LD    HL,BEEPR
  948.     CALL    PRTSTR
  949.     POPALL
  950.     JP    MICROB
  951. EPSON:    LD    A,1B
  952.     CALL    OUTCHR
  953.     LD    A,'*'
  954.     CALL    OUTCHR
  955.     LD    A,(MODE)
  956.     CALL    OUTCHR
  957.     XOR    A
  958.     CALL    OUTCHR
  959.     LD    A,02
  960.     CALL    OUTCHR
  961. MICROB:    LD    B,'@'
  962.     JR    LABEL4
  963.  
  964. LABL13:    JR    LABEL2
  965. LABEL3:    JR    LABEL1
  966.  
  967. LABEL4:    PUSH    BC
  968.     PUSH    DE
  969.     LD    A,(HL)
  970.     CP    80
  971.     JR    C,LABEL5
  972.     PUSH    AF
  973.     LD    A,90
  974.     OUT    (1C),A
  975.     LD    A,(HL)
  976.     OR    80
  977.     OUT    (1C),A
  978.     POP    AF
  979.  
  980. LABEL5:    INC    HL
  981.     PUSH    HL
  982.     LD    H,00
  983.     LD    L,A
  984.     ADD    HL,HL        ; DON'T BLOODY WELL ASK ME!!!
  985.     ADD    HL,HL
  986.     ADD    HL,HL
  987.     ADD    HL,HL
  988.     ADD    HL,DE        ; (ACTUALLY I DO KNOW - GET PCG CHAR + OFFSET)
  989.     LD    A,01
  990.     OUT    (0B),A
  991.     LD    B,08
  992.     LD    DE,0080
  993.  
  994. LABEL6:    PUSH    BC
  995.     LD    B,08
  996.     PUSH    HL
  997.  
  998. LABEL7:    LD    A,(HL)
  999.     AND    E
  1000.     JR    Z,LABEL8
  1001.     CCF
  1002.  
  1003. LABEL8:    RL    D
  1004.     INC    HL
  1005.     DJNZ    LABEL7
  1006.     POP    HL
  1007.     RR    E
  1008.     LD    A,D
  1009.     CALL    OUTCHR
  1010.     LD    D,00
  1011.     POP    BC
  1012.     DJNZ    LABEL6
  1013.     XOR    A
  1014.     OUT    (0B),A
  1015.     POP    HL
  1016.     POP    DE
  1017.     POP    BC
  1018.     DJNZ    LABEL4
  1019.     LD    A,0D
  1020.     CALL    OUTCHR
  1021.     LD    A,0A
  1022.     CALL    OUTCHR
  1023.     LD    A,(LINES)
  1024.     CP    20
  1025.     JR    NZ,LABL12
  1026.     LD    C,1
  1027.     POP    AF
  1028. LABL12:    LD    DE,0F008
  1029.     LD    A,C
  1030.     LD    C,1
  1031.     OR    A
  1032.     JR    Z,LABL13
  1033.     POP    BC
  1034.     XOR    A
  1035.  
  1036. LABEL9:    JR    Z,LABL10
  1037.     CP    03
  1038.     JR    Z,LABL11
  1039.  
  1040. LABL10:    DJNZ    LABEL3
  1041.  
  1042. LABL11:    LD    A,1B
  1043.     CALL    OUTCHR
  1044.     LD    A,'2'
  1045.     CALL    OUTCHR
  1046.     LD    HL,ENDSTR        ; DON'T YOU HATE USELESS COMMENTS?
  1047.     CALL    PRTSTR
  1048.     POP    HL
  1049.     POP    DE
  1050.     POP    BC
  1051.     POP    AF
  1052.     CALL    FADE
  1053.     XOR    A
  1054.     LD    (5DH),A
  1055.     JP    100H
  1056.  
  1057.  
  1058. SET872:    LD    B,8            ; SET LINE FEED LENGTH AT 8 PIXELS
  1059.     CALL    SETLFL
  1060.     PUSH    AF
  1061.     XOR    A
  1062.     LD    (SPESH),A
  1063.     POP    AF
  1064.     RET
  1065.  
  1066. SET372:    LD    B,3            ; SET IT AT 3 PIXELS DOWN (8+3=11)
  1067.     CALL    SETLFL
  1068.     PUSH    AF
  1069.     LD    A,1
  1070.     LD    (SPESH),A
  1071.     POP    AF
  1072.     RET
  1073.  
  1074. SETLFL:    LD    A,1B
  1075.     CALL    OUTCHR
  1076.     LD    A,'A'
  1077.     CALL    OUTCHR
  1078.     LD    A,B
  1079.     CALL    OUTCHR
  1080.     RET
  1081.  
  1082.  
  1083. WIERD:    LD    A,(ANS7)        ; SCREEN DUMPING ROUTINE FOR 80BY24
  1084.     CP    'S'            ; SCREENS. I'M TO LAZY TO WRITE THIS
  1085.     CALL    Z,SMAL            ; INTO THE ABOVE SO I BLOCK COPIED IT!
  1086.     LD    A,(ANS7)
  1087.     CP    'M'
  1088.     CALL    Z,MEDI
  1089.     LD    A,(ANS7)
  1090.     CP    'L'
  1091.     CALL    Z,LARG
  1092.     PUSH    AF
  1093.     PUSH    BC
  1094.     PUSH    DE
  1095.     PUSH    HL
  1096.     LD    HL,0F000
  1097.  
  1098.     LD    A,18            ; 24 LINES
  1099.     LD    B,A
  1100.  
  1101. WABEL1:    PUSH    BC
  1102.     PUSH    HL
  1103.     PUSH    HL
  1104.     LD    DE,0F000
  1105.     LD    C,00
  1106.  
  1107. WABEL2:    PUSH    AF
  1108.     LD    A,E
  1109.     CP    0
  1110.     CALL    NZ,SET372
  1111.     CALL    Z,SET872
  1112.     POP    AF
  1113.     POP    HL
  1114.     LD    A,(ANS6)
  1115.     CP    'E'
  1116.     JP    Z,EPSON1
  1117.     PUSHALL
  1118.     LD    HL,BEEP1
  1119.     CALL    PRTSTR
  1120.     POPALL
  1121.     JP    MICRO1
  1122. EPSON1:    LD    A,1B
  1123.     CALL    OUTCHR
  1124.     LD    A,'*'
  1125.     CALL    OUTCHR
  1126.     LD    A,(MODE)
  1127.     CALL    OUTCHR
  1128.     LD    A,80
  1129.     CALL    OUTCHR
  1130.     LD    A,02
  1131.     CALL    OUTCHR
  1132. MICRO1:    LD    B,50                ; 80 ACROSS
  1133.     JR    WABEL4
  1134.  
  1135. WABL13:    JR    WABEL2
  1136. WABEL3:    JR    WABEL1
  1137.  
  1138. WABEL4:    PUSH    BC
  1139.     PUSH    DE
  1140.     LD    A,(HL)
  1141.     CP    80
  1142.     JR    C,WABEL5
  1143.     PUSH    AF
  1144.     LD    A,90
  1145.     OUT    (1C),A
  1146.     LD    A,(HL)
  1147.     OR    80
  1148.     OUT    (1C),A
  1149.     POP    AF
  1150.  
  1151. WABEL5:    INC    HL
  1152.     PUSH    HL
  1153.     LD    H,00
  1154.     LD    L,A
  1155.     ADD    HL,HL
  1156.     ADD    HL,HL
  1157.     ADD    HL,HL
  1158.     ADD    HL,HL
  1159.     ADD    HL,DE
  1160.     LD    A,01
  1161.     OUT    (0B),A
  1162.     LD    B,08
  1163.     LD    DE,0080
  1164.  
  1165. WABEL6:    PUSH    BC
  1166.     LD    B,08
  1167.     PUSH    HL
  1168.  
  1169. WABEL7:    LD    A,(HL)
  1170.     AND    E
  1171.     JR    Z,WABEL8
  1172.     CCF
  1173.  
  1174. WABEL8:    RL    D
  1175.     INC    HL
  1176.     DJNZ    WABEL7
  1177.     POP    HL
  1178.     RR    E
  1179.     PUSH    AF
  1180.     LD    A,(SPESH)
  1181.     CP    1
  1182.     CALL    Z,RES12
  1183.     POP    AF
  1184.     LD    A,D
  1185.     CALL    OUTCHR
  1186.     LD    D,00
  1187.     POP    BC
  1188.     DJNZ    WABEL6
  1189.     XOR    A
  1190.     OUT    (0B),A
  1191.     POP    HL
  1192.     POP    DE
  1193.     POP    BC
  1194.     DJNZ    WABEL4
  1195.     LD    A,0D
  1196.     CALL    OUTCHR
  1197.     LD    A,0A
  1198.     CALL    OUTCHR
  1199. WABL12:    LD    DE,0F008
  1200.     LD    A,C
  1201.     LD    C,1
  1202.     OR    A
  1203.     JR    Z,WABL13
  1204.     POP    BC
  1205.     XOR    A
  1206.  
  1207. WABEL9:    JR    Z,WABL10
  1208.     CP    03
  1209.     JR    Z,WABL11
  1210.  
  1211. WABL10:    DJNZ    WABEL3
  1212.  
  1213. WABL11:    LD    A,1B
  1214.     CALL    OUTCHR
  1215.     LD    A,'2'
  1216.     CALL    OUTCHR
  1217.     LD    HL,ENDSTR
  1218.     CALL    PRTSTR
  1219.     POP    HL
  1220.     POP    DE
  1221.     POP    BC
  1222.     POP    AF
  1223.     CALL    FADE
  1224.     XOR    A
  1225.     LD    (5DH),A
  1226.     JP    100H
  1227.  
  1228. RES12:    RES    0,D
  1229.     RES    1,D
  1230.     RES    2,D
  1231.     RES    3,D
  1232.     RES    4,D
  1233.     RET
  1234.     END                ; OR IS IT?
  1235.  
  1236.  
  1237.  
  1238.  
  1239.  
  1240.  
  1241.  
  1242.  
  1243.  
  1244.  
  1245.  
  1246.  
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256. ; BORED YET? HOW BOUT THIS...  B U R M A  S H A V E ! !
  1257.  
  1258.  
  1259.  
  1260. ; OR BETTER YET.... buy...   S U P E R I O R  C O M U T E R  S O F T W A R E !
  1261.  
  1262. ;   SEE YA 8-)
  1263. ;
  1264. ; BY THE WAY, WATCH YOUR CRT FOR THESE SCS RELEASES!
  1265.  
  1266. ; FIGHTER.COM (ARCADE GAME)
  1267. ; OPEN.COM (AHEM)
  1268. ; SCNTODS.COM (HIRES2 TO EP CONVERTER)
  1269. ; SUPERIOR.ARK (SCS DISK 1)
  1270. ; FORTRIS.ARK (TETRIS)
  1271. ; TIMEGAPU.ARK (TIMEGAP-X UNREGISTERED)
  1272. ; LIBRARY.Z80 (USEFUL ROUTINES - BIT FADES FOR GRLOAD ETC)
  1273. ; DEXIGN.COM (SUPER DUPER GRAPHIC EDITOR!!!!!)
  1274.