home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpmug / cpmug014.ark / SEDY.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  7KB  |  485 lines

  1. ;CONTRIBUTED TO CP/M USERS' GROUP BY:
  2. ;
  3. ;               MEMORY MERCHANTS
  4. ;               1350 BUFFALO ROAD
  5. ;               ROCHESTER NY 14624
  6. ;
  7.  
  8. ;    SEDY ----- A PROGRAM TO DISPLAY ANY DISK SECTOR TO THE 
  9. ;        TERMINAL
  10. ;    ************************************************************
  11. ;    ******************* INSTRUCTIONS ***************************
  12. ;    ************************************************************
  13. ;
  14. ;    THE FOLLOWING COMMANDS ARE PRESENTLY AVAILABLE :
  15. ;    
  16. ;    A    ASCII DISPLAY MODE - DISPLAYS THE SECTOR IN ASCII
  17. ;    H    HEX DISPLAY MODE - DISPLAYS THE SECTOR IN HEX [DEFAULT]
  18. ;    N    CHANGE THE DISK, TRACK AND SECTOR TO BE DISPLAYED
  19. ;    D    CHANGE ONLY THE DISK TO BE DISPLAYED [USEFUL TO JUMP
  20. ;        BETWEEN THE SAME POSITION ON DIFFERENT DISKS]
  21. ;    T    CHANGE ONLY THE TRACK TO BE DISPLAYED
  22. ;    S    CHANGE ONLY THE SECTOR TO BE DISPLAYED
  23. ;    +    DISPLAY NEXT SECTOR
  24. ;    -    DISPLAY PREVIOUS SECTOR
  25. ;    R    RETURNS TO CPM
  26. ;
  27. ;    ************************************************************
  28. ;    ************************************************************
  29. ;
  30. ;
  31.  
  32. .I8080
  33. .PABS
  34. .PHEX
  35. .XLINK
  36.  
  37.     .LOC    100H
  38.  
  39. CPM    =  0
  40. TBUF    =  080H
  41. BDOS    =  05H
  42.  
  43. BIOS.VECTOR:
  44.     JMP    GETBIOS
  45.     .BLKB    42
  46.  
  47. %WBOOT    = BIOS.VECTOR+3
  48. %CSTS    = BIOS.VECTOR+6
  49. %CI    = BIOS.VECTOR+9
  50. %CO    = BIOS.VECTOR+12
  51. %LO    = BIOS.VECTOR+15
  52. %PO    = BIOS.VECTOR+18
  53. %RI    = BIOS.VECTOR+21
  54. %HOME    = BIOS.VECTOR+24
  55. %SELDSK    = BIOS.VECTOR+27
  56. %SETTRK    = BIOS.VECTOR+30
  57. %SETSEC    = BIOS.VECTOR+33
  58. %SETDMA    = BIOS.VECTOR+36
  59. %READ    = BIOS.VECTOR+39
  60. %WRITE    = BIOS.VECTOR+42
  61.  
  62. GETBIOS:
  63.     LXI    D,%WBOOT
  64.     LHLD    01
  65.     MVI    B,42
  66.  
  67. GET.VECTORS:
  68.     MOV    A,M
  69.     STAX    D
  70.     INX    D
  71.     INX    H
  72.     DCR    B
  73.     JNZ    GET.VECTORS
  74.  
  75. START:    LXI    SP,STACK
  76.     XRA    A
  77.     LDA    ASCII        ;HEX MODE DEFAULT
  78.     CALL    CRLF
  79.     LXI    D,MSG0
  80.     CALL    PRINT
  81.  
  82. MAINLOOP:
  83.     CALL    CRLF
  84.     LXI    D,MSG1
  85.     CALL    PRINT
  86.     CALL    DISKSEL
  87.     CALL    CRLF
  88.     LXI    D,MSG2
  89.     CALL    PRINT
  90.     CALL    SELECT
  91.     CALL    SECSEL
  92.  
  93. NWTRK:    
  94.     CALL    CRLF
  95.     LXI    D,MSG3
  96.     CALL    PRINT
  97.     CALL    SELECT
  98.     CALL    TRACKSEL
  99.     CALL    CRLF
  100.  
  101. SECOUT:    CALL    READR
  102.     LDA    ASCII
  103.     ORA    A
  104.     JNZ    ASCDPLY
  105.     CALL    DISPLAY
  106.  
  107. CONTROL:
  108.     CALL    CRLF
  109.     LXI    D,..MSG
  110.     CALL    PRINT
  111.     MVI    C,1
  112.     CALL    BDOS
  113.     CPI    "R"    ;RETURN TO CPM
  114.     JZ    CPM
  115.     CPI    "+"    ;DISPLAY NEXT SECTOR
  116.     JZ    DISPNXT    
  117.     CPI    "-"    ;DISPLAY PREVIOUS SECTOR
  118.     JZ    DISPPRE
  119.     CPI    "N"    ;NEW SECTOR,TRACK AND DISK
  120.     JZ    MAINLOOP
  121.     CPI    "D"    ;NEW DISK
  122.     JZ    NWDSK
  123.     CPI    "S"    ;NEW SECTOR
  124.     JZ    NWSEC
  125.     CPI    "T"    ;NEW TRACK
  126.     JZ    NWTRK
  127.     CPI    "A"    ;ASCII DISPLAY MODE
  128.     JZ    ASC.SEL
  129.     CPI    "H"    ;HEX DISPLAY MODE
  130.     JZ    HEX.SEL    ;[DEFAULT]
  131.     JMP    CONTROL
  132. ..MSG:    .ASCII    "CONTROL ?   $"
  133.  
  134. CRLF:    MVI    A,0AH
  135.     CALL    CHAROUT
  136.     MVI    A,0DH
  137.     CALL    CHAROUT
  138.     RET
  139.  
  140. DISKSEL:
  141.     CALL    CHARIN
  142.     SUI    41H
  143.     JC    ERRDISK
  144.     STA    CURDISK
  145.     RET
  146.  
  147. SELECT:    CALL    CHARIN
  148.     STA    TEMP
  149.     CALL    CHARIN
  150.     STA    TEMP+1
  151.     RET
  152.  
  153. ERRDISK:
  154.     CALL    CRLF
  155.     LXI    D,..MSG
  156.     CALL    PRINT
  157.     JMP    START
  158. ..MSG:    .ASCII    " DISK SELECT ERROR!!  $"
  159.  
  160. READR:    CALL    SETUP
  161.     CALL    %READ
  162.     RET
  163.  
  164. SETUP:    LXI    B,TBUF
  165.     CALL    %SETDMA
  166.     LDA    CURDISK
  167.     MOV    C,A
  168.     CALL    %SELDSK
  169.     LDA    CURSECT
  170.     MOV    C,A
  171.     CALL    %SETSEC
  172.     LDA    CURTRACK
  173.     MOV    C,A
  174.     CALL    %SETTRK
  175.     RET
  176. SECSEL:    XRA    A
  177.     STA    CURSECT
  178.     LDA    TEMP
  179.     CPI    "0"
  180.     JZ    ..SKIP
  181.     CALL    ASCBIN
  182.     CALL    DEC
  183.     STA    CURSECT
  184. ..SKIP:    LDA    TEMP+1
  185.     CALL    ASCBIN
  186.     MOV    B,A
  187.     LDA    CURSECT
  188.     ADD    B
  189.     JZ    SECINERR
  190.     CPI    27
  191.     JNC    SECINERR
  192.     STA    CURSECT
  193.     RET
  194.  
  195. TRACKSEL:
  196.     XRA    A
  197.     STA    CURTRACK
  198.     LDA    TEMP
  199.     CPI    "0"
  200.     JZ    ..SKIP
  201.     CALL    ASCBIN
  202.     CALL    DEC
  203.     STA    CURTRACK
  204. ..SKIP:    LDA    TEMP+1
  205.     CALL    ASCBIN
  206.     MOV    B,A
  207.     LDA    CURTRACK
  208.     ADD    B
  209.     CPI    77
  210.     JNC    TRACKERR
  211.     STA    CURTRACK
  212.     RET
  213.  
  214.  
  215. SECINERR:
  216.     CALL    CRLF
  217.     LXI    D,..MSG
  218.     CALL    PRINT
  219.     JMP    START
  220. ..MSG:    .ASCII    "SECTOR VALUE OUT OF RANGE [1 TO 26] $"
  221.  
  222. TRACKERR:
  223.     CALL    CRLF
  224.     LXI    D,..MSG
  225.     CALL    PRINT
  226.     JMP    START
  227. ..MSG:    .ASCII    "TRACK VALUE OUT OF RANGE [0 TO 76] $"
  228.  
  229. ASCBIN:
  230.     SUI    "0"
  231.     JC    ASCERR
  232.     CPI    10
  233.     JNC    ASCERR
  234.     RET
  235.  
  236. ASCERR:
  237.     CALL    CRLF
  238.     LXI    D,..MSG
  239.     CALL    PRINT
  240.     JMP    MAINLOOP
  241. ..MSG:    .ASCII    "NON NUMERIC RESPONSE ERROR  $"
  242.  
  243. DEC:    ADD    A
  244.     MOV    B,A
  245.     ADD    A
  246.     ADD    A
  247.     ADD    B
  248.     RET
  249.  
  250. PRINT:    MVI    C,9
  251.     PUSH    H
  252.     CALL    BDOS
  253.     POP    H
  254.     RET
  255.  
  256. CURVAL:    LXI    D,..MSG0
  257.     CALL    PRINT
  258.     LDA    CURDISK
  259.     ADI    41H
  260.     CALL    CHAROUT
  261.     LXI    D,..MSG1
  262.     CALL    PRINT
  263.     LDA    CURTRACK
  264.     STA    SCRATCH
  265.     CALL    BINDEC
  266.     LXI    D,..MSG2
  267.     CALL    PRINT
  268.     LDA    CURSECT
  269.     STA    SCRATCH
  270.     CALL    BINDEC
  271.     CALL    CRLF
  272.     CALL    CRLF
  273.     RET
  274. ..MSG0:    .ASCII    "DISK #  $"
  275. ..MSG1:    .ASCII    "   TRACK #  $"
  276. ..MSG2:    .ASCII    "   SECTOR #  $"
  277.  
  278. BINDEC:    MVI    A,30H
  279.     STA    TEMP
  280.     STA    TEMP+1
  281.     LDA    SCRATCH
  282. ..LOOP:    SUI    10
  283.     JC    ONES
  284.     LXI    H,TEMP
  285.     INR    M
  286.     JMP    ..LOOP
  287.  
  288. ONES:    ADI    10
  289. ..LOOP:    SUI    1
  290.     JC    ..OUTCH
  291.     LXI    H,TEMP+1
  292.     INR    M
  293.     JMP    ..LOOP
  294. ..OUTCH:
  295.     LDA    TEMP
  296.     CALL    CHAROUT
  297.     LDA    TEMP+1
  298.     CALL    CHAROUT
  299.     RET
  300.  
  301. CHARIN:    MVI    C,1
  302.     CALL    BDOS
  303.     RET
  304.  
  305. CHAROUT:
  306.     MOV    E,A
  307.     PUSH    H
  308.     PUSH    PSW
  309.     MVI    C,2
  310.     CALL    BDOS
  311.     POP    PSW
  312.     POP    H
  313.     RET
  314.  
  315.  
  316. DISPLAY:
  317.     CALL    CRLF
  318.     CALL    CURVAL
  319.     LXI    H,TBUF
  320.     MVI    B,0
  321. ..LOOP:    PUSH    B
  322.     MOV    A,M
  323.     CALL    BINHEX
  324.     LDA    TEMP
  325.     CALL    CHAROUT
  326.     LDA    TEMP+1
  327.     CALL    CHAROUT
  328.     MVI    A," "
  329.     CALL    CHAROUT
  330.     POP    B
  331.     INR    B
  332.     MVI    A,16
  333.     CMP    B
  334.     CZ    NEWLINE
  335.     INX    H
  336.     MVI    A,1
  337.     CMP    H
  338.     JNZ    ..LOOP
  339.     CALL    CRLF
  340.     RET
  341.  
  342. HEX:    ADI    30H
  343.     CPI    3AH
  344.     RC
  345.     ADI    7H
  346.     RET
  347.  
  348. BINHEX:    STA    TEMP+1
  349.     ANI    0F0H
  350.     RRC
  351.     RRC
  352.     RRC
  353.     RRC
  354.     CALL    HEX
  355.     STA    TEMP
  356.     LDA    TEMP+1
  357.     ANI    0FH
  358.     CALL    HEX
  359.     STA    TEMP+1
  360.     RET
  361.  
  362. NEWLINE:
  363.     CALL    CRLF
  364.     MVI    B,0
  365.     RET
  366.  
  367. DISPNXT:
  368.     LXI    H,CURSECT
  369.     INR    M
  370.     MVI    A,27
  371.     CMP    M
  372.     JNZ    SECOUT
  373.     MVI    A,1
  374.     STA    CURSECT
  375.     LXI    H,CURTRACK
  376.     INR    M
  377.     MVI    A,77
  378.     CMP    M
  379.     JNZ    SECOUT
  380.  
  381. MSGOUT:    CALL    CRLF
  382.     LXI    D,MSG
  383.     CALL    PRINT
  384.     JMP    START
  385. MSG:    .ASCII    "END OF DISK !!   $"
  386.  
  387. DISPPRE:
  388.     LXI    H,CURSECT
  389.     DCR    M
  390.     XRA    A
  391.     CMP    M
  392.     JNZ    SECOUT
  393.     MVI    A,26
  394.     STA    CURSECT
  395.     LXI    H,CURTRACK
  396.     XRA    A
  397.     CMP    M
  398.     JZ    MSGOUT
  399.     DCR    M
  400.     JMP    SECOUT
  401.  
  402. NWDSK:    CALL    CRLF
  403.     LXI    D,MSG1
  404.     CALL    PRINT
  405.     CALL    DISKSEL
  406.     CALL    CRLF
  407.     JMP    SECOUT
  408.  
  409. NWSEC:    CALL    CRLF
  410.     LXI    D,MSG2
  411.     CALL    PRINT
  412.     CALL    SELECT
  413.     CALL    SECSEL
  414.     CALL    CRLF
  415.     JMP    SECOUT
  416.  
  417. ASCDPLY:
  418.     CALL    ASCII.SEC
  419.     JMP    CONTROL
  420.  
  421. ASC.SEL:
  422.     XRA    A
  423.     CMA
  424.     STA    ASCII
  425.     JMP    SECOUT
  426.  
  427. HEX.SEL:
  428.     XRA    A
  429.     STA    ASCII
  430.     JMP    SECOUT
  431.  
  432. PERIOD:    MVI    A,02EH
  433.     RET
  434.  
  435. ASCII.SEC:
  436.     CALL    CRLF
  437.     CALL    CURVAL
  438.     LXI    H,TBUF
  439.     MVI    B,0
  440. ..LOOP:    PUSH    B
  441.     MOV    A,M
  442.     ANI    07FH        ;STRIP PARITY BIT
  443.     CPI    20H
  444.     CC    PERIOD
  445.     CALL    CHAROUT
  446.     MVI    A," "
  447.     CALL    CHAROUT
  448.     CALL    CHAROUT
  449.     POP    B
  450.     INR    B
  451.     MVI    A,16
  452.     CMP    B
  453.     CZ    NEWLINE
  454.     INX    H
  455.     MVI    A,1
  456.     CMP    H
  457.     JNZ    ..LOOP
  458.     CALL    CRLF
  459.     RET
  460.  
  461. MSG0:    .ASCII    "THE MEMORY MERCHANT'S SECTOR DISPLAY UTILITY  $"
  462.  
  463. MSG1:    .ASCII    "ENTER DISK [ A, B, ETC. ] :  $"
  464.  
  465. MSG2:    .ASCII    "ENTER SECTOR # [ 2 DIGITS, IE., 02] :  $"
  466.  
  467. MSG3:    .ASCII    "ENTER TRACK # [ 2 DIGITS, IE., 09] :  $"
  468.  
  469. ASCII:    .BLKB    1
  470. CURDISK:
  471.     .BLKB    1
  472. CURTRACK:
  473.     .BLKB    1
  474. CURSECT:
  475.     .BLKB    1
  476. SCRATCH:
  477.     .BLKB    1
  478. TEMP:    .BLKW    1
  479.     .BLKB    20
  480. STACK:    .BLKB    1
  481.  
  482.  
  483.     .END
  484.  
  485.