home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / DRI-archive / roche / GSX.ASM < prev    next >
Assembly Source File  |  2009-12-11  |  10KB  |  535 lines

  1. ; GSX.ASM
  2. ; -------
  3. ;
  4. ; CP/M-80 - GSX-80 Version 1.1
  5. ;
  6. ; Disassembled by:
  7. ;
  8. ; ROCHE Emmanuel
  9. ; 8 rue HERLUISON
  10. ; 10000 TROYES
  11. ; FRANCE
  12. ; ------
  13. ;
  14. ;--------------------------------
  15. ;
  16.     PAGE    0        ; Listing without page breaks
  17. ;
  18. ;    ORG    0000H        ; CP/M-80 SYStem file
  19. ;
  20.     ORG    0100H        ; Debug only
  21. ;
  22. ;--------------------------------
  23. ; List of ASCII characters used
  24. ;
  25. lf    equ    0AH        ; Line Feed
  26. cr    equ    0DH        ; Carriage Return
  27. ;
  28. ;--------------------------------
  29. ; List of BDOS functions used
  30. ;
  31. conout    equ     2        ; Console output
  32. pstring    equ     9        ; Print string
  33. openf    equ    15        ; Open file
  34. closef    equ    16        ; Close file
  35. readf    equ    20        ; Read sequential
  36. setDMA    equ    26        ; Set DMA address
  37. ;
  38. ;--------------------------------
  39. ;
  40. J0000    EQU    0000H        ; J---I
  41. I$0004    EQU    0004H        ; ----I
  42. I$000B    EQU    000BH        ; ----I
  43. DBUF    EQU    0080H        ; ----I
  44. I0500    EQU    0500H        ; ----I
  45. I$FFB5    EQU    0FFB5H        ; ----I
  46. ;
  47. ;--------------------------------
  48. ;
  49.     JMP    start1        ; Start of code
  50. ;
  51. ;--------------------------------
  52. ; Indirect call to BDOS
  53. ;
  54. BDOS:    DB    0C3H        ; JMP opcode
  55. ;
  56. D$0104    DW    0000H        ; Storage for ???
  57. ;
  58. ;--------------------------------
  59. ;
  60. D0106:    DB    0FFH,0FFH    ; ? Separator?
  61. ;
  62. ;
  63. DDtabl:    ds    55        ; 55 bytes = 5 times 11 bytes
  64. ;
  65. ; Table of DD filenames
  66. ;
  67. ; Format:
  68. ; 1 byte  for the drive code
  69. ; 2 bytes for ???
  70. ; 8 bytes for the DD filename   (total = 11 bytes per driver)
  71. ;
  72. ;
  73.     DB    0FFH        ; ? Separator?
  74.     DB    0FFH        ; ?
  75. ;
  76. ;--------------------------------
  77. ;
  78. copyr:    DB    '---------------------------------------------------', cr, lf
  79.     DB    'GSX-80 1.1  01 Oct 83    Serial No 5000-1232-654321', cr, lf
  80.     DB    'Copyright (C) 1983                                 ', cr, lf
  81.     DB    'Digital Research, Inc.          All Rights Reserved', cr, lf
  82. DDused:    DB    '---------------------------------------------------', cr, lf, '$'
  83. ;
  84. ; Note:
  85. ; The first three lines of the copyright message
  86. ; are utilized by the GDOS to store the contents of ASSIGN.SYS.
  87. ;
  88. D$0142    equ    copyr + 1    ; 2nd byte of first line
  89. ;
  90. ; The last line of the copyright message
  91. ; is used to store the FCB of the DD used.
  92. ;
  93. I$021E    equ    DDused + 9    ; PRL filetype of DD used
  94. I$0235    equ    DDused + 32    ; Last byte of the FCB of DD used
  95. ;
  96. ;--------------------------------
  97. ;
  98. D024B:    ds    34        ; ???
  99. ;
  100. ;--------------------------------
  101. ;
  102. start1:    MOV    A,C        ; Reg-A = BDOS function number
  103.     CPI    73H        ; = 115 ? (GSX function number)
  104.     JNZ    BDOS        ; No: jump back to BDOS
  105.     LXI    H,word1        ; 
  106.     MVI    C,0AH        ; 10 
  107.     CALL    copy        ; 
  108.     LHLD    word1        ; 
  109.     MOV    A,M        ; 
  110.     INX    H        ; 
  111.     MOV    H,M        ; 
  112.     MOV    L,A        ; 
  113.     DCX    H        ; 
  114.     MOV    A,H        ; 
  115.     ORA    L        ; 
  116.     JZ    J$0291        ; 
  117.     CALL    C$02EA        ; 
  118.     CALL    C04FD        ; 
  119. J$028E:    JMP    J$0351        ; 
  120. ;
  121. ;--------------------------------
  122. ;
  123. J$0291:    LHLD    word2        ; 
  124.     MOV    E,M        ; 
  125.     INX    H        ; 
  126.     MOV    D,M        ; 
  127.     LHLD    D0106        ; 
  128.     CALL    sub16        ; 
  129.     JZ    J02CE        ; 
  130.     LXI    H,DDtabl    ; 
  131. J$02A3:    PUSH    H        ; 
  132.     MOV    A,M        ; 
  133.     INX    H        ; 
  134.     MOV    H,M        ; 
  135.     MOV    L,A        ; 
  136.     ANA    H        ; 
  137.     INR    A        ; 
  138.     POP    B        ; 
  139.     JZ    J02CE        ; 
  140.     PUSH    B        ; 
  141.     CALL    sub16        ; 
  142.     POP    H        ; 
  143.     JZ    J$02BD        ; 
  144.     LXI    B,I$000B    ; 
  145.     DAD    B        ; 
  146.     JMP    J$02A3        ; 
  147. ;
  148. ;--------------------------------
  149. ;
  150. J$02BD:    INX    H        ; 
  151.     INX    H        ; 
  152.     XCHG            ; 
  153.     SHLD    D0106        ; 
  154.     LXI    H,DDused    ; File spec in copyr msg
  155.     MVI    C,09H        ; 9 
  156.     CALL    copy        ; 
  157.     CALL    C$03C8        ; 
  158. J02CE:    CALL    C04FD        ; 
  159.     LHLD    word4        ; 
  160.     MOV    A,M        ; 
  161.     INX    H        ; 
  162.     PUSH    H        ; 
  163.     MOV    H,M        ; 
  164.     MOV    L,A        ; 
  165.     INX    H        ; 
  166.     SHLD    word6        ; 
  167.     POP    H        ; 
  168.     INX    H        ; 
  169.     MOV    A,M        ; 
  170.     INX    H        ; 
  171.     MOV    H,M        ; 
  172.     MOV    L,A        ; 
  173.     INX    H        ; 
  174.     SHLD    word7        ; 
  175.     JMP    J$028E        ; 
  176. ;
  177. ;--------------------------------
  178. ;
  179. C$02EA:    LHLD    word1        ; 
  180.     INX    H        ; 
  181.     INX    H        ; 
  182.     MOV    E,M        ; 
  183.     INX    H        ; 
  184.     MOV    D,M        ; 
  185.     MOV    A,E        ; 
  186.     ORA    D        ; 
  187.     RZ            ; 
  188.     LXI    H,I$FFB5    ; 
  189.     DAD    D        ; 
  190.     JNC    J$02FE        ; 
  191.     MVI    E,4BH        ; "K"
  192. J$02FE:    LHLD    word3        ; 
  193.     PUSH    H        ; 
  194.     LXI    H,copyr        ; Copyright message
  195.     SHLD    word3        ; 
  196.     PUSH    H        ; 
  197.     POP    B        ; 
  198.     POP    H        ; 
  199. J$030B:    PUSH    D        ; 
  200.     XCHG            ; 
  201.     LHLD    word6        ; 
  202.     CALL    C0320        ; 
  203.     XCHG            ; 
  204.     LHLD    word7        ; 
  205.     CALL    C0320        ; 
  206.     POP    D        ; 
  207.     DCR    E        ; 
  208.     JNZ    J$030B        ; 
  209.     RET            ; 
  210. ;
  211. ;--------------------------------
  212. ;
  213. C0320:    XCHG            ; 
  214.     MOV    A,M        ; 
  215.     INX    H        ; 
  216.     PUSH    H        ; 
  217.     MOV    H,M        ; 
  218.     PUSH    B        ; 
  219.     MOV    L,A        ; 
  220.     MVI    C,0FH        ; 15 
  221.     PUSH    D        ; 
  222.     XCHG            ; 
  223.     LXI    H,J0000        ; 
  224. J$032E:    MOV    A,D        ; 
  225.     RAR            ; 
  226.     MOV    D,A        ; 
  227.     MOV    A,E        ; 
  228.     RAR            ; 
  229.     MOV    E,A        ; 
  230.     JNC    J$033C        ; 
  231.     MOV    A,C        ; 
  232.     POP    B        ; 
  233.     PUSH    B        ; 
  234.     DAD    B        ; 
  235.     MOV    C,A        ; 
  236. J$033C:    MOV    A,H        ; 
  237.     RAR            ; 
  238.     MOV    H,A        ; 
  239.     MOV    A,L        ; 
  240.     RAR            ; 
  241.     MOV    L,A        ; 
  242.     DCR    C        ; 
  243.     JNZ    J$032E        ; 
  244.     POP    B        ; 
  245.     POP    B        ; 
  246.     MOV    A,L        ; 
  247.     STAX    B        ; 
  248.     INX    B        ; 
  249.     MOV    A,H        ; 
  250.     STAX    B        ; 
  251.     INX    B        ; 
  252.     POP    H        ; 
  253.     INX    H        ; 
  254.     RET            ; 
  255. ;
  256. ;--------------------------------
  257. ;
  258. J$0351:    LHLD    word1        ; 
  259.     LXI    D,I$0004    ; 
  260.     DAD    D        ; 
  261.     MOV    C,M        ; 
  262.     INX    H        ; 
  263.     MOV    B,M        ; 
  264.     LHLD    word5        ; 
  265. J$035E:    MOV    A,C        ; 
  266.     ORA    B        ; 
  267.     RZ            ; 
  268.     PUSH    B        ; 
  269.     XCHG            ; 
  270.     LHLD    word6        ; 
  271.     CALL    C0375        ; 
  272.     XCHG            ; 
  273.     LHLD    word7        ; 
  274.     CALL    C0375        ; 
  275.     POP    B        ; 
  276.     DCX    B        ; 
  277.     JMP    J$035E        ; 
  278. ;
  279. ;--------------------------------
  280. ;
  281. C0375:    MOV    B,H        ; 
  282.     MOV    C,L        ; 
  283.     XCHG            ; 
  284.     MOV    E,M        ; 
  285.     PUSH    H        ; 
  286.     INX    H        ; 
  287.     MOV    D,M        ; 
  288.     XCHG            ; 
  289.     MVI    A,10H        ; 16 
  290.     LXI    D,J0000        ; 
  291. J$0382:    PUSH    PSW        ; 
  292.     XCHG            ; 
  293.     DAD    H        ; 
  294.     XCHG            ; 
  295.     DAD    H        ; 
  296.     MOV    A,L        ; 
  297.     SUB    C        ; 
  298.     MOV    L,A        ; 
  299.     MOV    A,H        ; 
  300.     SBB    B        ; 
  301.     MOV    H,A        ; 
  302.     JNC    J$0392        ; 
  303.     DAD    B        ; 
  304.     DCX    D        ; 
  305. J$0392:    INX    D        ; 
  306.     POP    PSW        ; 
  307.     DCR    A        ; 
  308.     JNZ    J$0382        ; 
  309.     ANA    A        ; 
  310.     MOV    A,D        ; 
  311.     RAR            ; 
  312.     MOV    D,A        ; 
  313.     MOV    A,E        ; 
  314.     RAR            ; 
  315.     MOV    E,A        ; 
  316.     JNC    J$03A3        ; 
  317.     INX    D        ; 
  318. J$03A3:    POP    H        ; 
  319.     MOV    M,E        ; 
  320.     INX    H        ; 
  321.     MOV    M,D        ; 
  322.     INX    H        ; 
  323.     RET            ; 
  324. ;
  325. ;--------------------------------
  326. ;
  327. copy:    LDAX    D        ; 
  328.     MOV    M,A        ;
  329.     INX    H        ; 
  330.     INX    D        ; 
  331.     DCR    C        ; 
  332.     JNZ    copy        ; 
  333.     RET            ; 
  334. ;
  335. ;--------------------------------
  336. ; 16 bits subtraction
  337. ;
  338. sub16:    MOV    A,L        ; 
  339.     SUB    E        ; 
  340.     MOV    L,A        ; 
  341.     MOV    A,H        ; 
  342.     SBB    D        ; 
  343.     MOV    H,A        ; 
  344.     ORA    L        ; 
  345.     RET            ; 
  346. ;
  347. ;--------------------------------
  348. ;
  349. word1:    DW    0        ; ?
  350. word2:    DW    0        ; ?
  351. word3:    DW    0        ; ?
  352. word4:    DW    0        ; ?
  353. word5:    DW    0        ; ?
  354. word6:    DW    0        ; ?
  355. word7:    DW    0        ; ?
  356. ;
  357. ;--------------------------------
  358. ;
  359. C$03C8:    CALL    C$043D        ; 
  360.     CALL    readAS        ; Read ASSIGN.SYS
  361.     LHLD    D$0104        ; 
  362.     LXI    D,I0500        ; 
  363.     CALL    sub16        ; 
  364.     XCHG            ; 
  365.     LHLD    D$0142        ; 
  366.     PUSH    H        ; 
  367.     MOV    A,E        ; 
  368.     SUB    L        ; 
  369.     MOV    A,D        ; 
  370.     SBB    H        ; 
  371.     JNC    J$03E9        ; 
  372.     LXI    D,toobig    ; 'too big to load$'
  373.     JMP    drive        ; Display d:filename.typ
  374. ;
  375. ;--------------------------------
  376. ;
  377. J$03E9:    CALL    readAS        ; Read ASSIGN.SYS
  378.     POP    B        ; 
  379.     PUSH    B        ; 
  380.     LXI    H,I0500        ; 
  381.     PUSH    H        ; 
  382. J$03F2:    CALL    C0421        ; 
  383.     MOV    M,A        ; 
  384.     INX    H        ; 
  385.     DCX    B        ; 
  386.     MOV    A,C        ; 
  387.     ORA    B        ; 
  388.     JNZ    J$03F2        ; 
  389.     POP    H        ; 
  390.     MOV    B,H        ; 
  391.     DCR    B        ; 
  392.     POP    D        ; 
  393. J$0401:    MVI    C,08H        ; 8 
  394.     CALL    C0421        ; 
  395. J$0406:    RLC            ; 
  396.     PUSH    PSW        ; 
  397.     JNC    J$040E        ; 
  398.     MOV    A,B        ; 
  399.     ADD    M        ; 
  400.     MOV    M,A        ; 
  401. J$040E:    INX    H        ; 
  402.     DCX    D        ; 
  403.     MOV    A,D        ; 
  404.     ORA    E        ; 
  405.     JZ    J$041D        ; 
  406.     POP    PSW        ; 
  407.     DCR    C        ; 
  408.     JNZ    J$0406        ; 
  409.     JMP    J$0401        ; 
  410. ;
  411. ;--------------------------------
  412. ;
  413. J$041D:    POP    PSW        ; 
  414.     JMP    J$0463        ; 
  415. ;
  416. ;--------------------------------
  417. ;
  418. C0421:    PUSH    H        ; 
  419.     PUSH    D        ; 
  420.     LHLD    D024B        ; 
  421.     INR    L        ; 
  422.     JP    J$0432        ; 
  423.     PUSH    B        ; 
  424.     CALL    readAS        ; Read ASSIGN.SYS
  425.     POP    B        ; 
  426.     LXI    H,J0000        ; 
  427. J$0432:    SHLD    D024B        ; 
  428.     LXI    D,copyr        ; Copyright message
  429.     DAD    D        ; 
  430.     MOV    A,M        ; 
  431.     POP    D        ; 
  432.     POP    H        ; 
  433.     RET            ; 
  434. ;
  435. ;--------------------------------
  436. ;
  437. C$043D:    LXI    D,PRLtyp    ; PRL filetype
  438.     LXI    H,I$021E    ; 
  439.     MVI    C,06H        ; 6 
  440.     CALL    copy        ; 
  441.     LXI    H,DBUF        ; 
  442.     SHLD    D024B        ; 
  443.     LXI    D,DDused    ; File spec in copyr msg
  444.     MVI    C,openf        ; Open file
  445.     CALL    BDOS        ; 
  446.     LXI    H,I$0235    ; 
  447.     MVI    M,00H        ; 
  448. J$045B:    ORA    A        ; 
  449.     RP            ; 
  450.     LXI    D,nfound    ; ' not found$'
  451.     JMP    drive        ; Display d:filename.typ
  452. ;
  453. ;--------------------------------
  454. ;
  455. J$0463:    LXI    D,DDused    ; File spec in copyr msg
  456.     MVI    C,closef    ; Close file
  457.     CALL    BDOS        ; 
  458.     JMP    J$045B        ; 
  459. ;
  460. ;--------------------------------
  461. ; Display a char on console
  462. ;
  463. pchar:    PUSH    H        ; 
  464.     MVI    C,conout    ; Console output
  465.     CALL    BDOS        ; 
  466.     POP    H        ; 
  467.     RET            ; 
  468. ;
  469. ;--------------------------------
  470. ; Parse n+1 chars and display them
  471. ;
  472. parse:    DCR    A        ; 
  473.     RZ            ; 
  474.     MOV    E,M        ; 
  475.     INX    H        ; 
  476.     PUSH    PSW        ; 
  477.     CALL    pchar        ; 
  478.     POP    PSW        ; 
  479.     JMP    parse        ; 
  480. ;
  481. ;--------------------------------
  482. ; Read ASSIGN.SYS file and copy it in copyright message
  483. ;
  484. readAS:    LXI    D,copyr        ; Copyright message = DMA area...
  485.     MVI    C,setDMA    ; Set DMA Address
  486.     CALL    BDOS        ; 
  487.     LXI    D,DDused    ; File spec in copyr msg
  488.     MVI    C,readf        ; Read sequential
  489.     CALL    BDOS        ; 
  490.     ORA    A        ; Successful read ?
  491.     RZ            ; 
  492.     LXI    D,whyEOF    ; ':  unexpected EOF$'
  493. drive:    PUSH    D        ; 
  494.     LXI    H,DDused    ; File spec in copyr msg
  495.     MOV    A,M        ; 
  496.     ORA    A        ; Was a drive specified ?
  497.     JZ    nodriv        ; 
  498.     ADI    40H        ; Convert drive code in a number
  499.     MOV    E,A        ; 
  500.     CALL    pchar        ; Display drive letter
  501.     MVI    E,':'        ; Drive separator
  502.     CALL    pchar        ; Display it
  503. nodriv:    INX    H        ; 
  504.     MVI    A,8+1        ; Filename
  505.     CALL    parse        ; 
  506.     MVI    E,'.'        ; Filename separator
  507.     CALL    pchar        ; 
  508.     MVI    A,3+1        ; Filetype
  509.     CALL    parse        ; 
  510.     POP    D        ; 
  511.     MVI    C,pstring    ; Print string
  512.     CALL    BDOS        ; 
  513.     JMP    0000H        ; Back to CP/M
  514. ;
  515. ;--------------------------------
  516. ;
  517. toobig:    DB    ' too big to load$'
  518. ;
  519. whyEOF:    DB    ':  unexpected EOF$'
  520. ;
  521. nfound:    DB    ' not found$'
  522. ;
  523. PRLtyp:    DB    'PRL'        ; PRL filetype
  524. ;
  525.     ds    8        ; ?
  526. ;
  527. ;--------------------------------
  528. ;
  529. C04FD:    LXI    D,word1        ; ?
  530. ;
  531. ; The next byte is the first byte of the loaded driver.
  532. ;--------------------------------
  533. ;
  534.     END            ; CP/M-80 SYStem file
  535.