home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / REU128.SFX / reu.a next >
Encoding:
Text File  |  1992-11-27  |  4.8 KB  |  327 lines

  1.   .DEF STASH
  2.   .DEF FETCH
  3.   .DEF SWAP
  4.  
  5.   .REF C$KERNIN
  6.   .REF C$KERNOUT
  7.   .REF C$105
  8.   .REF C$106
  9.  
  10. TOADDR   = $02; &$03
  11. TOBANK   = $04
  12. FROMADDR = $05; &$06
  13. FROMBANK = $07
  14. LEN      = $08; &$09
  15.  
  16. ;*     STASH(TO, TOBANK, FROM, FROMBANK, LEN)
  17. ;*          CHAR *TO;
  18. ;*          INT TOBANK;
  19. ;*          CHAR *FROM;
  20. ;*          INT FROMBANK;
  21. ;*          INT LEN;
  22. STASH
  23.    STA $FB
  24.    LDA #$0A
  25.    LDX #$00
  26.    LDY #$00
  27.    JSR C$105
  28.    JSR ├OMMON╙TART
  29.  
  30. ;*     ╙ET UP TO ACCESS ╔/╧ BLOCK
  31.    JSR ╔╧BLOCK
  32.  
  33. ;*     ╙TORE 'TO' ADDRESS
  34.    LDA TOADDR
  35.    STA $DF04
  36.    LDA TOADDR+1
  37.    STA $DF05
  38.  
  39. ;*     ╙TORE 'FROM' ADDRESS
  40.    LDA FROMADDR
  41.    STA $DF02
  42.    LDA FROMADDR+1
  43.    STA $DF03
  44.  
  45. ;*     ╙TORE 'TO' BANK
  46.    LDA TOBANK
  47.    STA $DF06
  48.  
  49. ;*     ╙TORE LENGTH OF TRANSFER
  50.    LDA LEN
  51.    STA $DF07
  52.    LDA LEN+1
  53.    STA $DF08
  54.  
  55. ;*     ╙AVE OLD CLOCK SPEED
  56.    LDA $D030
  57.    STA CLOCKSPEED
  58.  
  59. ;*     ╙ET CLOCK SPEED TO SLOW
  60.    LDA #0
  61.    STA $D030
  62.  
  63. ;*     ═AKE APPROPRIATE NEW VALUE
  64.    LDX FROMBANK
  65.    JSR ╞IX╥EGS
  66.  
  67. ;*     ┴CTUALLY DO ╥┼├ CALL
  68.    LDX FROMBANK
  69.    LDY #%10010000
  70.    JSR DMAñCALL
  71.  
  72. ;*     ╥ESTORE OLD VALUES
  73.    LDA CLOCKSPEED
  74.    STA $D030
  75.    LDA RAMCONFIG
  76.    STA $D506
  77.    LDA CONFIGSAVE
  78.    STA $FF00
  79.  
  80. ;*     ╬OW THAT WE'RE DONE, GO BACK TO ├
  81.    LDA #$0A
  82.    LDX #$00
  83.    LDY #$00
  84.    JMP C$106
  85.  
  86. ;*     SWAP(TO, TOBANK, FROM, FROMBANK, LEN)
  87. ;*          CHAR *TO;
  88. ;*          INT TOBANK;
  89. ;*          CHAR *FROM;
  90. ;*          INT FROMBANK;
  91. ;*          INT LEN;
  92. SWAP
  93.    STA $FB
  94.    LDA #$0A
  95.    LDX #$00
  96.    LDY #$00
  97.    JSR C$105
  98.    JSR ├OMMON╙TART
  99.  
  100. ;*     ╙ET UP TO ACCESS ╔/╧ BLOCK
  101.    JSR ╔╧BLOCK
  102.  
  103. ;*     ╙TORE 'TO' ADDRESS
  104.    LDA TOADDR
  105.    STA $DF04
  106.    LDA TOADDR+1
  107.    STA $DF05
  108.  
  109. ;*     ╙TORE 'FROM' ADDRESS
  110.    LDA FROMADDR
  111.    STA $DF02
  112.    LDA FROMADDR+1
  113.    STA $DF03
  114.  
  115. ;*     ╙TORE 'TO' BANK
  116.    LDA TOBANK
  117.    STA $DF06
  118.  
  119. ;*     ╙TORE LENGTH OF TRANSFER
  120.    LDA LEN
  121.    STA $DF07
  122.    LDA LEN+1
  123.    STA $DF08
  124.  
  125. ;*     ╙AVE OLD CLOCK SPEED
  126.    LDA $D030
  127.    STA CLOCKSPEED
  128.  
  129. ;*     ╙ET CLOCK SPEED TO SLOW
  130.    LDA #0
  131.    STA $D030
  132.  
  133. ;*     ═AKE APPROPRIATE NEW VALUE
  134.    LDX FROMBANK
  135.    JSR ╞IX╥EGS
  136.  
  137. ;*     ┴CTUALLY DO ╥┼├ CALL
  138.    LDX FROMBANK
  139.    LDY #%10010010
  140.    JSR DMAñCALL
  141.  
  142. ;*     ╥ESTORE OLD VALUES
  143.    LDA CLOCKSPEED
  144.    STA $D030
  145.    LDA RAMCONFIG
  146.    STA $D506
  147.    LDA CONFIGSAVE
  148.    STA $FF00
  149.  
  150. ;*     ╬OW THAT WE'RE DONE, GO BACK TO ├
  151.    LDA #$0A
  152.    LDX #$00
  153.    LDY #$00
  154.    JMP C$106
  155.  
  156. ;*     FETCH(TO, TOBANK, FROM, FROMBANK, LEN)
  157. ;*          CHAR *TO;
  158. ;*          INT TOBANK;
  159. ;*          CHAR *FROM;
  160. ;*          INT FROMBANK;
  161. ;*          INT LEN;
  162. FETCH
  163.    STA $FB
  164.    LDA #$0A
  165.    LDX #$00
  166.    LDY #$00
  167.    JSR C$105
  168.    JSR ├OMMON╙TART
  169.  
  170. ;*     ╙ET UP TO ACCESS ╔/╧ BLOCK
  171.    JSR ╔╧BLOCK
  172.  
  173. ;*     ╙TORE 'TO' ADDRESS
  174.    LDA TOADDR
  175.    STA $DF02
  176.    LDA TOADDR+1
  177.    STA $DF03
  178.  
  179. ;*     ╙TORE 'FROM' ADDRESS
  180.    LDA FROMADDR
  181.    STA $DF04
  182.    LDA FROMADDR+1
  183.    STA $DF05
  184.  
  185. ;*     ╙TORE 'TO' BANK
  186.    LDA FROMBANK
  187.    STA $DF06
  188.  
  189. ;*     ╙TORE LENGTH OF TRANSFER
  190.    LDA LEN
  191.    STA $DF07
  192.    LDA LEN+1
  193.    STA $DF08
  194.  
  195. ;*     ╙AVE OLD CLOCK SPEED
  196.    LDA $D030
  197.    STA CLOCKSPEED
  198.  
  199. ;*     ╙ET CLOCK SPEED TO SLOW
  200.    LDA #0
  201.    STA $D030
  202.  
  203. ;*     ═AKE APPROPRIATE NEW VALUE
  204.    LDX TOBANK
  205.    JSR ╞IX╥EGS
  206.  
  207. ;*     ┴CTUALLY DO ╥┼├ CALL
  208.    LDX TOBANK
  209.    LDY #%10010001
  210.    JSR DMAñCALL
  211.  
  212. ;*     ╥ESTORE OLD VALUES
  213.    LDA CLOCKSPEED
  214.    STA $D030
  215.    LDA RAMCONFIG
  216.    STA $D506
  217.    LDA CONFIGSAVE
  218.    STA $FF00
  219.  
  220. ;*     ╬OW THAT WE'RE DONE, GO BACK TO ├
  221.    LDA #$0A
  222.    LDX #$00
  223.    LDY #$00
  224.    JMP C$106
  225.  
  226. ;*
  227. ;*** ╓ARIABLES
  228. ;*
  229. CLOCKSPEED .BSS 1
  230. TEMP       .BSS 1
  231. RAMCONFIG  .BSS 1
  232. CONFIGSAVE .BSS 1
  233.  
  234. ;*
  235. ;*** ╙UBROUTINES
  236. ;*
  237.  
  238. ;*     ┴CCESS ╔/╧ BLOCK
  239. ╔╧BLOCK
  240.    LDA $FF00
  241.    STA CONFIGSAVE
  242.    AND #%11111110
  243.    STA $FF00
  244.    RTS
  245.  
  246. ;*     ┴LLOW US TO ACCESS ANY BLOCK OF ╥┴═
  247. ╞IX╥EGS
  248.    JSR C$KERNIN
  249.    LDX #$FF
  250.    LDY #$6B
  251.    JSR C$KERNOUT
  252.    AND #%01000000
  253.    STA TEMP
  254.    LDA $D506
  255.    STA RAMCONFIG
  256.    AND #%10111111
  257.    ORA TEMP
  258.    STA $D506
  259.    RTS
  260.  
  261. ;*     ├OMMON START CODE
  262. ├OMMON╙TART
  263.    LDY #0       ; START AT START OF PARMS
  264.    LDA ($82),┘
  265.    STA TOADDR
  266.    INY
  267.    LDA ($82),Y
  268.    STA TOADDR+1
  269.    INY
  270.    LDA ($82),Y
  271.    STA TOBANK
  272.    INY
  273.    INY
  274.    LDA ($82),Y
  275.    STA FROMADDR
  276.    INY
  277.    LDA ($82),Y
  278.    STA FROMADDR+1
  279.    INY
  280.    LDA ($82),Y
  281.    STA FROMBANK
  282.    INY
  283.    INY
  284.    LDA ($82),Y
  285.    STA LEN
  286.    INY
  287.    LDA ($82),Y
  288.    STA LEN+1
  289.    RTS
  290.  
  291. ;*         ─O ACTUAL ─═┴ CALL      
  292. DMAñCALL
  293.    TXA            ; ╙AVE BANK TO USE
  294.    PHA
  295.    TYA            ; ╙AVE ╥┼├ COMMAND BYTE
  296.    PHA
  297.    LDX #5         ; ╞IX UP ─═┴ STUFF TO SET CONFIGURATION CORRECTLY
  298. DMAñLOOP1
  299.    LDA DMAñCHANGE,X
  300.    STA $03F3,X
  301.    DEX
  302.    BPL DMAñLOOP1
  303.  
  304.    PLA            ; ╥ESTORE ╥┼├ COMMAND BYTE
  305.    TAY
  306.    PLA            ; ╥ESTORE BANK TO USE
  307.    TAX
  308.    JSR C$KERNIN   ; ─O ACTUAL ─═┴ CALL
  309.    LDX #$FF
  310.    LDY #$50
  311.    JMP C$KERNOUT
  312.  
  313.    LDX #5
  314. DMAñLOOP2         ; ╥ESTORE ─═┴ STUFF TO ORIGINAL VALUES
  315.    LDA DMAñORIG,X
  316.    STA $03F3,X
  317.    DEX
  318.    BPL DMAñLOOP2
  319.    RTS
  320.  
  321. DMAñCHANGE
  322.    STA $FF00
  323.    STY $DF01
  324. DMAñORIG
  325.    STY $DF01
  326.    STA $FF00
  327.