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 / SIMTEL / CPMUG / CPMUG035.ARK / FELIX.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  4KB  |  170 lines

  1. ;8 SEPT 79 : DELETE DOUBLE QUOTE MARK.
  2. ;
  3. ; FELIX.COM - THIS PROGRAM READS IN FELIX.OBJ AFTER
  4. ; VERIFYING THAT THERE IS MEMORY FOR IT TO READ INTO.
  5. ; IT ALSO READS IN THE SIN:COSINE TABLE 'SINCOS.OBJ'.
  6. ; IT THEN CLEARS OUT ALL 16 OBJECTS VIA CALLING 
  7. ; 'OBJNULL' AND SIGNS ON,IDENTIFYING THE VERSION AND 
  8. ; SIZE OF THIS FELIX SYSTEM. 
  9. ;
  10. ; NOTE THAT A CHECK IS MADE OF LOCATION 'VERSION' 
  11. ; (5095H IN 'TABLE') AND A MESSAGE PRINTED IF THE 
  12. ; FELIX.COM IS A DIFFERENT VERSION THAN THIS FELIX.OBJ
  13. ; MODULE. 
  14. ;
  15. ; VERSION 2.1 OF 14 AUG.79 HAS VERSION-NUMBER 0.
  16. ; EACH REVISION WILL HAVE NEXT NR.SEE FIRST LINE
  17. ; OF THIS HEADER FOR CURRENT VERSION.
  18. VERSION    EQU    5095H
  19. VER$NR    EQU    0    ;2.1 OF 14 AUG.79 IS VERSION 0.
  20. MEMSIZE    EQU    32    ;SIZE NEEDED IN KBYTES.
  21. BIOS    EQU    5
  22. CPM    EQU    0
  23. OBJW    EQU    5009H
  24. TABST    EQU    4000H
  25. FLXST    EQU    5000H
  26.     ORG    100H
  27. ;
  28. ; FIRST WE CHECK TO SEE IF WE HAVE ENOUGH MEMORY
  29. ;
  30. FELIX:    LXI    H,1024*MEMSIZE-10
  31.     MOV    B,M    ;STASH SOME OF IT
  32.     MVI    M,0AAH    ;AND TRY WRITING MEMORY
  33.     MOV    A,M    ;AND READING BACK
  34.     MOV    M,B    ;AND FIXING THE TEST-SPOT.
  35.     CPI    0AAH    ;DID IT WRITE AND READ?
  36.     JZ    OK
  37. ;
  38. ; NOT ENOUGH RAM IN THIS MACHINE FOR THIS SYSTEM.
  39. ;
  40.     LXI    D,BADMSG
  41.     CALL    PRINT
  42.     JMP    CPM
  43. ;
  44. BADMSG: DB 'THIS MACHINE HASNT ENOUGH MEMORY FOR THIS'
  45.     DB ' 32K VERSION OF FELIX.SORRY.',0DH,0AH,'$'
  46. ;
  47. OK:    LXI    SP,TABST
  48.     LXI    D,TABFCB
  49.     LXI    H,TABST
  50.     CALL    DSKRD
  51.     LXI    D,FLXFCB
  52.     LXI    H,FLXST
  53.     CALL    DSKRD
  54.     CALL    OBJNULL
  55. ;
  56. ; NOW WE CHECK THAT WE LOADED CORRECT VERSION OF 
  57. ; 'FELIX.OBJ'.
  58. ;
  59.     LDA    VERSION
  60.     CPI    VER$NR
  61.     JZ    GOODLOG
  62. ;
  63. ;WE DIDN'T; VERSION NRS DON'T MATCH.
  64. ;
  65.     LXI    D,NOTMATCH
  66.     CALL    PRINT
  67.     JMP    CPM
  68. ;
  69. NOTMATCH:DB    'WARNING:FELIX UTILITY ROUTINES'
  70.     DB    ' ARE NOT VERSION 2.1 (14 AUG 79).GOOD LUCK.'
  71.     DB    0DH,0AH,'$'
  72. ;
  73. GOODLOG:LXI    D,SIGNON
  74.     CALL    PRINT
  75.     JMP    CPM
  76. ;
  77. SIGNON:    DB    'FELIX VERSION 2.1 (14 AUG 79). WELCOME.',0DH,0AH,'$'
  78. TABFCB    DB    0,'SINCOS  ','OBJ',0,0,0,0
  79.     ORG    TABFCB+32
  80.     DB    0
  81. FLXFCB    DB    0,'FELIX   ','OBJ',0,0,0,0
  82.     ORG    FLXFCB+32
  83.     DB    0
  84. OBJNULL: PUSH    D ! PUSH PSW
  85.     MVI    E,4    ;1ST X-COORD TO BE
  86.     MVI    A,0FFH    ;SPECIAL CODE
  87.     CALL    OBALLW    ;FOR ALL OBJECTS
  88.     INR    E    ;SPECIAL CODE
  89.     MVI    A,80H    ;TO BE END-OF-OBJECT MARKER
  90.     CALL    OBALLW    ;FOR ALL OBJECTS
  91.     XRA    A    ;ZERO COLOR (BLACK)
  92.     MOV    E,A
  93.     CALL    OBALLW
  94.     INR    E    ;AND ORIENTATION BYTES
  95.     CALL    OBALLW    ;FOR ALL OBJECTS
  96.     POP    PSW ! POP D
  97.     RET
  98. * PUT DESIRED VALUE (A) IN DESIRED BYTE (E) OF EACH OF THE 
  99. * 16 LEGAL OBJECTS
  100. OBALLW:    PUSH    D
  101.     MVI    D,15    ;ALL 16 OBJECTS (0-15)
  102. OWLOOP:    CALL    OBJW    ;WRITE DESIRED BYTE
  103.     DCR    D
  104.     JNZ    OWLOOP    ;NEXT OBJECT
  105.     CALL    OBJW    ;OBJECT ZERO
  106.     POP    D
  107.     RET
  108. BUFSIZ    EQU    128
  109. DEFBUF    EQU    80H
  110. CR    EQU    0DH
  111. LF    EQU    0AH
  112. STOP    EQU    '$'
  113. * SPECIAL VERSION OF "DSKRD".  SEE FELIX SYSTEM ROUTINE FOR COMMENTS
  114. DSKRD:    LXI    B,BUFSIZ    ;GET SIZE OF DMA BUFFERS
  115.     CALL    OPEN    ;OPEN DISK FILE WHOSE FCB IS POINTED TO BY DE
  116.     CPI    255    ;DOES IT EXIST?
  117.     JZ    OPENERR    ;NO--PRINT ERROR MESSAGE AND REBOOT
  118. * READ BUFFERS FROM DISK UNTIL THERE AREN'T ANY MORE LEFT
  119. RDLOOP:    XCHG        ;GET CURRENT READ BUFFER @ INTO DE
  120.     CALL    DMASET    ;TELL CP/M TO WRITE DISK DATA THERE
  121.     XCHG        ;RETURN FCB @ TO DE
  122.     CALL    READ    ;GET THE NEXT 128 BYTES
  123.     ORA    A    ;ARE WE FINISHED (OR FOUND AN ERROR)?
  124.     JNZ    NODATA    ;YES--FIND OUT WHICH AND TAKE CARE OF IT
  125.     DAD    B    ;POINT HL TO NEXT BUFFER TO WRITE TO
  126.     JMP    RDLOOP
  127. NODATA:    CPI    3    ;IS RETURN VALUE FROM "READ" 3 OR MORE?
  128.     JNC    RDERROR    ;YES--ERROR FOUND
  129.     CALL    CLOSE    ;NO--WE'RE FINISHED SO WE CLOSE THE FILE
  130.     CPI    255    ;HAS SOMETHING HAPPENED TO THE FILE?
  131.     JZ    CLOSERR    ;YES--TELL ABOUT IT AND REBOOT
  132.     LXI    D,DEFBUF
  133.     CALL    DMASET    ;RESET READ BUFFER TO CP/M DEFAULT
  134.     RET
  135. OPENERR: LXI    D,MESS1    ;PRINT ERROR MESSAGE & REBOOT
  136.     CALL    PRINT
  137.     JMP    0
  138. MESS1    DB    'FELIX ERROR IN OPENING FILE',CR,LF,STOP
  139. CLOSERR: LXI    D,MESS2    ;DITTO
  140.     CALL    PRINT
  141.     JMP    0
  142. MESS2    DB    'FELIX FILE CLOSE ERROR',CR,LF,STOP
  143. RDERROR: LXI    D,MESS3    ;SAME HERE
  144.     CALL    PRINT
  145.     JMP    0
  146. MESS3    DB    'FELIX READ ERROR',CR,LF,STOP
  147. OPEN    PUSH    B ! PUSH D ! PUSH H
  148.     MVI    C,15
  149.     CALL    5
  150.     POP    H ! POP D ! POP B
  151.     RET
  152. CLOSE    PUSH    B ! PUSH D ! PUSH H
  153.     MVI    C,16
  154.     CALL    5
  155.     POP    H ! POP D ! POP B
  156.     RET
  157. READ    PUSH    B ! PUSH D ! PUSH H
  158.     MVI    C,20
  159.     CALL    5
  160.     POP    H ! POP D ! POP B
  161.     RET
  162. DMASET    PUSH    B ! PUSH D ! PUSH H
  163.     MVI    C,26
  164.     CALL    5
  165.     POP    H ! POP D ! POP B
  166.     RET
  167. PRINT:    MVI    C,9
  168.     JMP    BIOS
  169.     END
  170.