home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / enterprs / c128 / text / examples.arc / RDIR.A < prev    next >
Encoding:
Text File  |  1989-12-01  |  14.4 KB  |  404 lines

  1. ; rdir.asm
  2. ;==========================================
  3. ; Command: directory of installed commands
  4. ;==========================================
  5.                                   
  6. zrda        = $0063               
  7. index1      = $0024               
  8. cr          = $0026               
  9. pntr        = $00ec               
  10. hexa        = $b8c2               
  11. chrout      = $ffd2               
  12. rdadr       = $1bf5               
  13. rdbnk       = $1bf3               
  14. rdmax       = $1bf1               
  15. rflag       = $1bf0               
  16. tx          = $1bfe               
  17. sw1         = $1bfc               
  18. int21       = $1721               
  19. enddsk      = $1bf1               
  20. primm       = $ff7d               
  21. getcfg      = $ff6b               
  22. stop        = $ffe1               
  23. int0e       = $170e               
  24.                                   
  25.                                   
  26. star        = $0b00               
  27.             .wor star             
  28.             * = star              
  29.  
  30.             jmp rdir
  31.             dw  Date
  32.                   
  33. rdir        bit tx
  34.             bvs cdir              
  35.             jsr lgreen            
  36.             jsr primm             
  37.             .asc 13,"RAM disk is off",13,0
  38.             lda #1                
  39.             jmp int0e             
  40.                                   
  41. cdir        ldy #4                ;function 4. Initialize to start of RAM disk
  42.             jsr int21             
  43.             ldy #2                
  44. cd00        lda zrda,y            ;save start of RAM disk for summary
  45.             sta rstrt,y           
  46.             dey                   
  47.             bpl cd00              
  48.             iny                   
  49.             sty ttf               
  50.             sty ttf+1             
  51.             sty flag              
  52. cd0         ldy #5                ;fetch header
  53.             jsr int21             
  54.             beq cd1               ;end of disk
  55.             inc ttf               
  56.             bne gcd2              
  57.             inc ttf+1             
  58. gcd2        jmp cd2               ;no. display it
  59.                                   
  60. cd1         sta $ff00             ;bank 15
  61.             lda #13               
  62.             jsr chrout            
  63.             jsr chrout            
  64.             jsr white             
  65.             sec                   
  66.             lda zrda              
  67.             sbc rstrt             
  68.             sta len               
  69.             lda zrda+1            
  70.             sbc rstrt+1           
  71.             sta len+1             
  72.             lda zrda+2            
  73.             sbc rstrt+2           
  74.             sta len+2             
  75.             jsr h2a               
  76.             jsr lgreen            
  77.             jsr primm             
  78.             .asc " bytes used in ", 0 
  79.             jsr white             
  80.             lda ttf               
  81.             sta len               
  82.             lda ttf+1             
  83.             sta len+1             
  84.             lda #0                
  85.             sta len+2             
  86.             jsr h2a               
  87.             jsr lgreen            
  88.             jsr primm             
  89.             .asc " File(s). ", 0  
  90.             jsr white             
  91.             lda rdmax             
  92.             ldx rdmax+1           
  93.             ldy #0                
  94.             bit rflag             
  95.             bpl zzz               
  96.             pha                   
  97.             txa                   
  98.             tay                   
  99.             pla                   
  100.             tax                   
  101.             lda #0                
  102. zzz         sec                   
  103.             sbc zrda              
  104.             sta len               
  105.             txa                   
  106.             sbc zrda+1            
  107.             sta len+1             
  108.             tya                   
  109.             sbc zrda+2            
  110.             sta len+2             
  111.             jsr h2a               
  112.             jsr lgreen            
  113.             jsr primm             
  114.             .asc " bytes free.",13,0
  115.             jsr white             
  116.             lda #"("              
  117.             jsr chrout            
  118.             bit rflag             
  119.             bpl xxx               
  120.             jsr in1750            
  121.             jmp ex0               
  122.                                   
  123. xxx         lda #"$"              
  124.             jsr chrout            
  125.             lda rdadr+1           
  126.             jsr hexa              
  127.             lda rdadr             
  128.             jsr hexa              
  129.             lda #"-"              
  130.             jsr chrout            
  131.             clc                   
  132.             lda zrda              
  133.             adc #2                
  134.             bcc tyr               
  135.             inc zrda+1            
  136. tyr         pha                   
  137.             lda zrda+1            
  138.             jsr hexa              
  139.             pla                   
  140.             jsr hexa              
  141.             jsr primm             
  142.             .asc " in bank ", 0   
  143.             lda #0                
  144.             ldx rdbnk             
  145.             jsr $8e32             
  146.             jsr primm             
  147.             .asc ")",13,0
  148. ex0         lda #0                
  149.             jmp int0e             
  150.                                   
  151. cd2         lda sw1               
  152.             cmp #"w"              
  153.             bne ccd2              
  154.             dec flag              
  155.             bpl psp               
  156.             lda #2                
  157.             sta flag              
  158.             bne ccd2              
  159. psp         lda #" "              
  160.             jsr chrout            
  161.             .byt $2c              
  162. ccd2        lda #13               
  163.             jsr chrout            
  164.             jsr yellow            
  165.             ldy #2                
  166. cd3         lda $1b60,y           ;print command name
  167.             beq cd4               ;end of name
  168.             jsr chrout            
  169.             iny                   
  170.             bne cd3               
  171.                                   
  172. cd4         iny                   
  173.             lda $1b60,y           ;get CR
  174.             sta index1            
  175.             bit index1            
  176.             php                   ;save it (bmi if seq file)
  177.             rol a                 ;convert to RAM bank 0-3
  178.             rol a                 
  179.             rol a                 
  180.             and #3                
  181.             ora #$30              
  182.             sta ldbank            
  183.             iny                   ;point to load address
  184.             sty index1            ;and save it
  185. cd5         lda #" "              
  186.             jsr chrout            
  187.             iny                   ;tab(16)
  188.             cpy #19               
  189.             bne cd5               
  190.             jsr cyan              
  191.             plp                   ;seq file?
  192.             bpl nprog             ;no prog
  193.             bvc batch             
  194.             jsr lgreen            
  195.             jsr primm             
  196.             .asc "(type)    ", 0  
  197.             jmp nxt               
  198.                                   
  199. batch       jsr dgreen            
  200.             jsr primm             
  201.             .asc "(batch)   ", 0  
  202.             jmp nxt               
  203.                                   
  204. nprog       ldy index1            
  205.             lda $1b60,y           ;get load address
  206.             tax                   
  207.             stx ldad              
  208.             iny                   
  209.             lda $1b60,y           
  210.             iny                   
  211.             sta ldad+1            
  212.             cpx #1                
  213.             bne nnpr              
  214.             dec $f1               
  215. nnpr        sty index1+1          ;save length of header
  216.             tay                   
  217.             jsr prtx              ;display start address
  218.             lda #"-"              
  219.             jsr chrout            
  220.             ldy #0                ;calc end=start+len-len.of.header
  221.             lda $1b60,y           
  222.             sec                   
  223.             sbc index1+1          
  224.             tax                   
  225.             iny                   
  226.             lda $1b60,y           
  227.             sbc #0                
  228.             tay                   
  229.             stx temp              
  230.             sty temp+1            
  231.             clc                   
  232.             txa                   
  233.             adc ldad              
  234.             tax                   
  235.             tya                   
  236.             adc ldad+1            
  237.             tay                   
  238.             jsr prthex            
  239. nxt         ldy #0                
  240. ;lda $1b60,y
  241. ;clc
  242. ;adc zrda
  243. ;pha
  244. ;iny
  245. ;lda $1b60,y
  246. ;adc zrda+1
  247. ;sta zrda+1
  248. ;pla
  249. ;sta zrda
  250.             jsr stop              
  251.             bne gocd0             
  252.             lda #$ff              
  253.             jmp int0e             
  254.                                   
  255. gocd0       ldy #7                ;next file
  256.             jsr int21             
  257.             bcc ggcd0             ;ok
  258.             jsr white             
  259.             jsr primm             
  260.             .asc 13,"Ramdisk corrupt? Read past end.",13,0
  261.             lda #4                
  262.             jmp int0e             
  263.                                   
  264. ggcd0       jmp cd0               
  265.                                   
  266. prtx        lda #"$"              
  267.             jsr chrout            
  268. prthex      stx index1            
  269.             tya                   
  270.             jsr hexa              
  271.             lda index1            
  272.             jmp hexa              
  273.                                   
  274. ldad        .wor 0                
  275. ldbank      .byt 0                
  276. temp        .wor 0                
  277. rstrt       .byt 0, 0, 0          ;start of RAM disk
  278. rmax        .byt 0, 0, 0          ;max size of RAM disk
  279.                                   
  280.                                   
  281. in1750      jsr primm             
  282.             .asc "RAM disk in 1750 bank", 0 
  283.             sec                   
  284.             lda rdmax+1           
  285.             sbc rdadr+1           
  286.             cmp #1                
  287.             bne ms11              
  288.             lda rdadr+1           
  289.             ora #$30              
  290.             sta ms0+1             
  291.             jsr primm             
  292. ms0         .asc "  .)",13,0
  293.             jmp int0e             
  294.                                   
  295. ms11        lda rdadr+1           
  296.             ora #$30              
  297.             sta ms2+2             
  298.             lda rdmax+1           
  299.             ora #$30              
  300.             sec                   
  301.             sbc #1                
  302.             sta ms2+4             
  303. ms1         jsr primm             
  304. ms2         .asc "s a-b.)",13,0
  305.             jmp int0e             
  306.                                   
  307. ;-------------------------------
  308. ;output a hex # in ascii decimal
  309. ;-------------------------------
  310. ; (3 byte number in 'len')
  311.                                   
  312. h2a         ldx #0                ;initialize indexes
  313.             ldy #0                
  314.             sty h2atmp            
  315. loop        lda #"0"              ;initialize digit
  316.             sta ascii,x           
  317. loop2       sec                   
  318.             lda len               
  319.             sbc table,y           
  320.             pha                   ;increment the digit?
  321.             lda len+1             
  322.             sbc table+1,y         
  323.             pha                   
  324.             lda len+2             
  325.             sbc table+2,y         
  326.             bcc nxdigt            ;branch if 'no'
  327.             sta len+2             
  328.             pla                   
  329.             sta len+1             
  330.             pla                   ;adjust the hex value
  331.             sta len               ;and increment the digit
  332.             lda #$ff              
  333.             sta h2atmp            
  334.             inc ascii,x           
  335.             bne loop2             
  336.                                   
  337. nxdigt      pla                   
  338.             pla                   
  339.             iny                   ;prepare for next digit
  340.             iny                   
  341.             iny                   
  342.             iny                   
  343.             inx                   
  344.             bit h2atmp            
  345.             bmi nadj              
  346.             lda #" "              
  347.             sta ascii-1,x         
  348. nadj        cpx #8                
  349.             bcc loop              
  350. npr         nop                   
  351.             ldy #0                ;prepare to send number
  352. loop3       cpy #2                
  353.             beq pcom              
  354.             cpy #5                
  355.             bne nocom             
  356. pcom        lda ascii-1,y         
  357.             cmp #" "              
  358.             beq nocom             
  359.             lda #","              
  360. ppcom       jsr chrout            
  361. nocom       lda ascii,y           
  362.             cmp #" "              
  363.             beq skpsp             
  364.             jsr chrout            
  365. skpsp       iny                   
  366.             cpy #8                
  367.             bcc loop3             
  368.             rts                   ;done, return
  369.                                   
  370.                                   
  371. table       .wor 38528, 152       
  372.             .wor 16960, 15        
  373.             .wor 34464, 1         
  374.             .wor 10000, 0         
  375.             .wor  1000, 0         
  376.             .wor   100, 0         
  377.             .wor    10, 0         
  378.             .wor     1, 0         
  379.                                   
  380.                                   
  381. ascii       .asc "00000000"       
  382. ttf         .wor 0                
  383. len         .byt 0, 0, 0          
  384. flag        .byt 0                
  385. h2atmp      .byt 0                
  386.                                   
  387. white       lda #1                
  388.             .byt $2c              
  389. lgreen      lda #6                
  390.             .byt $2c              
  391. dgreen      lda #2                
  392.             .byt $2c              
  393. cyan        lda #3                
  394.             .byt $2c              
  395. yellow      lda #0                
  396.             sty sy+1              
  397.             tay                   
  398.             lda $1bc8,y           
  399.             sta $f1               
  400. sy          ldy #0                
  401.             rts                   
  402.                                   
  403.             .end                  
  404.