home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_16_1987_Transactor_Publishing.d64 / ramdisk64.pal (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  3KB  |  146 lines

  1. 100 sys700
  2. 110 .opt oo
  3. 120 ;
  4. 130 *=$9ee8
  5. 140 ;
  6. 150 chrget   =$0073
  7. 160 ciaint   =$dc0d
  8. 170 bankin   =$01
  9. 180 tempzero =$fd52
  10. 190 tempbloc =$fd57
  11. 200 tempreg  =$fd59
  12. 210 sov      =$fd5a
  13. 220 basicvec =$0308
  14. 230 border   =$d020
  15. 240 ;
  16. 250 ;*** change basic vector
  17. 260 lda basicvec
  18. 270 sta tempvec ;move to end of program
  19. 280 lda basicvec+1
  20. 290 sta tempvec+1
  21. 300 lda #<ram
  22. 310 sta basicvec
  23. 320 lda #>ram
  24. 330 sta basicvec+1
  25. 340 rts
  26. 350 ;
  27. 360 ;*** main routine starts here
  28. 370 ram   ldy #$01
  29. 380 lda ($7a),y ; look ahead of basic
  30. 390 cmp #"&"    ; check for character
  31. 400 beq r2
  32. 410 jmp lode
  33. 420 r2    jsr chrget  ; start of save
  34. 430 sec
  35. 440 lda 46
  36. 450 sbc 44
  37. 460 cmp #93     ; check size
  38. 470 bcc r3
  39. 480 dec border  ; warn too large
  40. 490 jmp exit
  41. 500 r3    jsr zersa
  42. 510 sec
  43. 520 lda $2d
  44. 530 sta sov
  45. 540 sbc $2b
  46. 550 sta tempbloc ;get number blks low
  47. 560 lda $2e
  48. 570 sta sov+1
  49. 580 sbc $2c
  50. 590 sta tempbloc+1 ;number blks high
  51. 600 sec
  52. 610 lda #$00
  53. 620 sbc tempbloc ; subtract blks
  54. 630 sta $fd
  55. 640 sta strdisk  ; start address in ram disk
  56. 650 lda #$fd
  57. 660 sbc tempbloc+1
  58. 670 sta $fe
  59. 680 sta strdisk+1
  60. 690 lda $2b
  61. 700 sta $fb
  62. 710 lda $2c
  63. 720 sta $fc
  64. 730 ldy #$00
  65. 740 start lda ($fb),y ; source
  66. 750 sta ($fd),y  ; destination
  67. 760 inc $fb
  68. 770 bne s2
  69. 780 inc $fc
  70. 790 s2   inc $fd
  71. 800 bne s3
  72. 810 inc $fe
  73. 820 s3   lda $fb
  74. 830 cmp sov
  75. 840 bne start
  76. 850 lda $fc
  77. 860 cmp sov+1    ;keep (NULL)ing to the sov
  78. 870 bne start
  79. 880 jsr zerlo
  80. 890 jmp exit
  81. 900 lode cmp #"\" ;check for character
  82. 910 bne exit
  83. 920 jsr chrget   ;start of load
  84. 930 jsr zersa
  85. 940 lda strdisk  ;start address in ram disk
  86. 950 sta $fb      ;store in source
  87. 960 lda strdisk+1
  88. 970 sta $fc
  89. 980 lda $2b      ;start of basic (low)
  90. 990 sta $fd      ;destination  (low)
  91. 1000 lda $2c      ;basic (high)
  92. 1010 sta $fe      ; destination (high)
  93. 1020 ldy #$00
  94. 1030 stld lda ($fb),y  ;source
  95. 1040 sta ($fd),y  ; target
  96. 1050 inc $fb
  97. 1060 bne l2
  98. 1070 inc $fc
  99. 1080 l2   inc $fd
  100. 1090 bne l3
  101. 1100 inc $fe
  102. 1110 l3   lda $fb
  103. 1120 cmp #$00
  104. 1130 bne stld
  105. 1140 lda $fc
  106. 1150 cmp #$fd
  107. 1160 bne stld
  108. 1170 lda $7b      ;check for running prgrm
  109. 1180 cmp #$02
  110. 1190 bne prgm
  111. 1200 lda $fd      ;direct mode then set sov
  112. 1210 sta $2d
  113. 1220 lda $fe      ; sov
  114. 1230 sta 46
  115. 1240 jsr zerlo
  116. 1250 exit jmp (tempvec)
  117. 1260 prgm jsr zerlo
  118. 1270 jsr $e1a1   ;basic load routine
  119. 1280 jmp $a7ae   ;back to interpreter
  120. 1290 zersa lda bankin ;switch out roms
  121. 1300 sta tempreg
  122. 1310 lda #$7f
  123. 1320 sta ciaint  ;kill interupts
  124. 1330 lda #$00
  125. 1340 sta bankin
  126. 1350 ldx #$04
  127. 1360 zs1 lda $fb,x ;move to a safe spot
  128. 1370 sta tempzero,x
  129. 1380 dex
  130. 1390 bne zs1
  131. 1400 rts
  132. 1410 zerlo ldx #$04
  133. 1420 zl1   lda tempzero,x ; put back
  134. 1430 sta $fb,x
  135. 1440 dex
  136. 1450 bne zl1
  137. 1460 lda tempreg ;switch roms on
  138. 1470 sta bankin
  139. 1480 lda #$81    ;start interupts
  140. 1490 sta ciaint
  141. 1500 rts
  142. 1510 ;************ program variables
  143. 1520 strdisk .byte 0,0 ;start address in disk memory
  144. 1530 tempvec .byte 0,0 ;points to interpreter loop
  145. 1540 ;
  146.