X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=libsrc%2Fc64%2Fc64-c256k.s;h=ed8bf7732f579cf2ea0bdb515435a90af9a711f3;hb=285aaf8933f8f46a200d509279967eaa668bbc9f;hp=c1455595bdabe174d0aa0e209470f58e0820f6c0;hpb=8bae793f485eb687f8d4cfef15d8c418fcefa321;p=cc65 diff --git a/libsrc/c64/c64-c256k.s b/libsrc/c64/c64-c256k.s index c1455595b..ed8bf7732 100755 --- a/libsrc/c64/c64-c256k.s +++ b/libsrc/c64/c64-c256k.s @@ -38,10 +38,8 @@ BASE = $4000 PAGES = 3 * 256 -CHECKC256K = $0200 -TRANSFERC256K = $0200 -STASHOPCODE = $91 -pia = $DFC0 +TARGETLOC = $200 ; Target location for copy/check code +PIA = $DFC0 ; ------------------------------------------------------------------------ ; Data. @@ -50,25 +48,30 @@ pia = $DFC0 ; This function is used to copy code from and to the extended memory -.proc c256kcopycode -.org ::TRANSFERC256K ; Assemble for target location - stx pia -::STASHC256K := * ; Location and opcode is patched at runtime -::VECC256K := *+1 +.proc copy +template: +.org ::TARGETLOC ; Assemble for target location +entry: + stx PIA +stashop = $91 ; 'sta' opcode +operation := * ; Location and opcode is patched at runtime +address := *+1 lda ($00),y ldx #$dc - stx pia + stx PIA rts .reloc .endproc ; This function is used to check for the existence of the extended memory -.proc c256kcheckcode -.org ::CHECKC256K +.proc check +template: +.org ::TARGETLOC +entry: ldy #$00 ; Assume hardware not present lda #$fc - sta pia + sta PIA lda $01 tax and #$f8 @@ -84,7 +87,7 @@ pia = $DFC0 iny done: stx $01 ldx #$dc - stx pia + stx PIA rts .reloc .endproc @@ -99,7 +102,7 @@ window: .res 256 ; Memory "window" ; Since the functions above are copied to $200, the current contents of this ; memory area must be saved into backup storage. Allocate enough space. -backup: .res .max (.sizeof (c256kcopycode), .sizeof (c256kcheckcode)) +backup: .res .max (.sizeof (copy), .sizeof (check)) @@ -112,41 +115,41 @@ backup: .res .max (.sizeof (c256kcopycode), .sizeof (c256kcheckcode)) ; INSTALL: - lda pia+1 ; Select Peripheral Registers + lda PIA+1 ; Select Peripheral Registers ora #4 - sta pia+1 + sta PIA+1 tax - lda pia+3 + lda PIA+3 ora #4 - sta pia+3 + sta PIA+3 tay lda #$DC ; Set the default memory bank data - sta pia + sta PIA lda #$FE - sta pia+2 + sta PIA+2 txa ; Select Data Direction Registers and #$FB - sta pia+1 + sta PIA+1 tya and #$FB - sta pia+3 + sta PIA+3 lda #$FF ; Set the ports to output - sta pia - sta pia+2 + sta PIA + sta PIA+2 txa and #$C7 ora #$30 ; Set CA1 and - sta pia+1 ; select Peripheral Registers - sty pia+3 + sta PIA+1 ; select Peripheral Registers + sty PIA+3 jsr backup_and_setup_check_routine - jsr CHECKC256K + jsr check::entry cli - ldx #.sizeof (c256kcheckcode) - 1 + ldx #.sizeof (check) - 1 jsr restore_data cpy #$01 beq @present @@ -157,7 +160,7 @@ INSTALL: @present: lda #EM_ERR_OK -; rts ; Run into UNINSTALL instead +; rts ; Run into UNINSTALL instead ; ------------------------------------------------------------------------ ; UNINSTALL routine. Is called before the driver is removed from memory. @@ -185,7 +188,7 @@ PAGECOUNT: MAP: sei - sta curpage ; Remember the new page + sta curpage ; Remember the new page stx curpage+1 jsr adjust_page_and_bank stx curbank @@ -196,10 +199,10 @@ MAP: sty ptr1 jsr backup_and_setup_copy_routine ldx #window ; Return the window address + ldx #>window ; Return the window address cli rts ; ------------------------------------------------------------------------ ; USE: Tell the driver that the window is now associated with a given page. -USE: sta curpage ; Remember the page +USE: sta curpage ; Remember the page stx curpage+1 lda #window ; Return the window + ldx #>window ; Return the window rts ; ------------------------------------------------------------------------ @@ -227,7 +230,7 @@ USE: sta curpage ; Remember the page COMMIT: sei - lda curpage ; Get the current page + lda curpage ; Get the current page ldx curpage+1 jsr adjust_page_and_bank @@ -239,14 +242,14 @@ COMMIT: sty ptr1 jsr backup_and_setup_copy_routine ldx #