Added "popptr1" which is of common use to save some bytes.
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _getdevicedir
|
.export _getdevicedir
|
||||||
.import popax, popa
|
.import popptr1, popa
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "errno.inc"
|
.include "errno.inc"
|
||||||
@@ -17,9 +17,7 @@ _getdevicedir:
|
|||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
|
|
||||||
; Save buf
|
; Save buf
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Set buf
|
; Set buf
|
||||||
sta mliparam + MLI::ON_LINE::DATA_BUFFER
|
sta mliparam + MLI::ON_LINE::DATA_BUFFER
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
.constructor initiobuf
|
.constructor initiobuf
|
||||||
.export iobuf_alloc, iobuf_free
|
.export iobuf_alloc, iobuf_free
|
||||||
.import __STARTUP_RUN__
|
.import __STARTUP_RUN__
|
||||||
.import incsp2, popax
|
.import incsp2, popptr1
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "errno.inc"
|
.include "errno.inc"
|
||||||
@@ -41,9 +41,7 @@ initiobuf:
|
|||||||
iobuf_alloc:
|
iobuf_alloc:
|
||||||
; Get and save "memptr"
|
; Get and save "memptr"
|
||||||
jsr incsp2
|
jsr incsp2
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Search table for free entry
|
; Search table for free entry
|
||||||
ldx #$00
|
ldx #$00
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _lseek
|
.export _lseek
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "errno.inc"
|
.include "errno.inc"
|
||||||
@@ -18,9 +18,7 @@ _lseek:
|
|||||||
stx tmp2
|
stx tmp2
|
||||||
|
|
||||||
; Get and save offset
|
; Get and save offset
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
jsr popax
|
jsr popax
|
||||||
sta ptr2
|
sta ptr2
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export rwprolog, rwcommon, rwepilog
|
.export rwprolog, rwcommon, rwepilog
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
|
|
||||||
.include "zeropage.inc"
|
.include "zeropage.inc"
|
||||||
.include "errno.inc"
|
.include "errno.inc"
|
||||||
@@ -17,9 +17,7 @@ rwprolog:
|
|||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
|
|
||||||
; Get and save buf
|
; Get and save buf
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Get and process fd
|
; Get and process fd
|
||||||
jsr popax
|
jsr popax
|
||||||
|
|||||||
@@ -17,16 +17,14 @@
|
|||||||
.export _dio_log_to_phys
|
.export _dio_log_to_phys
|
||||||
.include "atari.inc"
|
.include "atari.inc"
|
||||||
.importzp ptr1,ptr2,ptr3
|
.importzp ptr1,ptr2,ptr3
|
||||||
.import popax,__oserror
|
.import popax, popptr1, __oserror
|
||||||
|
|
||||||
.proc _dio_log_to_phys
|
.proc _dio_log_to_phys
|
||||||
|
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1 ; pointer to output structure
|
stx ptr2+1 ; pointer to output structure
|
||||||
|
|
||||||
jsr popax
|
jsr popptr1 ; save pointer to input data
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1 ; save pointer to input data
|
|
||||||
|
|
||||||
jsr popax
|
jsr popax
|
||||||
sta ptr3
|
sta ptr3
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
.export __sio_call
|
.export __sio_call
|
||||||
.include "atari.inc"
|
.include "atari.inc"
|
||||||
.import popa,popax
|
.import popa, popax, popptr1
|
||||||
.import sectsizetab,__oserror
|
.import sectsizetab,__oserror
|
||||||
.importzp ptr1
|
.importzp ptr1
|
||||||
|
|
||||||
@@ -31,9 +31,7 @@
|
|||||||
sta DAUX1 ; set sector #
|
sta DAUX1 ; set sector #
|
||||||
stx DAUX2
|
stx DAUX2
|
||||||
|
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
ldy #sst_flag
|
ldy #sst_flag
|
||||||
lda (ptr1),y
|
lda (ptr1),y
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
.export _read
|
.export _read
|
||||||
.constructor initstdin
|
.constructor initstdin
|
||||||
|
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3
|
.importzp ptr1, ptr2, ptr3
|
||||||
.forceimport disable_caps
|
.forceimport disable_caps
|
||||||
|
|
||||||
@@ -26,9 +26,7 @@
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta ptr2+1 ; Remember -count-1
|
sta ptr2+1 ; Remember -count-1
|
||||||
|
|
||||||
jsr popax ; get buf
|
jsr popptr1 ; get buf
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
jsr popax ; get fd and discard
|
jsr popax ; get fd and discard
|
||||||
|
|
||||||
L1: inc ptr2
|
L1: inc ptr2
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _write
|
.export _write
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1
|
.importzp ptr1, ptr2, ptr3, tmp1
|
||||||
|
|
||||||
.include "atmos.inc"
|
.include "atmos.inc"
|
||||||
@@ -23,9 +23,7 @@
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta ptr2+1 ; Remember -count-1
|
sta ptr2+1 ; Remember -count-1
|
||||||
|
|
||||||
jsr popax ; get buf
|
jsr popptr1 ; get buf
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
jsr popax ; get fd and discard
|
jsr popax ; get fd and discard
|
||||||
L1: inc ptr2
|
L1: inc ptr2
|
||||||
bne L2
|
bne L2
|
||||||
|
|||||||
@@ -6,16 +6,14 @@
|
|||||||
|
|
||||||
.export _cbm_k_save
|
.export _cbm_k_save
|
||||||
.import SAVE
|
.import SAVE
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp ptr1, tmp1
|
.importzp ptr1, tmp1
|
||||||
|
|
||||||
|
|
||||||
_cbm_k_save:
|
_cbm_k_save:
|
||||||
sta tmp1 ; store end address
|
sta tmp1 ; store end address
|
||||||
stx tmp1+1
|
stx tmp1+1
|
||||||
jsr popax ; pop start address
|
jsr popptr1 ; pop start address
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
lda #ptr1
|
lda #ptr1
|
||||||
ldx tmp1
|
ldx tmp1
|
||||||
ldy tmp1+1
|
ldy tmp1+1
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
.import fnparse, fnadd, fnparsename
|
.import fnparse, fnadd, fnparsename
|
||||||
.import opencmdchannel, closecmdchannel
|
.import opencmdchannel, closecmdchannel
|
||||||
.import writefndiskcmd, readdiskerror
|
.import writefndiskcmd, readdiskerror
|
||||||
.import popax
|
.import popptr1
|
||||||
|
|
||||||
.import fncmd, fnunit
|
.import fncmd, fnunit
|
||||||
.importzp ptr1
|
.importzp ptr1
|
||||||
@@ -26,10 +26,8 @@
|
|||||||
lda #'='
|
lda #'='
|
||||||
jsr fnadd
|
jsr fnadd
|
||||||
|
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
; ldy #0 Y=0 guaranteed by popptr1
|
||||||
stx ptr1+1
|
|
||||||
ldy #0
|
|
||||||
jsr fnparsename ; Parse second filename
|
jsr fnparsename ; Parse second filename
|
||||||
bne done
|
bne done
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export __swap
|
.export __swap
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3
|
.importzp ptr1, ptr2, ptr3
|
||||||
|
|
||||||
|
|
||||||
@@ -19,13 +19,11 @@ __swap: eor #$FF
|
|||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
|
|
||||||
jsr popax ; Get p
|
jsr popptr1 ; Get p
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Prepare for swap
|
; Prepare for swap
|
||||||
|
|
||||||
ldy #$00
|
; ldy #$00 is guaranteed by popptr1
|
||||||
|
|
||||||
; Swap loop
|
; Swap loop
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
.export _getcwd
|
.export _getcwd
|
||||||
|
|
||||||
.import popax
|
.import popptr1
|
||||||
.import __cwd
|
.import __cwd
|
||||||
.importzp ptr1, ptr2
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
@@ -25,13 +25,11 @@
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta ptr2+1
|
sta ptr2+1
|
||||||
|
|
||||||
jsr popax ; Get buf
|
jsr popptr1 ; Get buf to ptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1 ; Save buf
|
|
||||||
|
|
||||||
; Copy __cwd to the given buffer checking the length
|
; Copy __cwd to the given buffer checking the length
|
||||||
|
|
||||||
ldy #$00
|
; ldy #$00 is guaranteed by popptr10
|
||||||
loop: inc ptr2
|
loop: inc ptr2
|
||||||
bne @L1
|
bne @L1
|
||||||
inc ptr2+1
|
inc ptr2+1
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _longjmp
|
.export _longjmp
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp sp, ptr1, ptr2
|
.importzp sp, ptr1, ptr2
|
||||||
|
|
||||||
_longjmp:
|
_longjmp:
|
||||||
@@ -16,10 +16,8 @@ _longjmp:
|
|||||||
bne @L1
|
bne @L1
|
||||||
inc ptr2 ; 0 is illegal, according to the standard ...
|
inc ptr2 ; 0 is illegal, according to the standard ...
|
||||||
; ... and, must be replaced by 1
|
; ... and, must be replaced by 1
|
||||||
@L1: jsr popax ; get buf
|
@L1: jsr popptr1 ; get buf
|
||||||
sta ptr1
|
; ldy #0 is guaranteed by popptr1
|
||||||
stx ptr1+1
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
; Get the old parameter stack
|
; Get the old parameter stack
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _memchr
|
.export _memchr
|
||||||
.import popax, return0
|
.import popax, popptr1 return0
|
||||||
.importzp ptr1, ptr2
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
|
|
||||||
@@ -18,11 +18,10 @@
|
|||||||
sta ptr2+1 ; Save ones complement of n
|
sta ptr2+1 ; Save ones complement of n
|
||||||
jsr popax ; get c
|
jsr popax ; get c
|
||||||
pha
|
pha
|
||||||
jsr popax ; get p
|
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
ldy #$00
|
jsr popptr1 ; get p
|
||||||
|
|
||||||
|
; ldy #$00 is guaranteed by popptr1
|
||||||
pla ; Get c
|
pla ; Get c
|
||||||
ldx ptr2 ; Use X as low counter byte
|
ldx ptr2 ; Use X as low counter byte
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _memcmp
|
.export _memcmp
|
||||||
.import popax, return0
|
.import popax, popptr1, return0
|
||||||
.importzp ptr1, ptr2, ptr3
|
.importzp ptr1, ptr2, ptr3
|
||||||
|
|
||||||
_memcmp:
|
_memcmp:
|
||||||
@@ -24,14 +24,12 @@ _memcmp:
|
|||||||
jsr popax ; Get p2
|
jsr popax ; Get p2
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; Get p1
|
jsr popptr1 ; Get p1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Loop initialization
|
; Loop initialization
|
||||||
|
|
||||||
|
;ldy #$00 ; Initialize pointer (Y=0 guaranteed by popptr1)
|
||||||
ldx ptr3 ; Load low counter byte into X
|
ldx ptr3 ; Load low counter byte into X
|
||||||
ldy #$00 ; Initialize pointer
|
|
||||||
|
|
||||||
; Head of compare loop: Test for the end condition
|
; Head of compare loop: Test for the end condition
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _memcpy, memcpy_upwards, memcpy_getparams
|
.export _memcpy, memcpy_upwards, memcpy_getparams
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp sp, ptr1, ptr2, ptr3
|
.importzp sp, ptr1, ptr2, ptr3
|
||||||
|
|
||||||
; ----------------------------------------------------------------------
|
; ----------------------------------------------------------------------
|
||||||
@@ -64,12 +64,11 @@ memcpy_getparams: ; IMPORTANT! Function has to leave with Y=0!
|
|||||||
sta ptr3
|
sta ptr3
|
||||||
stx ptr3+1 ; save n to ptr3
|
stx ptr3+1 ; save n to ptr3
|
||||||
|
|
||||||
jsr popax
|
jsr popptr1 ; save src to ptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1 ; save src to ptr1
|
|
||||||
|
|
||||||
; save dest to ptr2
|
; save dest to ptr2
|
||||||
ldy #1 ; (direct stack access is three cycles faster
|
iny ; Y=0 guaranteed by popptr1, we need '1' here...
|
||||||
|
; (direct stack access is three cycles faster
|
||||||
; (total cycle count with return))
|
; (total cycle count with return))
|
||||||
lda (sp),y
|
lda (sp),y
|
||||||
tax
|
tax
|
||||||
|
|||||||
@@ -5,16 +5,14 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strcmp
|
.export _strcmp
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp ptr1, ptr2
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
_strcmp:
|
_strcmp:
|
||||||
sta ptr2 ; Save s2
|
sta ptr2 ; Save s2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; Get s1
|
jsr popptr1 ; Get s1
|
||||||
sta ptr1
|
;ldy #0 ; Y=0 guaranteed by popptr1
|
||||||
stx ptr1+1
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
loop: lda (ptr1),y
|
loop: lda (ptr1),y
|
||||||
cmp (ptr2),y
|
cmp (ptr2),y
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _stricmp, _strcasecmp
|
.export _stricmp, _strcasecmp
|
||||||
.import popax
|
.import popptr1
|
||||||
.import __ctype
|
.import __ctype
|
||||||
.importzp ptr1, ptr2, tmp1
|
.importzp ptr1, ptr2, tmp1
|
||||||
|
|
||||||
@@ -16,10 +16,8 @@ _stricmp:
|
|||||||
_strcasecmp:
|
_strcasecmp:
|
||||||
sta ptr2 ; Save s2
|
sta ptr2 ; Save s2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; get s1
|
jsr popptr1 ; get s1
|
||||||
sta ptr1
|
; ldy #0 ; Y=0 guaranteed by popptr1
|
||||||
stx ptr1+1
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
loop: lda (ptr2),y ; get char from second string
|
loop: lda (ptr2),y ; get char from second string
|
||||||
tax
|
tax
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strncat
|
.export _strncat
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1, tmp2
|
.importzp ptr1, ptr2, ptr3, tmp1, tmp2
|
||||||
.macpack cpu
|
.macpack cpu
|
||||||
|
|
||||||
@@ -17,9 +17,7 @@ _strncat:
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta tmp2
|
sta tmp2
|
||||||
|
|
||||||
jsr popax ; get src
|
jsr popptr1 ; get src
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
jsr popax ; get dest
|
jsr popax ; get dest
|
||||||
sta ptr3 ; remember for function return
|
sta ptr3 ; remember for function return
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strncmp
|
.export _strncmp
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3
|
.importzp ptr1, ptr2, ptr3
|
||||||
|
|
||||||
|
|
||||||
@@ -28,13 +28,11 @@ _strncmp:
|
|||||||
jsr popax ; get s2
|
jsr popax ; get s2
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; get s1
|
jsr popptr1 ; get s1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Loop setup
|
; Loop setup
|
||||||
|
|
||||||
ldy #0
|
;ldy #0 Y=0 guaranteed by popptr1
|
||||||
|
|
||||||
; Start of compare loop. Check the counter.
|
; Start of compare loop. Check the counter.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strncpy
|
.export _strncpy
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp ptr1, ptr2, tmp1, tmp2, tmp3
|
.importzp ptr1, ptr2, tmp1, tmp2, tmp3
|
||||||
|
|
||||||
.proc _strncpy
|
.proc _strncpy
|
||||||
@@ -16,9 +16,7 @@
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta tmp2 ; Store -size - 1
|
sta tmp2 ; Store -size - 1
|
||||||
|
|
||||||
jsr popax ; get src
|
jsr popptr1 ; get src
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
jsr popax ; get dest
|
jsr popax ; get dest
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strnicmp, _strncasecmp
|
.export _strnicmp, _strncasecmp
|
||||||
.import popax, __ctype
|
.import popax, popptr1, __ctype
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1
|
.importzp ptr1, ptr2, ptr3, tmp1
|
||||||
|
|
||||||
.include "ctype.inc"
|
.include "ctype.inc"
|
||||||
@@ -32,13 +32,11 @@ _strncasecmp:
|
|||||||
jsr popax ; get s2
|
jsr popax ; get s2
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; get s1
|
jsr popptr1 ; get s1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Loop setup
|
; Loop setup
|
||||||
|
|
||||||
ldy #0
|
; ldy #0 Y=0 guaranteed by popptr1
|
||||||
|
|
||||||
; Start of compare loop. Check the counter.
|
; Start of compare loop. Check the counter.
|
||||||
|
|
||||||
|
|||||||
@@ -5,17 +5,15 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strpbrk
|
.export _strpbrk
|
||||||
.import popax, return0
|
.import popax, popptr1, return0
|
||||||
.importzp ptr1, ptr2, tmp1, tmp2, tmp3
|
.importzp ptr1, ptr2, tmp1, tmp2, tmp3
|
||||||
|
|
||||||
_strpbrk:
|
_strpbrk:
|
||||||
jsr popax ; get s2
|
jsr popax ; get s2
|
||||||
sta ptr2
|
sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax ; get s1
|
jsr popptr1 ; get s1
|
||||||
sta ptr1
|
; ldy #$00 Y=0 guaranteed by popptr1
|
||||||
stx ptr1+1
|
|
||||||
ldy #$00
|
|
||||||
|
|
||||||
L1: lda (ptr1),y ; get next char from s1
|
L1: lda (ptr1),y ; get next char from s1
|
||||||
beq L9 ; jump if done
|
beq L9 ; jump if done
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _strstr
|
.export _strstr
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp ptr1, ptr2, ptr3, ptr4, tmp1
|
.importzp ptr1, ptr2, ptr3, ptr4, tmp1
|
||||||
|
|
||||||
_strstr:
|
_strstr:
|
||||||
@@ -13,13 +13,11 @@ _strstr:
|
|||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
sta ptr4 ; Setup temp copy for later
|
sta ptr4 ; Setup temp copy for later
|
||||||
|
|
||||||
jsr popax ; Get haystack
|
jsr popptr1 ; Get haystack to ptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1 ; Save haystack
|
|
||||||
|
|
||||||
; If needle is empty, return haystack
|
; If needle is empty, return haystack
|
||||||
|
|
||||||
ldy #$00
|
; ldy #$00 Y=0 guaranteed by popptr1
|
||||||
lda (ptr2),y ; Get first byte of needle
|
lda (ptr2),y ; Get first byte of needle
|
||||||
beq @Found ; Needle is empty --> we're done
|
beq @Found ; Needle is empty --> we're done
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
.export _vcprintf
|
.export _vcprintf
|
||||||
.import pushax, popax
|
.import pushax, popax, popptr1
|
||||||
.import __printf, _cputc
|
.import __printf, _cputc
|
||||||
.importzp sp, ptr1, ptr2, ptr3, tmp1
|
.importzp sp, ptr1, ptr2, ptr3, tmp1
|
||||||
|
|
||||||
@@ -54,9 +54,7 @@ out: jsr popax ; count
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta outdesc+7
|
sta outdesc+7
|
||||||
|
|
||||||
jsr popax ; buf
|
jsr popptr1 ; buf
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
jsr popax ; d
|
jsr popax ; d
|
||||||
sta ptr3
|
sta ptr3
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
.export _DbgInit
|
.export _DbgInit
|
||||||
.export _DbgSP, _DbgCS, _DbgHI
|
.export _DbgSP, _DbgCS, _DbgHI
|
||||||
.import popax, return0, _DbgEntry, _set_brk, _end_brk
|
.import popptr1, return0, _DbgEntry, _set_brk, _end_brk
|
||||||
.import _DbgBreaks
|
.import _DbgBreaks
|
||||||
.import _brk_pc
|
.import _brk_pc
|
||||||
.import __ZP_START__ ; Linker generated
|
.import __ZP_START__ ; Linker generated
|
||||||
@@ -170,9 +170,7 @@ L12: ldy #1 ; Force != 0
|
|||||||
.export _DbgIsBreak
|
.export _DbgIsBreak
|
||||||
|
|
||||||
_DbgIsBreak:
|
_DbgIsBreak:
|
||||||
jsr popax ; Get address
|
jsr popptr1 ; Get address
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
ldx #0
|
ldx #0
|
||||||
L20: lda _DbgBreaks+3,x ; Get bk_use
|
L20: lda _DbgBreaks+3,x ; Get bk_use
|
||||||
beq L21 ; Jump if not set
|
beq L21 ; Jump if not set
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
FILEDES = 3 ; first free to use file descriptor
|
FILEDES = 3 ; first free to use file descriptor
|
||||||
|
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1
|
.importzp ptr1, ptr2, ptr3, tmp1
|
||||||
.import addysp, popax
|
.import addysp, popax, poptr1
|
||||||
.import __oserror
|
.import __oserror
|
||||||
.import _FindFile, _ReadByte
|
.import _FindFile, _ReadByte
|
||||||
.export _open, _close, _read
|
.export _open, _close, _read
|
||||||
@@ -37,9 +37,7 @@ _open:
|
|||||||
@parmok:
|
@parmok:
|
||||||
jsr popax ; Get flags
|
jsr popax ; Get flags
|
||||||
sta tmp1
|
sta tmp1
|
||||||
jsr popax ; Get name
|
jsr popptr1 ; Get name
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
lda filedesc ; is there a file already open?
|
lda filedesc ; is there a file already open?
|
||||||
bne @alreadyopen
|
bne @alreadyopen
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
.export _memcpy
|
.export _memcpy
|
||||||
.export memcpy_increment, memcpy_transfer, memcpy_getparams
|
.export memcpy_increment, memcpy_transfer, memcpy_getparams
|
||||||
|
|
||||||
.import incsp2, popax
|
.import incsp2, popax, popptr1
|
||||||
.importzp sp, ptr1, ptr2, ptr3
|
.importzp sp, ptr1, ptr2, ptr3
|
||||||
|
|
||||||
|
|
||||||
@@ -81,13 +81,11 @@ memcpy_getparams:
|
|||||||
jsr incsp2 ; drop src address
|
jsr incsp2 ; drop src address
|
||||||
jmp popax ; get pointer; return it as result
|
jmp popax ; get pointer; return it as result
|
||||||
|
|
||||||
@L1: jsr popax
|
@L1: jsr popptr1 ; save src
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1 ; save src
|
|
||||||
|
|
||||||
; (Direct stack access is six cycles faster [total cycle count].)
|
; (Direct stack access is six cycles faster [total cycle count].)
|
||||||
|
|
||||||
ldy #1 ; save dest
|
iny ; (Y=0 by popptr1, need '1' here) save dest
|
||||||
lda (sp),y ; get high byte
|
lda (sp),y ; get high byte
|
||||||
tax
|
tax
|
||||||
lda (sp) ; get low byte
|
lda (sp) ; get low byte
|
||||||
|
|||||||
29
libsrc/runtime/popptr1.s
Normal file
29
libsrc/runtime/popptr1.s
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
;
|
||||||
|
; Christian Kruger, 20-May-2018
|
||||||
|
;
|
||||||
|
; CC65 runtime: Pop registers on stack to ptr1 or ptr2 and ptr1.
|
||||||
|
; X is untouched, low byte in A, Y is defined to be 0!
|
||||||
|
|
||||||
|
.export popptr1
|
||||||
|
.import incsp2
|
||||||
|
.importzp sp, ptr1
|
||||||
|
|
||||||
|
.macpack cpu
|
||||||
|
|
||||||
|
.proc popptr1 ; 14 bytes,
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
lda (sp),y ; get hi byte
|
||||||
|
sta ptr+1 ; into ptr hi
|
||||||
|
dey ; note: apply even for 65C02 to have Y=0 at exit!
|
||||||
|
.if (.cpu .bitand ::CPU_ISET_65SC02)
|
||||||
|
lda (sp) ; get lo byte
|
||||||
|
.else
|
||||||
|
lda (sp),y ; get lo byte
|
||||||
|
.endif
|
||||||
|
sta ptr1 ; to ptr lo
|
||||||
|
|
||||||
|
jmp incsp2
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
.export steaxspidx
|
.export steaxspidx
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp sreg, ptr1, tmp1, tmp2, tmp3
|
.importzp sreg, ptr1, tmp1, tmp2, tmp3
|
||||||
|
|
||||||
|
|
||||||
@@ -15,9 +15,7 @@
|
|||||||
sta tmp1
|
sta tmp1
|
||||||
stx tmp2
|
stx tmp2
|
||||||
sty tmp3
|
sty tmp3
|
||||||
jsr popax ; get the pointer
|
jsr popptr1 ; get the pointer
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
ldy tmp3
|
ldy tmp3
|
||||||
lda tmp1
|
lda tmp1
|
||||||
sta (ptr1),y
|
sta (ptr1),y
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
; jede jede@oric.org 2017-01-22
|
; jede jede@oric.org 2017-01-22
|
||||||
|
|
||||||
.export _write
|
.export _write
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1
|
.importzp ptr1, ptr2, ptr3, tmp1
|
||||||
|
|
||||||
.include "telestrat.inc"
|
.include "telestrat.inc"
|
||||||
@@ -19,9 +19,7 @@
|
|||||||
eor #$FF
|
eor #$FF
|
||||||
sta ptr2+1 ; Remember -count-1
|
sta ptr2+1 ; Remember -count-1
|
||||||
|
|
||||||
jsr popax ; get buf
|
jsr popptr1 ; get buf
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
jsr popax ; get fd and discard
|
jsr popax ; get fd and discard
|
||||||
|
|
||||||
; if fd=0001 then it stdout
|
; if fd=0001 then it stdout
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
.include "tgi-kernel.inc"
|
.include "tgi-kernel.inc"
|
||||||
|
|
||||||
.importzp ptr1, ptr2, ptr3, ptr4
|
.importzp ptr1, ptr2, ptr3, ptr4
|
||||||
.import popax
|
.import popax, popptr1
|
||||||
|
|
||||||
|
|
||||||
.proc _tgi_bar
|
.proc _tgi_bar
|
||||||
@@ -24,9 +24,7 @@
|
|||||||
sta ptr2 ; Y1
|
sta ptr2 ; Y1
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
|
|
||||||
jsr popax
|
jsr popptr1 ; X1
|
||||||
sta ptr1 ; X1
|
|
||||||
stx ptr1+1
|
|
||||||
|
|
||||||
; Make sure X1 is less than X2. Swap both if not.
|
; Make sure X1 is less than X2. Swap both if not.
|
||||||
|
|
||||||
|
|||||||
@@ -6,17 +6,14 @@
|
|||||||
|
|
||||||
.include "tgi-kernel.inc"
|
.include "tgi-kernel.inc"
|
||||||
|
|
||||||
.import popax
|
.import popptr1
|
||||||
.importzp ptr1, ptr2
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
.proc tgi_popxy
|
.proc tgi_popxy
|
||||||
|
|
||||||
sta ptr2 ; Y
|
sta ptr2 ; Y
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
jsr popax
|
jmp popptr1 ; X
|
||||||
sta ptr1 ; X
|
|
||||||
stx ptr1+1
|
|
||||||
rts
|
|
||||||
|
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
.export _adler32
|
.export _adler32
|
||||||
|
|
||||||
.import incsp2, incsp4, popax, popeax
|
.import incsp2, incsp4, popptr1, popeax
|
||||||
.importzp sreg, ptr1, ptr2, tmp1
|
.importzp sreg, ptr1, ptr2, tmp1
|
||||||
|
|
||||||
BASE = 65521 ; largest prime smaller than 65536
|
BASE = 65521 ; largest prime smaller than 65536
|
||||||
@@ -20,9 +20,7 @@ _adler32:
|
|||||||
@L1: sta ptr2
|
@L1: sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
; ptr1 = buf
|
; ptr1 = buf
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
; if (buf == NULL) return 1L;
|
; if (buf == NULL) return 1L;
|
||||||
ora ptr1+1
|
ora ptr1+1
|
||||||
beq @L0
|
beq @L0
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
.export _crc32
|
.export _crc32
|
||||||
|
|
||||||
.import compleax, incsp2, incsp4, popax, popeax
|
.import compleax, incsp2, incsp4, popptr1, popeax
|
||||||
.importzp sreg, ptr1, ptr2, tmp1, tmp2
|
.importzp sreg, ptr1, ptr2, tmp1, tmp2
|
||||||
|
|
||||||
POLYNOMIAL = $EDB88320
|
POLYNOMIAL = $EDB88320
|
||||||
@@ -67,9 +67,7 @@ _crc32:
|
|||||||
@L1: sta ptr2
|
@L1: sta ptr2
|
||||||
stx ptr2+1
|
stx ptr2+1
|
||||||
; ptr1 = buf
|
; ptr1 = buf
|
||||||
jsr popax
|
jsr popptr1
|
||||||
sta ptr1
|
|
||||||
stx ptr1+1
|
|
||||||
; if (buf == NULL) return 0;
|
; if (buf == NULL) return 0;
|
||||||
ora ptr1+1
|
ora ptr1+1
|
||||||
beq @L0
|
beq @L0
|
||||||
|
|||||||
Reference in New Issue
Block a user