mirror of
https://github.com/cc65/cc65.git
synced 2024-06-17 00:29:31 +00:00
Merge ae7a38f3de
into 4bde3afd80
This commit is contained in:
commit
e93107b766
|
@ -169,6 +169,15 @@ void atmos_tock (void);
|
||||||
void atmos_zap (void);
|
void atmos_zap (void);
|
||||||
/* Raygun sound effect */
|
/* Raygun sound effect */
|
||||||
|
|
||||||
|
/* The following #defines will cause the matching function prototypes
|
||||||
|
** in conio.h to be overlaid by macroes with the same names,
|
||||||
|
** thereby saving the function call overhead.
|
||||||
|
*/
|
||||||
|
#define _textcolor(color) COLOR_WHITE
|
||||||
|
#define _bgcolor(color) COLOR_BLACK
|
||||||
|
#define _bordercolor(color) COLOR_BLACK
|
||||||
|
#define _cpeekcolor(color) COLOR_WHITE
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* End of atmos.h */
|
/* End of atmos.h */
|
||||||
|
|
|
@ -35,16 +35,16 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This is the direct console interface for cc65. I do not like the function
|
** This is the direct console interface for cc65. I do not like the function
|
||||||
** names very much, but the first version started as a rewrite of Borland's
|
** names very much; but, the first version started as a rewrite of Borland's
|
||||||
** conio, and, even if the interface has changed, the names did not.
|
** conio; and, even if the interface has changed, the names did not.
|
||||||
**
|
**
|
||||||
** The interface does direct screen I/O, so it is fast enough for most
|
** The interface does direct screen I/O; so, it is fast enough for most
|
||||||
** programs. I did not implement text windows, since many applications do
|
** programs. I did not implement text windows because many applications do
|
||||||
** not need them and should not pay for the additional overhead. It should
|
** not need them, and should not pay for the additional overhead. It should
|
||||||
** be easy to add text windows on a higher level if needed,
|
** be easy to add text windows on a higher level if needed.
|
||||||
**
|
**
|
||||||
** Most routines do not check the parameters. This may be unfortunate but is
|
** Most routines do not check the parameters. That might be unfortunate;
|
||||||
** also related to speed. The coordinates are always 0/0 based.
|
** but also is related to speed. The coordinates are always (0,0)-based.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -191,10 +191,10 @@ void __fastcall__ cputhex16 (unsigned val);
|
||||||
|
|
||||||
|
|
||||||
/* On some platforms, functions are not available or are dummys. To suppress
|
/* On some platforms, functions are not available or are dummys. To suppress
|
||||||
** the call to these functions completely, the platform header files may
|
** the call to those functions completely, the platform header files may
|
||||||
** define macros for these functions that start with an underline. If such a
|
** define macros for those functions that start with an underscore. If such a
|
||||||
** macro exists, a new macro is defined here, that expands to the one with the
|
** macro exists, a new macro is defined here that expands to the one with the
|
||||||
** underline. The reason for this two stepped approach is that it is sometimes
|
** underscore. The reason for this two-stepped approach is that it is sometimes
|
||||||
** necessary to take the address of the function, which is not possible when
|
** necessary to take the address of the function, which is not possible when
|
||||||
** using a macro. Since the function prototype is still present, #undefining
|
** using a macro. Since the function prototype is still present, #undefining
|
||||||
** the macro will give access to the actual function.
|
** the macro will give access to the actual function.
|
||||||
|
|
35
libsrc/atari/cpeekc.s
Normal file
35
libsrc/atari/cpeekc.s
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
;
|
||||||
|
; 2016-02-28, Groepaz
|
||||||
|
; 2017-06-21, Greg King
|
||||||
|
;
|
||||||
|
; char cpeekc (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeekc
|
||||||
|
|
||||||
|
.include "atari.inc"
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekc:
|
||||||
|
lda OLDCHR ; get char under cursor
|
||||||
|
and #<~$80 ; remove reverse bit
|
||||||
|
|
||||||
|
;; convert internal screen code to AtSCII
|
||||||
|
|
||||||
|
tay
|
||||||
|
and #%01100000
|
||||||
|
asl a
|
||||||
|
asl a
|
||||||
|
rol a
|
||||||
|
rol a
|
||||||
|
tax
|
||||||
|
tya
|
||||||
|
eor intats,x
|
||||||
|
ldx #>$0000
|
||||||
|
rts
|
||||||
|
|
||||||
|
.rodata
|
||||||
|
intats: .byte %00100000 ; -> %001xxxxx
|
||||||
|
.byte %01100000 ; -> %010xxxxx
|
||||||
|
.byte %01000000 ; -> %000xxxxx
|
||||||
|
.byte %00000000 ; -> %011xxxxx
|
8
libsrc/atari/cpeekcolor.s
Normal file
8
libsrc/atari/cpeekcolor.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
;
|
||||||
|
; 2017-06-03, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekcolor (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.import return1
|
||||||
|
.export _cpeekcolor := return1 ; always COLOR_WHITE
|
18
libsrc/atari/cpeekrevers.s
Normal file
18
libsrc/atari/cpeekrevers.s
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
;
|
||||||
|
; 2017-06-21, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekrevers (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeekrevers
|
||||||
|
|
||||||
|
.include "atari.inc"
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekrevers:
|
||||||
|
lda OLDCHR ; get char under cursor
|
||||||
|
and #$80 ; get reverse bit
|
||||||
|
asl a
|
||||||
|
tax ; ldx #>$0000
|
||||||
|
rol a ; return boolean value
|
||||||
|
rts
|
21
libsrc/atmos/cpeekc.s
Normal file
21
libsrc/atmos/cpeekc.s
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
;
|
||||||
|
; 2016-02-28, Groepaz
|
||||||
|
; 2017-06-19, Greg King
|
||||||
|
;
|
||||||
|
; char cpeekc (void);
|
||||||
|
;
|
||||||
|
; Atmos version
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeekc
|
||||||
|
|
||||||
|
.import setscrptr
|
||||||
|
.importzp ptr2
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekc:
|
||||||
|
jsr setscrptr ; Set ptr2 and .Y to the cursor's address
|
||||||
|
lda (ptr2),y ; Get char
|
||||||
|
and #<~$80 ; Remove revers() bit
|
||||||
|
ldx #>$0000
|
||||||
|
rts
|
10
libsrc/atmos/cpeekcolor.s
Normal file
10
libsrc/atmos/cpeekcolor.s
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
;
|
||||||
|
; 2017-06-03, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekcolor (void);
|
||||||
|
;
|
||||||
|
; Atmos version
|
||||||
|
;
|
||||||
|
|
||||||
|
.import return1
|
||||||
|
.export _cpeekcolor := return1 ; always COLOR_WHITE
|
22
libsrc/atmos/cpeekrevers.s
Normal file
22
libsrc/atmos/cpeekrevers.s
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
;
|
||||||
|
; 2017-06-08, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekrevers (void);
|
||||||
|
;
|
||||||
|
; Atmos version
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeekrevers
|
||||||
|
|
||||||
|
.import setscrptr
|
||||||
|
.importzp ptr2
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekrevers:
|
||||||
|
jsr setscrptr ; Set ptr2 and .Y to the cursor's address
|
||||||
|
lda (ptr2),y ; Get char
|
||||||
|
and #$80 ; get reverse bit
|
||||||
|
asl a
|
||||||
|
tax ; ldx #>$0000
|
||||||
|
rol a ; return boolean value
|
||||||
|
rts
|
54
libsrc/atmos/cpeeks.s
Normal file
54
libsrc/atmos/cpeeks.s
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
;
|
||||||
|
; 2017-06-20, Greg King
|
||||||
|
;
|
||||||
|
; void cpeeks (char* s, unsigned length);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeeks
|
||||||
|
|
||||||
|
.import setscrptr, popax
|
||||||
|
.importzp ptr1, ptr2, ptr3, tmp1, tmp2
|
||||||
|
|
||||||
|
.macpack generic
|
||||||
|
|
||||||
|
|
||||||
|
_cpeeks:
|
||||||
|
eor #<$FFFF ; counting a word upward is faster
|
||||||
|
sta ptr3 ; so, we use -(length + 1)
|
||||||
|
txa
|
||||||
|
eor #>$FFFF
|
||||||
|
sta ptr3+1
|
||||||
|
|
||||||
|
jsr setscrptr ; Set ptr2 and .Y to the cursor's address
|
||||||
|
sty tmp2
|
||||||
|
|
||||||
|
jsr popax
|
||||||
|
sta tmp1 ; (will be a .Y index)
|
||||||
|
stx ptr1+1
|
||||||
|
ldx #<$0000
|
||||||
|
stx ptr1
|
||||||
|
bze L3 ; branch always
|
||||||
|
|
||||||
|
L4: ldy tmp2
|
||||||
|
lda (ptr2),y ; Get char
|
||||||
|
iny
|
||||||
|
bnz L2
|
||||||
|
inc ptr2+1
|
||||||
|
L2: sty tmp2
|
||||||
|
and #<~$80 ; Remove reverse bit
|
||||||
|
ldy tmp1
|
||||||
|
sta (ptr1),y
|
||||||
|
iny
|
||||||
|
bnz L1
|
||||||
|
inc ptr1+1
|
||||||
|
L1: sty tmp1
|
||||||
|
|
||||||
|
L3: inc ptr3 ; count length
|
||||||
|
bnz L4
|
||||||
|
inc ptr3+1
|
||||||
|
bnz L4
|
||||||
|
|
||||||
|
txa ; terminate the string
|
||||||
|
ldy tmp1
|
||||||
|
sta (ptr1),y
|
||||||
|
rts
|
|
@ -11,9 +11,6 @@
|
||||||
.importzp ptr1, ptr2, ptr3, tmp1, tmp2
|
.importzp ptr1, ptr2, ptr3, tmp1, tmp2
|
||||||
|
|
||||||
.macpack generic
|
.macpack generic
|
||||||
|
|
||||||
; FIXME c128 needs special version that handles the 80-column VDC.
|
|
||||||
|
|
||||||
.include "c128.inc"
|
.include "c128.inc"
|
||||||
|
|
||||||
_cpeeks:
|
_cpeeks:
|
||||||
|
@ -97,7 +94,7 @@ c80:
|
||||||
stx ptr1+1
|
stx ptr1+1
|
||||||
ldx #<$0000
|
ldx #<$0000
|
||||||
stx ptr1
|
stx ptr1
|
||||||
bze L3a ; branch always
|
bze L3a ; branch always
|
||||||
|
|
||||||
L4a:
|
L4a:
|
||||||
lda ptr2
|
lda ptr2
|
||||||
|
|
37
libsrc/nes/cpeekc.s
Normal file
37
libsrc/nes/cpeekc.s
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
;
|
||||||
|
; 2016-02-28, Groepaz
|
||||||
|
; 2017-08-17, Greg King
|
||||||
|
;
|
||||||
|
; char cpeekc (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cpeekc
|
||||||
|
|
||||||
|
.import ppubuf_waitempty
|
||||||
|
.forceimport initconio
|
||||||
|
|
||||||
|
.include "nes.inc"
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekc:
|
||||||
|
; wait until all console data has been written
|
||||||
|
jsr ppubuf_waitempty
|
||||||
|
|
||||||
|
ldy SCREEN_PTR+1
|
||||||
|
lda SCREEN_PTR
|
||||||
|
|
||||||
|
; waiting for vblank is incredibly slow ://
|
||||||
|
vwait:
|
||||||
|
; ldx PPU_STATUS
|
||||||
|
; bpl vwait
|
||||||
|
|
||||||
|
ldx #>$0000
|
||||||
|
sty PPU_VRAM_ADDR2
|
||||||
|
sta PPU_VRAM_ADDR2
|
||||||
|
lda PPU_VRAM_IO ; first read is invalid
|
||||||
|
lda PPU_VRAM_IO ; get data
|
||||||
|
stx PPU_VRAM_ADDR2
|
||||||
|
stx PPU_VRAM_ADDR2
|
||||||
|
|
||||||
|
and #<~$80 ; remove reverse bit
|
||||||
|
rts
|
17
libsrc/osic1p/cpeekc.s
Normal file
17
libsrc/osic1p/cpeekc.s
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
;
|
||||||
|
; 2017-06-21, Greg King
|
||||||
|
;
|
||||||
|
; char cpeekc (void);
|
||||||
|
;
|
||||||
|
; Get a character from OSI C1P screen RAM.
|
||||||
|
;
|
||||||
|
.export _cpeekc
|
||||||
|
|
||||||
|
.include "extzp.inc"
|
||||||
|
|
||||||
|
|
||||||
|
_cpeekc:
|
||||||
|
ldy CURS_X
|
||||||
|
lda (SCREEN_PTR),y
|
||||||
|
ldx #>$0000
|
||||||
|
rts
|
8
libsrc/osic1p/cpeekcolor.s
Normal file
8
libsrc/osic1p/cpeekcolor.s
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
;
|
||||||
|
; 2017-06-03, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekcolor (void);
|
||||||
|
;
|
||||||
|
|
||||||
|
.import return1
|
||||||
|
.export _cpeekcolor := return1 ; always COLOR_WHITE
|
9
libsrc/osic1p/cpeekrevers.s
Normal file
9
libsrc/osic1p/cpeekrevers.s
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
;
|
||||||
|
; 2017-06-15, Greg King
|
||||||
|
;
|
||||||
|
; unsigned char cpeekrevers (void);
|
||||||
|
;
|
||||||
|
; Get a reverse attribute from screen RAM
|
||||||
|
;
|
||||||
|
.import return0
|
||||||
|
.export _cpeekrevers := return0 ; No attribute
|
|
@ -14,11 +14,11 @@ _cpeekc:
|
||||||
st0 #VDC_MARR ; Memory-Address Read
|
st0 #VDC_MARR ; Memory-Address Read
|
||||||
ldy SCREEN_PTR
|
ldy SCREEN_PTR
|
||||||
ldx SCREEN_PTR+1
|
ldx SCREEN_PTR+1
|
||||||
sty VDC_DATA_LO
|
sty a:VDC_DATA_LO
|
||||||
stx VDC_DATA_HI
|
stx a:VDC_DATA_HI
|
||||||
|
|
||||||
st0 #VDC_VRR ; VRAM Read Register
|
st0 #VDC_VRR ; VRAM Read Register
|
||||||
lda VDC_DATA_LO ; character
|
lda a:VDC_DATA_LO ; character
|
||||||
and #<~$80 ; remove reverse bit
|
and #<~$80 ; remove reverse bit
|
||||||
ldx #0
|
ldx #0
|
||||||
rts
|
rts
|
||||||
|
|
|
@ -14,11 +14,11 @@ _cpeekcolor:
|
||||||
st0 #VDC_MARR ; Memory-Address Read
|
st0 #VDC_MARR ; Memory-Address Read
|
||||||
ldy SCREEN_PTR
|
ldy SCREEN_PTR
|
||||||
ldx SCREEN_PTR+1
|
ldx SCREEN_PTR+1
|
||||||
sty VDC_DATA_LO
|
sty a:VDC_DATA_LO
|
||||||
stx VDC_DATA_HI
|
stx a:VDC_DATA_HI
|
||||||
|
|
||||||
st0 #VDC_VRR ; VRAM Read Register
|
st0 #VDC_VRR ; VRAM Read Register
|
||||||
lda VDC_DATA_HI
|
lda a:VDC_DATA_HI
|
||||||
and #<~$02
|
and #<~$02
|
||||||
lsr a
|
lsr a
|
||||||
lsr a
|
lsr a
|
||||||
|
|
|
@ -14,13 +14,13 @@ _cpeekrevers:
|
||||||
st0 #VDC_MARR ; Memory-Address Read
|
st0 #VDC_MARR ; Memory-Address Read
|
||||||
ldy SCREEN_PTR
|
ldy SCREEN_PTR
|
||||||
ldx SCREEN_PTR+1
|
ldx SCREEN_PTR+1
|
||||||
sty VDC_DATA_LO
|
sty a:VDC_DATA_LO
|
||||||
stx VDC_DATA_HI
|
stx a:VDC_DATA_HI
|
||||||
|
|
||||||
st0 #VDC_VRR ; VRAM Read Register
|
st0 #VDC_VRR ; VRAM Read Register
|
||||||
lda VDC_DATA_LO ; character (bit 7 is revers bit)
|
lda a:VDC_DATA_LO ; character
|
||||||
rol a
|
and #$80 ; get reverse bit
|
||||||
rol a
|
asl a
|
||||||
and #1
|
tax ; ldx #>$0000
|
||||||
ldx #0
|
rol a ; return boolean value
|
||||||
rts
|
rts
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
;
|
;
|
||||||
; 2020-07-14, Groepaz
|
; 2020-07-14, Groepaz
|
||||||
|
; 2020-07-15, Greg King
|
||||||
;
|
;
|
||||||
; void cpeeks (char* s, unsigned length);
|
; void cpeeks (char* s, unsigned length);
|
||||||
;
|
;
|
||||||
|
@ -8,9 +9,7 @@
|
||||||
.export _cpeeks
|
.export _cpeeks
|
||||||
|
|
||||||
.import popax
|
.import popax
|
||||||
.importzp ptr1, ptr2, tmp1, tmp2
|
.importzp ptr1, ptr2
|
||||||
|
|
||||||
.macpack generic
|
|
||||||
|
|
||||||
.include "pce.inc"
|
.include "pce.inc"
|
||||||
.include "extzp.inc"
|
.include "extzp.inc"
|
||||||
|
@ -22,35 +21,31 @@ _cpeeks:
|
||||||
eor #>$FFFF
|
eor #>$FFFF
|
||||||
sta ptr2+1
|
sta ptr2+1
|
||||||
|
|
||||||
|
st0 #VDC_CR ; Control Register
|
||||||
|
st2 #>$0088 ; make VRAM address increment by one
|
||||||
|
|
||||||
st0 #VDC_MARR ; Memory-Address Read
|
st0 #VDC_MARR ; Memory-Address Read
|
||||||
ldy SCREEN_PTR
|
ldy SCREEN_PTR
|
||||||
ldx SCREEN_PTR+1
|
ldx SCREEN_PTR+1
|
||||||
sty VDC_DATA_LO
|
sty a:VDC_DATA_LO
|
||||||
stx VDC_DATA_HI
|
stx a:VDC_DATA_HI
|
||||||
|
|
||||||
st0 #VDC_VRR ; VRAM Read Register
|
st0 #VDC_VRR ; VRAM Read Register
|
||||||
|
|
||||||
jsr popax
|
jsr popax
|
||||||
sta tmp1 ; (will be a .Y index)
|
tay ; low byte of address will be used as index
|
||||||
stx ptr1+1
|
stx ptr1+1
|
||||||
|
|
||||||
ldx #<$0000
|
ldx #<$0000
|
||||||
stx ptr1
|
stx ptr1
|
||||||
beq L2 ; branch always
|
beq L2 ; branch always
|
||||||
|
|
||||||
L3: ldy tmp2
|
L3: lda a:VDC_DATA_LO ; get character
|
||||||
lda VDC_DATA_LO ; get character
|
bit a:VDC_DATA_HI ; need to read high byte to advance VDC address
|
||||||
bit VDC_DATA_HI ; we need to "read" the highbyte to advance the address
|
|
||||||
iny
|
|
||||||
sty tmp2
|
|
||||||
and #<~$80 ; remove reverse bit
|
and #<~$80 ; remove reverse bit
|
||||||
|
|
||||||
ldy tmp1
|
|
||||||
sta (ptr1),y
|
sta (ptr1),y
|
||||||
iny
|
iny
|
||||||
bne L1
|
bne L2
|
||||||
inc ptr1+1
|
inc ptr1+1
|
||||||
L1: sty tmp1
|
|
||||||
|
|
||||||
L2: inc ptr2 ; count length
|
L2: inc ptr2 ; count length
|
||||||
bne L3
|
bne L3
|
||||||
|
@ -58,6 +53,5 @@ L2: inc ptr2 ; count length
|
||||||
bne L3
|
bne L3
|
||||||
|
|
||||||
txa ; terminate the string
|
txa ; terminate the string
|
||||||
ldy tmp1
|
|
||||||
sta (ptr1),y
|
sta (ptr1),y
|
||||||
rts
|
rts
|
||||||
|
|
Loading…
Reference in New Issue
Block a user