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

  1. ; setram.asm
  2. ;=================================
  3. ; Command:   setram  bank,address
  4. ;=================================
  5.                                   
  6. poker       = $0016               
  7. txttab      = $002d               
  8. txttop      = $1210               
  9. maxm1       = $0039               
  10. maxm0       = $1212               
  11. int0e       = $170e               
  12. int11       = $1711               
  13. rdmax       = $1bf1               
  14. rdadr       = $1bf5               
  15. rdbnk       = $1bf3               
  16. rflag       = $1bf0               
  17. tx          = $1bfe               
  18. sw1         = $1bfc               ; switch 1. n=no initialize
  19. clr         = $af81               
  20. new         = $af84               
  21. hexa        = $b8c2               
  22. primm       = $ff7d               
  23. chrout      = $ffd2               
  24. getcfg      = $ff6b               
  25.                                   
  26.                                   
  27. star        = $0b00               
  28.             .wor star             
  29.             * = star              
  30.  
  31.             jmp SetRAM
  32.             dw Date
  33.  
  34. SetRAM      bit tx                ; ram disk on?
  35.             bvc setram            ; no. set it
  36.             bit rflag             ; ok to set new one if its in the 1750
  37.             bmi setram            ; otherwise error since rdoff is required to free RAM
  38.             lda rdbnk             ; but only if bank 0 or 1
  39.             cmp #2                
  40.             bcs setram            
  41.             jsr primm             
  42.             .asc 13,"RAM disk already installed!", 0
  43.             jmp ex3               
  44.                                   
  45. setram      ldx #1                ; get %1
  46.             jsr int11             ; evaluate constant
  47.             bcc gotbnk            ; got bank
  48.             jsr primm             
  49.             .asc 13,"Syntax:  setram bank,address",13
  50.             .asc 13,"Purpose: define internal RAM disk",13, 0
  51.             jmp ex1               
  52.                                   
  53. gotbnk      cmp #0                ; high byte of bank must be zero
  54.             beq sr0               ; ok. continue
  55. ivb         jsr primm             
  56.             .asc 13,"invalid bank",13, 0
  57.             jmp ex2               
  58.                                   
  59. sr0         cpx #16               ; in 1750
  60.             bcc sr00              ; no in the 128
  61.             cpx #24               ; 1750 banks are 16,17...23
  62.             bcs ivb               
  63.             jmp in1750            
  64.                                   
  65. sr00        cpx #12               ; 128 bank must be 0-12
  66.             bcs ivb               ; invalid bank
  67.             stx rdb               ; save it for now
  68.             ldx #2                ; get RAM address
  69.             jsr int11             
  70.             stx rda               
  71.             sta rda+1             
  72.             lda rdb               ; now make sure its ok
  73.             asl a                 
  74.             tax                   
  75.             lda rda+1             
  76.             cmp minram+1,x        
  77.             bcs srok              
  78.             lda rda               
  79.             cmp minram,x          
  80.             bcs srok              
  81.             jsr primm             
  82.             .asc 13,"RAM start address too low!",13
  83.             .asc "Minimum allowed is $", 0 
  84.             lda rdb               
  85.             asl a                 
  86.             tax                   
  87.             lda minram+1,x        
  88.             ldy minram,x          
  89. srx         jsr prthex            
  90.             lda #13               
  91.             jsr chrout            
  92.             jmp ex3               
  93.                                   
  94. srok        jmp srokk             
  95.                                   
  96. srxx        jsr prthex            
  97.             lda #13               
  98.             jsr chrout            
  99.             ldx rdbnk             ; check for bank 0 or 1
  100.             cpx #4                
  101.             bcs romdsk            ; neither. no pointers to adjust
  102.             jsr $ff6b             ; get CR
  103.             sta $ff00             ; put a zero in RAM to initialize disk
  104.             lda rdadr+1           
  105.             sta poker+1           
  106.             lda rdadr             
  107.             sta poker             
  108.             lda #0                
  109.             tay                   
  110.             sta (poker),y         
  111.             iny                   
  112.             sta (poker),y         
  113.             sta $ff00             ; back to bank 15
  114.             cpx #0                ; was it bank 0?
  115.             bne mb1               ; no
  116.             lda maxm0             ; save top of RAM for RDOFF
  117.             sta rdmax             
  118.             lda maxm0+1           
  119.             sta rdmax+1           
  120.             lda rdadr             ; bank 0. set top of RAM for BASIC
  121.             sta maxm0             
  122.             lda rdadr+1           
  123.             sta maxm0+1           
  124.             sec                   ; check if program in RAM extends into disk area
  125.             lda maxm0             
  126.             sbc txttop            
  127.             lda maxm0+1           
  128.             sbc txttop+1          
  129.             bcc romdsk            ; no it doesn't
  130.             lda txttab            ; it does. Gotta do a NEW
  131.             clc                   
  132.             adc #2                
  133.             sta txttop            
  134.             lda txttab+1          
  135.             adc #0                
  136.             sta txttop+1          
  137.             lda #0                
  138.             tay                   
  139.             sta (txttab),y        
  140.             iny                   
  141.             sta (txttab),y        
  142.             jmp romdsk            
  143.                                   
  144. mb1         cpx #1                ; bank 1
  145.             bne romdsk            ; no. do nothing
  146.             lda maxm1             ; save top of RAM 1
  147.             sta rdmax             
  148.             lda maxm1+1           
  149.             sta rdmax+1           
  150.             lda rdadr             ; else set top of RAM 1
  151.             sta maxm1             
  152.             lda rdadr+1           
  153.             sta maxm1+1           
  154.             lda #0                
  155.             jsr clr               ; and CLR
  156. romdsk      jmp ex0               ; ok
  157.                                   
  158. srokk       lda tx                
  159.             ora #%01000000        
  160.             sta tx                
  161.             lda rdb               
  162.             sta rdbnk             
  163.             tax                   
  164.             jsr getcfg            
  165.             ora #1                
  166.             sta rdbnk+1           
  167.             lda rflag             
  168.             and #$7f              
  169.             sta rflag             
  170.             lda rda               
  171.             sta rdadr             
  172.             lda rda+1             
  173.             sta rdadr+1           
  174.             jsr primm             
  175.             .asc 13,"RAM disk installed at $", 0
  176.             lda rdbnk             
  177.             jsr hexa              
  178.             lda rdadr+1           
  179.             ldy rdadr             
  180.             jmp srxx              
  181.                                   
  182. prthex      jsr hexa              
  183.             tya                   
  184.             jmp hexa              
  185.                                   
  186. minram      .wor $4000            
  187.             .wor $6000            
  188.             .wor $4000            
  189.             .wor $4000            
  190.             .wor $8000            
  191.             .wor $8000            
  192.             .wor $8000            
  193.             .wor $8000            
  194.             .wor $8000            
  195.             .wor $8000            
  196.             .wor $8000            
  197.             .wor $8000            
  198.                                   
  199. rdhi        .wor 0                
  200. rdb         .wor 0                
  201. rda         .wor 0                
  202.                                   
  203. ;----------------------------------------------------
  204. ; Special case. Ram disk is in the 1750 RAM expander
  205. ;----------------------------------------------------
  206.                                   
  207. in1750      stx rdb               ; save RAM start bank (+16)
  208.             ldx #2                ; get # of banks to use
  209.             jsr int11             
  210.             cmp #0                ; high byte must be zero
  211.             beq i79               ; ok
  212. tmb         jsr primm             
  213.             .asc 13,"RAM expander isn't that big!",13, 0
  214.             jmp ex3               
  215.                                   
  216. i79         cpx #9                ; 8 banks max
  217.             bcs tmb               
  218.             cpx #0                
  219.             bne i799              
  220.             ldx #1                
  221. i799        stx rdb+1             
  222.             clc                   
  223.             lda rdb               ; high=low+# of banks
  224.             and #$0f              
  225.             sta rda+1             
  226.             adc rdb+1             
  227.             sta rdhi+1            
  228.             cmp #9                
  229.             bcs tmb               
  230.             sec                   
  231.             sbc #1                
  232.             ora #$30              
  233.             sta ms2+4             
  234.             lda rda+1             
  235.             ora #$30              
  236.             sta ms2+2             
  237.             lda #0                ; low page always zero
  238.             sta rdhi              
  239.             sta rda               
  240.             lda #$80              
  241.             ora rflag             
  242.             sta rflag             
  243. i70         ldy #5                
  244. i71         lda rdhi,y            
  245.             sta rdmax,y           
  246.             dey                   
  247.             bpl i71               
  248.             lda sw1               ; initialize?
  249.             cmp #"i"              
  250.             bne i72               ; no
  251.             lda rda               
  252.             sta reca+1            
  253.             lda rda+1             
  254.             sta reca+2            
  255.             ldy #9                
  256. i73         lda recdat,y          
  257.             sta $df01,y           
  258.             dey                   
  259.             bpl i73               
  260.             bmi i72               
  261.                                   
  262. recdat      .byt %10010000        ; move 128-rec
  263.             .wor zero             ; put a zero word at RAM expander start
  264. reca        .byt 0, 0, 0          ; rec address
  265.             .wor 2                ; two bytes to move
  266. zero        .wor 0                
  267.                                   
  268. i72         jsr primm             
  269.             .asc 13,"RAM disk installed in 1750 bank", 0
  270.             lda rdb+1             
  271.             cmp #1                
  272.             bne ms1               
  273.             lda rda+1             
  274.             ora #$30              
  275.             sta ms0+1             
  276.             jsr primm             
  277. ms0         .asc "  ",13, 0
  278.             jmp settx             
  279.                                   
  280. ms1         jsr primm             
  281. ms2         .asc "s a-b",13, 0
  282. settx       lda tx                ; flag 'RAM disk on' for shell
  283.             ora #%01000000        
  284.             sta tx                
  285. ex0         lda #0                
  286.             .byt $2c              
  287. ex1         lda #1                
  288.             .byt $2c              
  289. ex2         lda #2                
  290.             .byt $2c              
  291. ex3         lda #3                
  292.             jmp int0e             
  293.                                   
  294.             .end                  
  295.