mirror of
https://github.com/cc65/cc65.git
synced 2024-12-23 04:30:10 +00:00
commit
fb03b1105c
48
cfg/apple2-hgr.cfg
Normal file
48
cfg/apple2-hgr.cfg
Normal file
@ -0,0 +1,48 @@
|
||||
# Configuration for programs including a hires screen (with 6KB LOWCODE)
|
||||
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $0803;
|
||||
}
|
||||
SYMBOLS {
|
||||
__EXEHDR__: type = import;
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__HIMEM__: type = weak, value = $9600; # Presumed RAM end
|
||||
__LCADDR__: type = weak, value = $D400; # Behind quit code
|
||||
__LCSIZE__: type = weak, value = $0C00; # Rest of bank two
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0080, size = $001A;
|
||||
HEADER: file = %O, start = %S - 4, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: type = constructor,
|
||||
label = __CONSTRUCTOR_TABLE__,
|
||||
count = __CONSTRUCTOR_COUNT__,
|
||||
segment = ONCE;
|
||||
CONDES: type = destructor,
|
||||
label = __DESTRUCTOR_TABLE__,
|
||||
count = __DESTRUCTOR_COUNT__,
|
||||
segment = RODATA;
|
||||
CONDES: type = interruptor,
|
||||
label = __INTERRUPTOR_TABLE__,
|
||||
count = __INTERRUPTOR_COUNT__,
|
||||
segment = RODATA,
|
||||
import = __CALLIRQ__;
|
||||
}
|
48
cfg/apple2enh-hgr.cfg
Normal file
48
cfg/apple2enh-hgr.cfg
Normal file
@ -0,0 +1,48 @@
|
||||
# Configuration for programs including a hires screen (with 6KB LOWCODE)
|
||||
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $0803;
|
||||
}
|
||||
SYMBOLS {
|
||||
__EXEHDR__: type = import;
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__HIMEM__: type = weak, value = $9600; # Presumed RAM end
|
||||
__LCADDR__: type = weak, value = $D400; # Behind quit code
|
||||
__LCSIZE__: type = weak, value = $0C00; # Rest of bank two
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0080, size = $001A;
|
||||
HEADER: file = %O, start = %S - 4, size = $0004;
|
||||
MAIN: file = %O, define = yes, start = %S, size = __HIMEM__ - %S;
|
||||
BSS: file = "", start = __ONCE_RUN__, size = __HIMEM__ - __STACKSIZE__ - __ONCE_RUN__;
|
||||
LC: file = "", define = yes, start = __LCADDR__, size = __LCSIZE__;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
EXEHDR: load = HEADER, type = ro;
|
||||
STARTUP: load = MAIN, type = ro;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
HGR: load = MAIN, type = rw, optional = yes, start = $2000;
|
||||
CODE: load = MAIN, type = ro start = $4000;
|
||||
RODATA: load = MAIN, type = ro;
|
||||
DATA: load = MAIN, type = rw;
|
||||
INIT: load = MAIN, type = rw;
|
||||
ONCE: load = MAIN, type = ro, define = yes;
|
||||
LC: load = MAIN, run = LC, type = ro, optional = yes;
|
||||
BSS: load = BSS, type = bss, define = yes;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: type = constructor,
|
||||
label = __CONSTRUCTOR_TABLE__,
|
||||
count = __CONSTRUCTOR_COUNT__,
|
||||
segment = ONCE;
|
||||
CONDES: type = destructor,
|
||||
label = __DESTRUCTOR_TABLE__,
|
||||
count = __DESTRUCTOR_COUNT__,
|
||||
segment = RODATA;
|
||||
CONDES: type = interruptor,
|
||||
label = __INTERRUPTOR_TABLE__,
|
||||
count = __INTERRUPTOR_COUNT__,
|
||||
segment = RODATA,
|
||||
import = __CALLIRQ__;
|
||||
}
|
@ -15,6 +15,7 @@ MEMORY {
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp, optional = yes;
|
||||
EXTZP: load = ZP, type = zp, optional = yes;
|
||||
DLIST: load = ROM , type = ro, define = yes, optional = yes;
|
||||
STARTUP: load = ROM, type = ro, define = yes, optional = yes;
|
||||
LOWCODE: load = ROM, type = ro, define = yes, optional = yes;
|
||||
ONCE: load = ROM, type = ro, optional = yes;
|
||||
@ -22,9 +23,9 @@ SEGMENTS {
|
||||
RODATA: load = ROM, type = ro, optional = yes;
|
||||
DATA: load = ROM, run = RAM, type = rw, define = yes, optional = yes;
|
||||
BSS: load = RAM, type = bss, define = yes, optional = yes;
|
||||
CARTNAME: load = CARTNAME, type = ro, define = yes;
|
||||
CARTYEAR: load = CARTYEAR, type = ro, define = yes;
|
||||
CARTENTRY: load = CARTENTRY, type = ro, define = yes;
|
||||
CARTNAME: load = CARTNAME, type = ro;
|
||||
CARTYEAR: load = CARTYEAR, type = ro;
|
||||
CARTENTRY: load = CARTENTRY, type = ro;
|
||||
}
|
||||
FEATURES {
|
||||
CONDES: type = constructor,
|
||||
|
12
cfg/none.cfg
12
cfg/none.cfg
@ -1,12 +1,18 @@
|
||||
FEATURES {
|
||||
STARTADDRESS: default = $1000;
|
||||
}
|
||||
SYMBOLS {
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__STACKSIZE__: type = weak, value = $0800; # 2k stack
|
||||
__STACKSTART__: type = weak, value = $8000;
|
||||
__ZPSTART__: type = weak, value = $0080;
|
||||
}
|
||||
MEMORY {
|
||||
ZP: file = "", define = yes, start = $0000, size = $0001F;
|
||||
MAIN: file = %O, start = %S, size = $10000 - __STACKSIZE__;
|
||||
ZP: file = "", define = yes, start = __ZPSTART__, size = $001F;
|
||||
MAIN: file = %O, start = %S, size = __STACKSTART__ - __STACKSIZE__ - %S;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp;
|
||||
STARTUP: load = MAIN, type = ro, optional = yes;
|
||||
LOWCODE: load = MAIN, type = ro, optional = yes;
|
||||
ONCE: load = MAIN, type = ro, optional = yes;
|
||||
CODE: load = MAIN, type = rw;
|
||||
|
@ -2,13 +2,13 @@
|
||||
# for assembler
|
||||
|
||||
# ld65 config file
|
||||
# ld65 --config supervision.cfg -o <prog>.bin <prog>.o
|
||||
# ld65 --config supervision-128k.cfg -o <prog>.bin <prog>.o
|
||||
|
||||
SYMBOLS {
|
||||
__STACKSIZE__: type = weak, value = $0100; # 1 page stack
|
||||
}
|
||||
MEMORY {
|
||||
RAM: file = "", start = $0000, size = $2000 - __STACKSIZE__;
|
||||
RAM: file = "", start = $0000, size = $2000 - __STACKSIZE__, define = yes;
|
||||
VRAM: file = "", start = $4000, size = $2000;
|
||||
BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||
BANKROM2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||
|
@ -1,7 +1,7 @@
|
||||
# supervision 16kbyte cartridge
|
||||
|
||||
# ld65 config file
|
||||
# ld65 --config supervision16.cfg -o <prog>.bin <prog>.o
|
||||
# ld65 --config supervision-16k.cfg -o <prog>.bin <prog>.o
|
||||
|
||||
SYMBOLS {
|
||||
__STACKSIZE__: type = weak, value = $0100; # 1 page stack
|
||||
@ -9,9 +9,9 @@ SYMBOLS {
|
||||
MEMORY {
|
||||
ZP: file = "", start = $0000, size = $0100;
|
||||
CPUSTACK: file = "", start = $0100, size = $0100;
|
||||
RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__;
|
||||
RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define = yes;
|
||||
VRAM: file = "", start = $4000, size = $2000;
|
||||
ROM: file = %O, start = $C000, size = $4000, fill = yes, fillval = $ff, define=yes;
|
||||
ROM: file = %O, start = $C000, size = $4000, fill = yes, fillval = $FF, define = yes;
|
||||
}
|
||||
SEGMENTS {
|
||||
ZEROPAGE: load = ZP, type = zp, define = yes;
|
||||
|
@ -2,13 +2,13 @@
|
||||
# for assembler
|
||||
|
||||
# ld65 config file
|
||||
# ld65 --config supervision.cfg -o <prog>.bin <prog>.o
|
||||
# ld65 --config supervision-64k.cfg -o <prog>.bin <prog>.o
|
||||
|
||||
SYMBOLS {
|
||||
__STACKSIZE__: type = weak, value = $0100; # 1 page stack
|
||||
}
|
||||
MEMORY {
|
||||
RAM: file = "", start = $0000, size = $2000 - __STACKSIZE__;
|
||||
RAM: file = "", start = $0000, size = $2000 - __STACKSIZE__, define = yes;
|
||||
VRAM: file = "", start = $4000, size = $2000;
|
||||
BANKROM1: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||
BANKROM2: file = %O, start = $8000, size = $4000, fill = yes, fillval = $FF;
|
||||
|
@ -8,7 +8,7 @@ SYMBOLS {
|
||||
MEMORY {
|
||||
ZP: file = "", start = $0000, size = $0100;
|
||||
CPUSTACK: file = "", start = $0100, size = $0100;
|
||||
RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__;
|
||||
RAM: file = "", start = $0200, size = $1E00 - __STACKSIZE__, define = yes;
|
||||
VRAM: file = "", start = $4000, size = $2000;
|
||||
ROM: file = %O, start = $8000, size = $8000, fill = yes, fillval = $FF, define = yes;
|
||||
}
|
||||
|
@ -134,6 +134,7 @@ extern unsigned char _dos_type;
|
||||
** ProDOS 8 2.0.1 - 0x21
|
||||
** ProDOS 8 2.0.2 - 0x22
|
||||
** ProDOS 8 2.0.3 - 0x23
|
||||
** ProDOS 8 2.4.x - 0x24
|
||||
*/
|
||||
|
||||
|
||||
|
@ -27,6 +27,7 @@ TARGETS = apple2 \
|
||||
gamate \
|
||||
lynx \
|
||||
nes \
|
||||
none \
|
||||
osic1p \
|
||||
pce \
|
||||
sim6502 \
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
.constructor initiobuf
|
||||
.export iobuf_alloc, iobuf_free
|
||||
.import __STARTUP_RUN__
|
||||
.import __MAIN_START__
|
||||
.import incsp2, popax
|
||||
|
||||
.include "zeropage.inc"
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
initiobuf:
|
||||
; Convert end address highbyte to table index
|
||||
lda #>__STARTUP_RUN__
|
||||
lda #>__MAIN_START__
|
||||
sec
|
||||
sbc #>$0800
|
||||
lsr
|
||||
|
78
libsrc/atari/getdevice.s
Normal file
78
libsrc/atari/getdevice.s
Normal file
@ -0,0 +1,78 @@
|
||||
;
|
||||
; Oliver Schmidt, 2012-09-04
|
||||
; Christian Groessler, 2017-12-28
|
||||
;
|
||||
; unsigned char getfirstdevice (void);
|
||||
; unsigned char __fastcall__ getnextdevice (unsigned char device);
|
||||
;
|
||||
|
||||
.include "atari.inc"
|
||||
.export _getfirstdevice
|
||||
.export _getnextdevice
|
||||
|
||||
MAX_DIO_DEVICES = 8
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; _getfirstdevice
|
||||
|
||||
_getfirstdevice:
|
||||
lda #$FF
|
||||
; Fall through
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; _getnextdevice
|
||||
|
||||
_getnextdevice:
|
||||
tax
|
||||
next: inx
|
||||
cpx #MAX_DIO_DEVICES
|
||||
beq none
|
||||
|
||||
jsr check_device
|
||||
bmi next
|
||||
|
||||
done: txa
|
||||
ldx #$00
|
||||
rts
|
||||
|
||||
none: ldx #255 ; INVALID_DEVICE (see include/device.h)
|
||||
bne done ; jump always
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; check_device - checks if a disk device is present
|
||||
; input: X - device id (0 = D1, 1 = D2, ...)
|
||||
; output: NF - 0/1 for detected/not detected
|
||||
; X register preserved
|
||||
|
||||
check_device:
|
||||
txa
|
||||
pha
|
||||
lda #SIO_STAT
|
||||
sta DCOMND ; set command into DCB
|
||||
lda #%01000000 ; direction value, "receive data"
|
||||
sta DSTATS ; set data flow directon
|
||||
lda #15
|
||||
sta DTIMLO ; value got from DOS source
|
||||
lda #4
|
||||
sta DAUX1 ; set sector # (dummy: 4)
|
||||
sta DBYTLO ; # of bytes to transfer
|
||||
lda #0
|
||||
sta DAUX2
|
||||
sta DBYTHI
|
||||
lda #>DVSTAT
|
||||
sta DBUFHI
|
||||
lda #<DVSTAT
|
||||
sta DBUFLO ; set buffer address into DCB
|
||||
lda #DISKID ; SIO bus ID of diskette drive
|
||||
sta DDEVIC
|
||||
inx
|
||||
stx DUNIT ; unit number (1-based)
|
||||
|
||||
jsr SIOV ; execute SIO command
|
||||
|
||||
pla
|
||||
tax
|
||||
lda DSTATS
|
||||
rts
|
||||
|
||||
.end
|
@ -58,7 +58,7 @@ clrscr: sta (SAVMSC),y
|
||||
rts
|
||||
|
||||
|
||||
.segment "RODATA"
|
||||
.segment "DLIST"
|
||||
|
||||
; display list for 20x24 text mode
|
||||
|
||||
|
@ -15,6 +15,22 @@
|
||||
.export _textcolor := soft80_textcolor ; color.s
|
||||
.export _bgcolor := soft80_bgcolor ; color.s
|
||||
|
||||
; soft80_cpeekc.s
|
||||
.import soft80_cpeekc
|
||||
.export _cpeekc := soft80_cpeekc ; cpeekc.s
|
||||
|
||||
; soft80_cpeekcolor.s
|
||||
.import soft80_cpeekcolor
|
||||
.export _cpeekcolor := soft80_cpeekcolor ; cpeekcolor.s
|
||||
|
||||
; soft80_cpeekrevers.s
|
||||
.import soft80_cpeekrevers
|
||||
.export _cpeekrevers := soft80_cpeekrevers ; cpeekrevers.s
|
||||
|
||||
; soft80_cpeeks.s
|
||||
.import soft80_cpeeks
|
||||
.export _cpeeks := soft80_cpeeks ; cpeeks.s
|
||||
|
||||
; soft80_cputc.s
|
||||
.import soft80_cputc
|
||||
.import soft80_cputcxy
|
||||
@ -50,3 +66,6 @@
|
||||
; Chars used by chline () and cvline ()
|
||||
.exportzp chlinechar = CH_HLINE
|
||||
.exportzp cvlinechar = CH_VLINE
|
||||
|
||||
.import return1
|
||||
.export _doesclrscrafterexit := return1
|
||||
|
@ -18,6 +18,22 @@
|
||||
.export _textcolor := soft80mono_textcolor ; color.s
|
||||
.export _bgcolor := soft80mono_bgcolor ; color.s
|
||||
|
||||
; soft80mono_cpeekc.s
|
||||
.import soft80_cpeekc
|
||||
.export _cpeekc := soft80_cpeekc ; cpeekc.s
|
||||
|
||||
; soft80mono_cpeekcolor.s
|
||||
.import soft80mono_cpeekcolor
|
||||
.export _cpeekcolor := soft80mono_cpeekcolor ; cpeekcolor.s
|
||||
|
||||
; soft80mono_cpeekrevers.s
|
||||
.import soft80_cpeekrevers
|
||||
.export _cpeekrevers := soft80_cpeekrevers ; cpeekrevers.s
|
||||
|
||||
; soft80mono_cpeeks.s
|
||||
.import soft80_cpeeks
|
||||
.export _cpeeks := soft80_cpeeks ; cpeeks.s
|
||||
|
||||
; soft80mono_cputc.s
|
||||
.import soft80mono_cputc
|
||||
.import soft80mono_cputcxy
|
||||
@ -53,3 +69,6 @@
|
||||
; Chars used by chline () and cvline ()
|
||||
.exportzp chlinechar = CH_HLINE
|
||||
.exportzp cvlinechar = CH_VLINE
|
||||
|
||||
.import return1
|
||||
.export _doesclrscrafterexit := return1
|
||||
|
148
libsrc/c64/soft80_cpeekc.s
Normal file
148
libsrc/c64/soft80_cpeekc.s
Normal file
@ -0,0 +1,148 @@
|
||||
;
|
||||
; 2017-12-28, Groepaz
|
||||
;
|
||||
; char cpeekc (void);
|
||||
;
|
||||
|
||||
.export soft80_cpeekc, soft80_cpeekchar
|
||||
|
||||
.include "c64.inc"
|
||||
.include "soft80.inc"
|
||||
|
||||
.macpack longbranch
|
||||
|
||||
.segment "CODE"
|
||||
|
||||
soft80_cpeekc:
|
||||
jsr soft80_cpeekchar
|
||||
; 0-1F -> A0-BF
|
||||
; 20-7F -> 20-7F
|
||||
cmp #$20
|
||||
bcs @sk
|
||||
;clc
|
||||
adc #$a0
|
||||
@sk:
|
||||
ldx #0
|
||||
rts
|
||||
|
||||
soft80_cpeekchar:
|
||||
|
||||
sei
|
||||
lda #$34
|
||||
sta $01
|
||||
|
||||
lda CURS_X
|
||||
and #$01
|
||||
|
||||
jne @l1a
|
||||
|
||||
; test non-inverted character (left side)
|
||||
|
||||
ldx #0
|
||||
@l2aa:
|
||||
ldy #0
|
||||
|
||||
.repeat 8,line
|
||||
lda (SCREEN_PTR),y
|
||||
and #$f0
|
||||
cmp soft80_hi_charset+(line*$80),x
|
||||
bne @l2b
|
||||
.if (line < 7)
|
||||
iny
|
||||
.endif
|
||||
.endrepeat
|
||||
|
||||
@backok:
|
||||
lda #$36
|
||||
sta $01
|
||||
cli
|
||||
txa ; return char in A
|
||||
ldx #$00 ; revers flag
|
||||
rts
|
||||
@l2b:
|
||||
inx
|
||||
cpx #$80
|
||||
jne @l2aa
|
||||
|
||||
; test inverted character (left side)
|
||||
|
||||
ldx #0
|
||||
@l2aa2:
|
||||
ldy #0
|
||||
|
||||
.repeat 8,line
|
||||
lda (SCREEN_PTR),y
|
||||
and #$f0
|
||||
eor #$f0
|
||||
cmp soft80_hi_charset+(line*$80),x
|
||||
bne @l2b2
|
||||
.if (line < 7)
|
||||
iny
|
||||
.endif
|
||||
.endrepeat
|
||||
|
||||
@backokrevers:
|
||||
lda #$36
|
||||
sta $01
|
||||
cli
|
||||
txa ; return char in A
|
||||
ldx #$01 ; revers flag
|
||||
rts
|
||||
|
||||
@l2b2:
|
||||
inx
|
||||
cpx #$80
|
||||
jne @l2aa2
|
||||
|
||||
@backerr:
|
||||
lda #$36
|
||||
sta $01
|
||||
cli
|
||||
ldx #0
|
||||
txa
|
||||
rts
|
||||
|
||||
; test non-inverted character (right side)
|
||||
|
||||
@l1a:
|
||||
ldx #0
|
||||
@l1aa:
|
||||
ldy #0
|
||||
.repeat 8,line
|
||||
lda (SCREEN_PTR),y
|
||||
and #$0f
|
||||
eor soft80_lo_charset+(line*$80),x
|
||||
bne @l2bb
|
||||
.if line < 7
|
||||
iny
|
||||
.endif
|
||||
.endrepeat
|
||||
jmp @backok
|
||||
@l2bb:
|
||||
inx
|
||||
cpx #$80
|
||||
bne @l1aa
|
||||
|
||||
; test inverted character (right side)
|
||||
|
||||
ldx #0
|
||||
@l1aa2:
|
||||
ldy #0
|
||||
.repeat 8,line
|
||||
lda (SCREEN_PTR),y
|
||||
and #$0f
|
||||
eor #$0f
|
||||
eor soft80_lo_charset+(line*$80),x
|
||||
bne @l2bb2
|
||||
.if line < 7
|
||||
iny
|
||||
.endif
|
||||
.endrepeat
|
||||
jmp @backokrevers
|
||||
@l2bb2:
|
||||
inx
|
||||
cpx #$80
|
||||
bne @l1aa2
|
||||
|
||||
jmp @backerr
|
||||
|
19
libsrc/c64/soft80_cpeekcolor.s
Normal file
19
libsrc/c64/soft80_cpeekcolor.s
Normal file
@ -0,0 +1,19 @@
|
||||
;
|
||||
; 2017-12-27, Groepaz
|
||||
;
|
||||
; unsigned char cpeekcolor (void);
|
||||
;
|
||||
|
||||
.export soft80_cpeekcolor
|
||||
|
||||
.include "c64.inc"
|
||||
.include "soft80.inc"
|
||||
|
||||
.segment "CODE"
|
||||
|
||||
soft80_cpeekcolor:
|
||||
ldy #0
|
||||
lda (CRAM_PTR),y
|
||||
and #$0f
|
||||
ldx #0
|
||||
rts
|
15
libsrc/c64/soft80_cpeekrevers.s
Normal file
15
libsrc/c64/soft80_cpeekrevers.s
Normal file
@ -0,0 +1,15 @@
|
||||
;
|
||||
; 2017-12-28, Groepaz
|
||||
;
|
||||
; unsigned char cpeekrevers (void);
|
||||
;
|
||||
|
||||
.import soft80_cpeekchar
|
||||
|
||||
.export soft80_cpeekrevers
|
||||
|
||||
soft80_cpeekrevers:
|
||||
jsr soft80_cpeekchar
|
||||
txa
|
||||
ldx #0
|
||||
rts
|
71
libsrc/c64/soft80_cpeeks.s
Normal file
71
libsrc/c64/soft80_cpeeks.s
Normal file
@ -0,0 +1,71 @@
|
||||
;
|
||||
; 2017-12-27, groepaz
|
||||
;
|
||||
; void cpeeks (char* s, unsigned length);
|
||||
;
|
||||
.export soft80_cpeeks
|
||||
.import soft80_cpeekc, soft80_kplot, popax
|
||||
|
||||
.importzp ptr1, ptr2
|
||||
|
||||
.include "c64.inc"
|
||||
.include "soft80.inc"
|
||||
|
||||
soft80_cpeeks:
|
||||
eor #<$FFFF ; counting a word upward is faster
|
||||
sta ptr2 ; so, we use -(length + 1)
|
||||
txa
|
||||
eor #>$FFFF
|
||||
sta ptr2+1
|
||||
|
||||
jsr popax
|
||||
sta ptr1
|
||||
stx ptr1+1
|
||||
|
||||
; save current cursor position
|
||||
lda CURS_X
|
||||
pha
|
||||
lda CURS_Y
|
||||
pha
|
||||
|
||||
; get the string
|
||||
@lp:
|
||||
jsr soft80_cpeekc
|
||||
ldy #0
|
||||
sta (ptr1),y
|
||||
|
||||
; advance cursor position
|
||||
ldy CURS_X
|
||||
ldx CURS_Y
|
||||
iny
|
||||
cpy #charsperline
|
||||
bne @sk2
|
||||
ldy #0
|
||||
inx
|
||||
@sk2:
|
||||
sty CURS_X
|
||||
stx CURS_Y
|
||||
clc
|
||||
jsr soft80_kplot
|
||||
|
||||
inc ptr1
|
||||
bne @sk
|
||||
inc ptr1+1
|
||||
@sk:
|
||||
inc ptr2
|
||||
bne @lp
|
||||
inc ptr2+1
|
||||
bne @lp
|
||||
|
||||
; terminate the string
|
||||
lda #0
|
||||
ldy #0
|
||||
sta (ptr1),y
|
||||
|
||||
; restore the cursor position
|
||||
pla
|
||||
tax ; CURS_Y
|
||||
pla
|
||||
tay ; CURS_X
|
||||
clc
|
||||
jmp soft80_kplot
|
17
libsrc/c64/soft80mono_cpeekcolor.s
Normal file
17
libsrc/c64/soft80mono_cpeekcolor.s
Normal file
@ -0,0 +1,17 @@
|
||||
;
|
||||
; 2017-12-27, Groepaz
|
||||
;
|
||||
; unsigned char cpeekcolor (void);
|
||||
;
|
||||
|
||||
.export soft80mono_cpeekcolor
|
||||
|
||||
.include "c64.inc"
|
||||
.include "soft80.inc"
|
||||
|
||||
.segment "CODE"
|
||||
|
||||
soft80mono_cpeekcolor:
|
||||
lda CHARCOLOR
|
||||
ldx #0
|
||||
rts
|
21
libsrc/none/crt0.s
Normal file
21
libsrc/none/crt0.s
Normal file
@ -0,0 +1,21 @@
|
||||
.export _exit
|
||||
.export __STARTUP__ : absolute = 1 ; Mark as startup
|
||||
.import zerobss, _main
|
||||
.import initlib, donelib
|
||||
.import __STACKSTART__ ; Linker generated
|
||||
|
||||
.include "zeropage.inc"
|
||||
|
||||
.segment "STARTUP"
|
||||
|
||||
lda #<__STACKSTART__
|
||||
ldx #>__STACKSTART__
|
||||
sta sp
|
||||
stx sp+1
|
||||
jsr zerobss
|
||||
jsr initlib
|
||||
jsr _main
|
||||
_exit: pha
|
||||
jsr donelib
|
||||
pla
|
||||
rts
|
159
libsrc/none/ctype.s
Normal file
159
libsrc/none/ctype.s
Normal file
@ -0,0 +1,159 @@
|
||||
;
|
||||
; Ullrich von Bassewitz, 2003-10-10
|
||||
;
|
||||
; Character specification table.
|
||||
;
|
||||
|
||||
.include "ctype.inc"
|
||||
|
||||
; The tables are readonly, put them into the rodata segment
|
||||
|
||||
.rodata
|
||||
|
||||
; The following 256 byte wide table specifies attributes for the isxxx type
|
||||
; of functions. Doing it by a table means some overhead in space, but it
|
||||
; has major advantages:
|
||||
;
|
||||
; * It is fast. If it weren't for the slow parameter passing of cc65, one
|
||||
; could even define macros for the isxxx functions (this is usually
|
||||
; done on other platforms).
|
||||
;
|
||||
; * It is highly portable. The only unportable part is the table itself,
|
||||
; all real code goes into the common library.
|
||||
;
|
||||
; * We save some code in the isxxx functions.
|
||||
|
||||
|
||||
__ctype:
|
||||
.byte CT_CTRL ; 0/00 ___ctrl_@___
|
||||
.byte CT_CTRL ; 1/01 ___ctrl_A___
|
||||
.byte CT_CTRL ; 2/02 ___ctrl_B___
|
||||
.byte CT_CTRL ; 3/03 ___ctrl_C___
|
||||
.byte CT_CTRL ; 4/04 ___ctrl_D___
|
||||
.byte CT_CTRL ; 5/05 ___ctrl_E___
|
||||
.byte CT_CTRL ; 6/06 ___ctrl_F___
|
||||
.byte CT_CTRL ; 7/07 ___ctrl_G___
|
||||
.byte CT_CTRL ; 8/08 ___ctrl_H___
|
||||
.byte CT_CTRL | CT_OTHER_WS | CT_SPACE_TAB
|
||||
; 9/09 ___ctrl_I___
|
||||
.byte CT_CTRL | CT_OTHER_WS ; 10/0a ___ctrl_J___
|
||||
.byte CT_CTRL | CT_OTHER_WS ; 11/0b ___ctrl_K___
|
||||
.byte CT_CTRL | CT_OTHER_WS ; 12/0c ___ctrl_L___
|
||||
.byte CT_CTRL | CT_OTHER_WS ; 13/0d ___ctrl_M___
|
||||
.byte CT_CTRL ; 14/0e ___ctrl_N___
|
||||
.byte CT_CTRL ; 15/0f ___ctrl_O___
|
||||
.byte CT_CTRL ; 16/10 ___ctrl_P___
|
||||
.byte CT_CTRL ; 17/11 ___ctrl_Q___
|
||||
.byte CT_CTRL ; 18/12 ___ctrl_R___
|
||||
.byte CT_CTRL ; 19/13 ___ctrl_S___
|
||||
.byte CT_CTRL ; 20/14 ___ctrl_T___
|
||||
.byte CT_CTRL ; 21/15 ___ctrl_U___
|
||||
.byte CT_CTRL ; 22/16 ___ctrl_V___
|
||||
.byte CT_CTRL ; 23/17 ___ctrl_W___
|
||||
.byte CT_CTRL ; 24/18 ___ctrl_X___
|
||||
.byte CT_CTRL ; 25/19 ___ctrl_Y___
|
||||
.byte CT_CTRL ; 26/1a ___ctrl_Z___
|
||||
.byte CT_CTRL ; 27/1b ___ctrl_[___
|
||||
.byte CT_CTRL ; 28/1c ___ctrl_\___
|
||||
.byte CT_CTRL ; 29/1d ___ctrl_]___
|
||||
.byte CT_CTRL ; 30/1e ___ctrl_^___
|
||||
.byte CT_CTRL ; 31/1f ___ctrl_____
|
||||
.byte CT_SPACE | CT_SPACE_TAB ; 32/20 ___SPACE___
|
||||
.byte CT_NONE ; 33/21 _____!_____
|
||||
.byte CT_NONE ; 34/22 _____"_____
|
||||
.byte CT_NONE ; 35/23 _____#_____
|
||||
.byte CT_NONE ; 36/24 _____$_____
|
||||
.byte CT_NONE ; 37/25 _____%_____
|
||||
.byte CT_NONE ; 38/26 _____&_____
|
||||
.byte CT_NONE ; 39/27 _____'_____
|
||||
.byte CT_NONE ; 40/28 _____(_____
|
||||
.byte CT_NONE ; 41/29 _____)_____
|
||||
.byte CT_NONE ; 42/2a _____*_____
|
||||
.byte CT_NONE ; 43/2b _____+_____
|
||||
.byte CT_NONE ; 44/2c _____,_____
|
||||
.byte CT_NONE ; 45/2d _____-_____
|
||||
.byte CT_NONE ; 46/2e _____._____
|
||||
.byte CT_NONE ; 47/2f _____/_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 48/30 _____0_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 49/31 _____1_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 50/32 _____2_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 51/33 _____3_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 52/34 _____4_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 53/35 _____5_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 54/36 _____6_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 55/37 _____7_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 56/38 _____8_____
|
||||
.byte CT_DIGIT | CT_XDIGIT ; 57/39 _____9_____
|
||||
.byte CT_NONE ; 58/3a _____:_____
|
||||
.byte CT_NONE ; 59/3b _____;_____
|
||||
.byte CT_NONE ; 60/3c _____<_____
|
||||
.byte CT_NONE ; 61/3d _____=_____
|
||||
.byte CT_NONE ; 62/3e _____>_____
|
||||
.byte CT_NONE ; 63/3f _____?_____
|
||||
|
||||
.byte CT_NONE ; 64/40 _____@_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 65/41 _____A_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 66/42 _____B_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 67/43 _____C_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 68/44 _____D_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 69/45 _____E_____
|
||||
.byte CT_UPPER | CT_XDIGIT ; 70/46 _____F_____
|
||||
.byte CT_UPPER ; 71/47 _____G_____
|
||||
.byte CT_UPPER ; 72/48 _____H_____
|
||||
.byte CT_UPPER ; 73/49 _____I_____
|
||||
.byte CT_UPPER ; 74/4a _____J_____
|
||||
.byte CT_UPPER ; 75/4b _____K_____
|
||||
.byte CT_UPPER ; 76/4c _____L_____
|
||||
.byte CT_UPPER ; 77/4d _____M_____
|
||||
.byte CT_UPPER ; 78/4e _____N_____
|
||||
.byte CT_UPPER ; 79/4f _____O_____
|
||||
.byte CT_UPPER ; 80/50 _____P_____
|
||||
.byte CT_UPPER ; 81/51 _____Q_____
|
||||
.byte CT_UPPER ; 82/52 _____R_____
|
||||
.byte CT_UPPER ; 83/53 _____S_____
|
||||
.byte CT_UPPER ; 84/54 _____T_____
|
||||
.byte CT_UPPER ; 85/55 _____U_____
|
||||
.byte CT_UPPER ; 86/56 _____V_____
|
||||
.byte CT_UPPER ; 87/57 _____W_____
|
||||
.byte CT_UPPER ; 88/58 _____X_____
|
||||
.byte CT_UPPER ; 89/59 _____Y_____
|
||||
.byte CT_UPPER ; 90/5a _____Z_____
|
||||
.byte CT_NONE ; 91/5b _____[_____
|
||||
.byte CT_NONE ; 92/5c _____\_____
|
||||
.byte CT_NONE ; 93/5d _____]_____
|
||||
.byte CT_NONE ; 94/5e _____^_____
|
||||
.byte CT_NONE ; 95/5f _UNDERLINE_
|
||||
.byte CT_NONE ; 96/60 ___grave___
|
||||
.byte CT_LOWER | CT_XDIGIT ; 97/61 _____a_____
|
||||
.byte CT_LOWER | CT_XDIGIT ; 98/62 _____b_____
|
||||
.byte CT_LOWER | CT_XDIGIT ; 99/63 _____c_____
|
||||
.byte CT_LOWER | CT_XDIGIT ; 100/64 _____d_____
|
||||
.byte CT_LOWER | CT_XDIGIT ; 101/65 _____e_____
|
||||
.byte CT_LOWER | CT_XDIGIT ; 102/66 _____f_____
|
||||
.byte CT_LOWER ; 103/67 _____g_____
|
||||
.byte CT_LOWER ; 104/68 _____h_____
|
||||
.byte CT_LOWER ; 105/69 _____i_____
|
||||
.byte CT_LOWER ; 106/6a _____j_____
|
||||
.byte CT_LOWER ; 107/6b _____k_____
|
||||
.byte CT_LOWER ; 108/6c _____l_____
|
||||
.byte CT_LOWER ; 109/6d _____m_____
|
||||
.byte CT_LOWER ; 110/6e _____n_____
|
||||
.byte CT_LOWER ; 111/6f _____o_____
|
||||
.byte CT_LOWER ; 112/70 _____p_____
|
||||
.byte CT_LOWER ; 113/71 _____q_____
|
||||
.byte CT_LOWER ; 114/72 _____r_____
|
||||
.byte CT_LOWER ; 115/73 _____s_____
|
||||
.byte CT_LOWER ; 116/74 _____t_____
|
||||
.byte CT_LOWER ; 117/75 _____u_____
|
||||
.byte CT_LOWER ; 118/76 _____v_____
|
||||
.byte CT_LOWER ; 119/77 _____w_____
|
||||
.byte CT_LOWER ; 120/78 _____x_____
|
||||
.byte CT_LOWER ; 121/79 _____y_____
|
||||
.byte CT_LOWER ; 122/7a _____z_____
|
||||
.byte CT_NONE ; 123/7b _____{_____
|
||||
.byte CT_NONE ; 124/7c _____|_____
|
||||
.byte CT_NONE ; 125/7d _____}_____
|
||||
.byte CT_NONE ; 126/7e _____~_____
|
||||
.byte CT_OTHER_WS ; 127/7f ____DEL____
|
||||
|
||||
.res 128, CT_NONE ; 128-255
|
@ -10,22 +10,19 @@
|
||||
|
||||
|
||||
initcwd:
|
||||
|
||||
ldx #PWD_PTR
|
||||
BRK_TELEMON XVARS
|
||||
|
||||
|
||||
sta ptr1
|
||||
sty ptr1+1
|
||||
|
||||
|
||||
ldy #$00
|
||||
|
||||
loop:
|
||||
loop:
|
||||
lda (ptr1),y
|
||||
beq done
|
||||
sta __cwd,y
|
||||
beq done
|
||||
iny
|
||||
bne loop
|
||||
|
||||
done:
|
||||
sta __cwd,y
|
||||
|
||||
done:
|
||||
rts
|
||||
|
@ -40,6 +40,7 @@
|
||||
/* common */
|
||||
#include "check.h"
|
||||
#include "cpu.h"
|
||||
#include "inttypes.h"
|
||||
#include "strbuf.h"
|
||||
#include "xmalloc.h"
|
||||
#include "xsprintf.h"
|
||||
@ -92,7 +93,7 @@ static void CheckLocalOffs (unsigned Offs)
|
||||
|
||||
|
||||
|
||||
static const char* GetLabelName (unsigned Flags, unsigned long Label, long Offs)
|
||||
static const char* GetLabelName (unsigned Flags, uintptr_t Label, long Offs)
|
||||
{
|
||||
static char Buf [256]; /* Label name */
|
||||
|
||||
@ -119,7 +120,7 @@ static const char* GetLabelName (unsigned Flags, unsigned long Label, long Offs)
|
||||
|
||||
case CF_ABSOLUTE:
|
||||
/* Absolute address */
|
||||
xsprintf (Buf, sizeof (Buf), "$%04X", (int)((Label+Offs) & 0xFFFF));
|
||||
xsprintf (Buf, sizeof (Buf), "$%04X", (unsigned)((Label+Offs) & 0xFFFF));
|
||||
break;
|
||||
|
||||
case CF_REGVAR:
|
||||
@ -729,7 +730,7 @@ void g_getimmed (unsigned Flags, unsigned long Val, long Offs)
|
||||
|
||||
|
||||
|
||||
void g_getstatic (unsigned flags, unsigned long label, long offs)
|
||||
void g_getstatic (unsigned flags, uintptr_t label, long offs)
|
||||
/* Fetch an static memory cell into the primary register */
|
||||
{
|
||||
/* Create the correct label name */
|
||||
@ -1008,7 +1009,7 @@ void g_leavariadic (int Offs)
|
||||
|
||||
|
||||
|
||||
void g_putstatic (unsigned flags, unsigned long label, long offs)
|
||||
void g_putstatic (unsigned flags, uintptr_t label, long offs)
|
||||
/* Store the primary register into the specified static memory cell */
|
||||
{
|
||||
/* Create the correct label name */
|
||||
@ -1584,7 +1585,7 @@ void g_addlocal (unsigned flags, int offs)
|
||||
|
||||
|
||||
|
||||
void g_addstatic (unsigned flags, unsigned long label, long offs)
|
||||
void g_addstatic (unsigned flags, uintptr_t label, long offs)
|
||||
/* Add a static variable to ax */
|
||||
{
|
||||
unsigned L;
|
||||
@ -1634,7 +1635,7 @@ void g_addstatic (unsigned flags, unsigned long label, long offs)
|
||||
|
||||
|
||||
|
||||
void g_addeqstatic (unsigned flags, unsigned long label, long offs,
|
||||
void g_addeqstatic (unsigned flags, uintptr_t label, long offs,
|
||||
unsigned long val)
|
||||
/* Emit += for a static variable */
|
||||
{
|
||||
@ -1857,7 +1858,7 @@ void g_addeqind (unsigned flags, unsigned offs, unsigned long val)
|
||||
|
||||
|
||||
|
||||
void g_subeqstatic (unsigned flags, unsigned long label, long offs,
|
||||
void g_subeqstatic (unsigned flags, uintptr_t label, long offs,
|
||||
unsigned long val)
|
||||
/* Emit -= for a static variable */
|
||||
{
|
||||
@ -2093,7 +2094,7 @@ void g_addaddr_local (unsigned flags attribute ((unused)), int offs)
|
||||
|
||||
|
||||
|
||||
void g_addaddr_static (unsigned flags, unsigned long label, long offs)
|
||||
void g_addaddr_static (unsigned flags, uintptr_t label, long offs)
|
||||
/* Add the address of a static variable to ax */
|
||||
{
|
||||
/* Create the correct label name */
|
||||
@ -4276,7 +4277,7 @@ void g_initstatic (unsigned InitLabel, unsigned VarLabel, unsigned Size)
|
||||
g_getimmed (CF_STATIC, InitLabel, 0);
|
||||
AddCodeLine ("jsr pushax");
|
||||
g_getimmed (CF_INT | CF_UNSIGNED | CF_CONST, Size, 0);
|
||||
AddCodeLine ("jsr %s", GetLabelName (CF_EXTERNAL, (unsigned long) "memcpy", 0));
|
||||
AddCodeLine ("jsr %s", GetLabelName (CF_EXTERNAL, (uintptr_t) "memcpy", 0));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
|
||||
/* common */
|
||||
#include "coll.h"
|
||||
#include "inttypes.h"
|
||||
|
||||
/* cc65 */
|
||||
#include "segments.h"
|
||||
@ -266,7 +267,7 @@ void g_restore_regvars (int StackOffs, int RegOffs, unsigned Bytes);
|
||||
void g_getimmed (unsigned Flags, unsigned long Val, long Offs);
|
||||
/* Load a constant into the primary register */
|
||||
|
||||
void g_getstatic (unsigned Flags, unsigned long Label, long Offs);
|
||||
void g_getstatic (unsigned Flags, uintptr_t Label, long Offs);
|
||||
/* Fetch an static memory cell into the primary register */
|
||||
|
||||
void g_getlocal (unsigned Flags, int Offs);
|
||||
@ -293,7 +294,7 @@ void g_leavariadic (int Offs);
|
||||
|
||||
|
||||
|
||||
void g_putstatic (unsigned flags, unsigned long label, long offs);
|
||||
void g_putstatic (unsigned flags, uintptr_t label, long offs);
|
||||
/* Store the primary register into the specified static memory cell */
|
||||
|
||||
void g_putlocal (unsigned Flags, int Offs, long Val);
|
||||
@ -315,7 +316,7 @@ void g_putind (unsigned flags, unsigned offs);
|
||||
void g_addlocal (unsigned flags, int offs);
|
||||
/* Add a local variable to ax */
|
||||
|
||||
void g_addstatic (unsigned flags, unsigned long label, long offs);
|
||||
void g_addstatic (unsigned flags, uintptr_t label, long offs);
|
||||
/* Add a static variable to ax */
|
||||
|
||||
|
||||
@ -326,7 +327,7 @@ void g_addstatic (unsigned flags, unsigned long label, long offs);
|
||||
|
||||
|
||||
|
||||
void g_addeqstatic (unsigned flags, unsigned long label, long offs,
|
||||
void g_addeqstatic (unsigned flags, uintptr_t label, long offs,
|
||||
unsigned long val);
|
||||
/* Emit += for a static variable */
|
||||
|
||||
@ -336,7 +337,7 @@ void g_addeqlocal (unsigned flags, int offs, unsigned long val);
|
||||
void g_addeqind (unsigned flags, unsigned offs, unsigned long val);
|
||||
/* Emit += for the location with address in ax */
|
||||
|
||||
void g_subeqstatic (unsigned flags, unsigned long label, long offs,
|
||||
void g_subeqstatic (unsigned flags, uintptr_t label, long offs,
|
||||
unsigned long val);
|
||||
/* Emit -= for a static variable */
|
||||
|
||||
@ -357,7 +358,7 @@ void g_subeqind (unsigned flags, unsigned offs, unsigned long val);
|
||||
void g_addaddr_local (unsigned flags, int offs);
|
||||
/* Add the address of a local variable to ax */
|
||||
|
||||
void g_addaddr_static (unsigned flags, unsigned long label, long offs);
|
||||
void g_addaddr_static (unsigned flags, uintptr_t label, long offs);
|
||||
/* Add the address of a static variable to ax */
|
||||
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/* expr.c
|
||||
**
|
||||
** 1998-06-21, Ullrich von Bassewitz
|
||||
** 2015-06-26, Greg King
|
||||
** 2017-12-05, Greg King
|
||||
*/
|
||||
|
||||
|
||||
@ -731,7 +731,7 @@ static void Primary (ExprDesc* E)
|
||||
} else if ((Sym->Flags & SC_FUNC) == SC_FUNC) {
|
||||
/* Function */
|
||||
E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL;
|
||||
E->Name = (unsigned long) Sym->Name;
|
||||
E->Name = (uintptr_t) Sym->Name;
|
||||
} else if ((Sym->Flags & SC_AUTO) == SC_AUTO) {
|
||||
/* Local variable. If this is a parameter for a variadic
|
||||
** function, we have to add some address calculations, and the
|
||||
@ -754,7 +754,7 @@ static void Primary (ExprDesc* E)
|
||||
/* Static variable */
|
||||
if (Sym->Flags & (SC_EXTERN | SC_STORAGE)) {
|
||||
E->Flags = E_LOC_GLOBAL | E_RTYPE_LVAL;
|
||||
E->Name = (unsigned long) Sym->Name;
|
||||
E->Name = (uintptr_t) Sym->Name;
|
||||
} else {
|
||||
E->Flags = E_LOC_STATIC | E_RTYPE_LVAL;
|
||||
E->Name = Sym->V.Label;
|
||||
@ -798,7 +798,7 @@ static void Primary (ExprDesc* E)
|
||||
Sym = AddGlobalSym (Ident, GetImplicitFuncType(), SC_EXTERN | SC_REF | SC_FUNC);
|
||||
E->Type = Sym->Type;
|
||||
E->Flags = E_LOC_GLOBAL | E_RTYPE_RVAL;
|
||||
E->Name = (unsigned long) Sym->Name;
|
||||
E->Name = (uintptr_t) Sym->Name;
|
||||
} else {
|
||||
/* Undeclared Variable */
|
||||
Sym = AddLocalSym (Ident, type_int, SC_AUTO | SC_REF, 0);
|
||||
@ -1308,7 +1308,7 @@ static void hie11 (ExprDesc *Expr)
|
||||
** Since we don't have a name, invent one.
|
||||
*/
|
||||
ED_MakeConstAbs (Expr, 0, GetImplicitFuncType ());
|
||||
Expr->Name = (long) IllegalFunc;
|
||||
Expr->Name = (uintptr_t) IllegalFunc;
|
||||
}
|
||||
/* Call the function */
|
||||
FunctionCall (Expr);
|
||||
|
@ -44,7 +44,6 @@
|
||||
#include "exprdesc.h"
|
||||
#include "stackptr.h"
|
||||
#include "symentry.h"
|
||||
#include "exprdesc.h"
|
||||
|
||||
|
||||
|
||||
@ -361,7 +360,7 @@ void PrintExprDesc (FILE* F, ExprDesc* E)
|
||||
if (Sep != '(') {
|
||||
fputc (')', F);
|
||||
}
|
||||
fprintf (F, "\nName: 0x%08lX\n", E->Name);
|
||||
fprintf (F, "\nName: 0x%08lX\n", (unsigned long)E->Name);
|
||||
}
|
||||
|
||||
|
||||
|
@ -43,6 +43,7 @@
|
||||
/* common */
|
||||
#include "fp.h"
|
||||
#include "inline.h"
|
||||
#include "inttypes.h"
|
||||
|
||||
/* cc65 */
|
||||
#include "asmcode.h"
|
||||
@ -98,7 +99,7 @@ struct ExprDesc {
|
||||
struct SymEntry* Sym; /* Symbol table entry if known */
|
||||
Type* Type; /* Type array of expression */
|
||||
unsigned Flags;
|
||||
unsigned long Name; /* Name or label number */
|
||||
uintptr_t Name; /* Name pointer or label number */
|
||||
long IVal; /* Integer value if expression constant */
|
||||
Double FVal; /* Floating point value */
|
||||
struct Literal* LVal; /* Literal value */
|
||||
|
@ -986,6 +986,9 @@ int main (int argc, char* argv[])
|
||||
case 's':
|
||||
IS_Set (&InlineStdFuncs, 1);
|
||||
break;
|
||||
default:
|
||||
UnknownOption (Arg);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -380,19 +380,14 @@ static void CmdPrint (CmdDesc* Cmd, FILE* F)
|
||||
static void SetTargetFiles (void)
|
||||
/* Set the target system files */
|
||||
{
|
||||
/* Determine the names of the target specific library file */
|
||||
if (Target != TGT_NONE) {
|
||||
/* Get a pointer to the system name and its length */
|
||||
const char* TargetName = GetTargetName (Target);
|
||||
unsigned TargetNameLen = strlen (TargetName);
|
||||
|
||||
/* Get a pointer to the system name and its length */
|
||||
const char* TargetName = GetTargetName (Target);
|
||||
unsigned TargetNameLen = strlen (TargetName);
|
||||
|
||||
/* Set the library file */
|
||||
TargetLib = xmalloc (TargetNameLen + 4 + 1);
|
||||
memcpy (TargetLib, TargetName, TargetNameLen);
|
||||
strcpy (TargetLib + TargetNameLen, ".lib");
|
||||
|
||||
}
|
||||
/* Set the library file */
|
||||
TargetLib = xmalloc (TargetNameLen + 4 + 1);
|
||||
memcpy (TargetLib, TargetName, TargetNameLen);
|
||||
strcpy (TargetLib + TargetNameLen, ".lib");
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,29 +38,28 @@
|
||||
|
||||
|
||||
|
||||
/* If we have stdint.h, include it, otherwise try some quesswork on types.
|
||||
/* If we have <stdint.h>, include it; otherwise, adapt types from <stddef.h>.
|
||||
** gcc and msvc don't define __STDC_VERSION__ without special flags, so check
|
||||
** for them explicitly. Undefined symbols are replaced by zero, so a check for
|
||||
** defined(__GNUC__) or defined(_MSC_VER) is not necessary.
|
||||
** for them explicitly. Undefined symbols are replaced by zero; so, checks for
|
||||
** defined(__GNUC__) and defined(_MSC_VER) aren't necessary.
|
||||
*/
|
||||
#if (__STDC_VERSION__ >= 199901) || (__GNUC__ >= 3) || (_MSC_VER >= 1600)
|
||||
#include <stdint.h>
|
||||
#else
|
||||
|
||||
/* Assume long is the largest type available, and assume that pointers can be
|
||||
** safely converted into this type and back.
|
||||
/* Assume that ptrdiff_t and size_t are wide enough to hold pointers.
|
||||
** Assume that they are the widest type.
|
||||
*/
|
||||
typedef long intptr_t;
|
||||
typedef unsigned long uintptr_t;
|
||||
typedef long intmax_t;
|
||||
typedef unsigned long uintmax_t;
|
||||
|
||||
#include <stddef.h>
|
||||
|
||||
typedef ptrdiff_t intptr_t;
|
||||
typedef size_t uintptr_t;
|
||||
typedef ptrdiff_t intmax_t;
|
||||
typedef size_t uintmax_t;
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* End of inttypes.h */
|
||||
|
||||
#endif
|
||||
|
@ -352,14 +352,14 @@ static void StoreOffset (PrintfCtrl* P)
|
||||
/* Store the current output offset (%n format spec) */
|
||||
{
|
||||
switch (P->LengthMod) {
|
||||
case lmChar: *va_arg (P->ap, int*) = P->BufFill;
|
||||
case lmShort: *va_arg (P->ap, int*) = P->BufFill;
|
||||
case lmInt: *va_arg (P->ap, int*) = P->BufFill;
|
||||
case lmLong: *va_arg (P->ap, long*) = P->BufFill;
|
||||
case lmIntMax: *va_arg (P->ap, intmax_t*) = P->BufFill;
|
||||
case lmSizeT: *va_arg (P->ap, size_t*) = P->BufFill;
|
||||
case lmPtrDiffT: *va_arg (P->ap, ptrdiff_t*) = P->BufFill;
|
||||
default: FAIL ("Invalid size modifier for %n format spec in xvsnprintf");
|
||||
case lmChar: *va_arg (P->ap, int*) = P->BufFill; break;
|
||||
case lmShort: *va_arg (P->ap, int*) = P->BufFill; break;
|
||||
case lmInt: *va_arg (P->ap, int*) = P->BufFill; break;
|
||||
case lmLong: *va_arg (P->ap, long*) = P->BufFill; break;
|
||||
case lmIntMax: *va_arg (P->ap, intmax_t*) = P->BufFill; break;
|
||||
case lmSizeT: *va_arg (P->ap, size_t*) = P->BufFill; break;
|
||||
case lmPtrDiffT: *va_arg (P->ap, ptrdiff_t*) = P->BufFill; break;
|
||||
default: FAIL ("Invalid size modifier for %n format spec. in xvsnprintf()");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1266,6 +1266,8 @@ static void OPC_6502_6C (void)
|
||||
Cycles = 6;
|
||||
Regs.PC = MemReadWord(Lo);
|
||||
}
|
||||
|
||||
ParaVirtHooks (&Regs);
|
||||
}
|
||||
|
||||
|
||||
@ -1276,6 +1278,8 @@ static void OPC_65C02_6C (void)
|
||||
/* 6502 bug fixed here */
|
||||
Cycles = 5;
|
||||
Regs.PC = MemReadWord (MemReadWord (Regs.PC+1));
|
||||
|
||||
ParaVirtHooks (&Regs);
|
||||
}
|
||||
|
||||
|
||||
@ -1430,6 +1434,8 @@ static void OPC_65SC02_7C (void)
|
||||
PC = Regs.PC;
|
||||
Adr = MemReadWord (PC+1);
|
||||
Regs.PC = MemReadWord(Adr+Regs.XR);
|
||||
|
||||
ParaVirtHooks (&Regs);
|
||||
}
|
||||
|
||||
|
||||
|
26
testcode/lib/apple2/hgrtest.c
Normal file
26
testcode/lib/apple2/hgrtest.c
Normal file
@ -0,0 +1,26 @@
|
||||
// cl65 -t apple2 -C apple2-hgr.cfg hgrtest.c werner.s
|
||||
|
||||
#include <tgi.h>
|
||||
#include <conio.h>
|
||||
|
||||
#pragma code-name (push, "LOWCODE")
|
||||
|
||||
void say (const char* text)
|
||||
{
|
||||
tgi_setcolor (TGI_COLOR_BLACK);
|
||||
tgi_outtextxy (41, 33, text);
|
||||
}
|
||||
|
||||
#pragma code-name (pop)
|
||||
|
||||
void main (void)
|
||||
{
|
||||
tgi_install (a2_hi_tgi);
|
||||
tgi_init ();
|
||||
cgetc ();
|
||||
|
||||
say ("Hi Dude !");
|
||||
cgetc ();
|
||||
|
||||
tgi_uninstall ();
|
||||
}
|
BIN
testcode/lib/apple2/werner.pic
Normal file
BIN
testcode/lib/apple2/werner.pic
Normal file
Binary file not shown.
2
testcode/lib/apple2/werner.s
Normal file
2
testcode/lib/apple2/werner.s
Normal file
@ -0,0 +1,2 @@
|
||||
.segment "HGR"
|
||||
.incbin "werner.pic"
|
@ -113,6 +113,17 @@ static unsigned char testCPeekC (char ch)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* toggle revers mode every few chars so cpeekc gets tested for both */
|
||||
revers ((ch >> 3) & 1);
|
||||
|
||||
/* output additional space every now and then, that way not only even or only
|
||||
odd half of the character cell will be tested */
|
||||
#if defined(__C64__)
|
||||
if ((width == 80) && ((ch % 17) == 0)) {
|
||||
cputc(' ');
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Output the char to the screen. */
|
||||
cputc (ch);
|
||||
|
||||
@ -141,8 +152,8 @@ static unsigned char testCPeekC (char ch)
|
||||
*/
|
||||
ch2_c = peekChWithoutTranslation ();
|
||||
if ((ch2_c != ch2_b)
|
||||
#if defined(__C128__)
|
||||
/* VDC memory is not accessable */
|
||||
#if defined(__C128__) || defined(__C64__)
|
||||
/* VDC memory is not accessible, soft80 has no "videoram" */
|
||||
&& (width == 40)
|
||||
#endif
|
||||
){
|
||||
@ -198,7 +209,7 @@ static unsigned char testCPeekCol (char ch)
|
||||
ch2_c = peekColWithoutTranslation ();
|
||||
if ((ch2_c != ch2_b)
|
||||
#if defined(__C128__)
|
||||
/* VDC memory is not accessable */
|
||||
/* VDC memory is not accessible */
|
||||
&& (width == 40)
|
||||
#endif
|
||||
){
|
||||
@ -230,7 +241,7 @@ int main (void)
|
||||
int ret = 0;
|
||||
|
||||
clrscr ();
|
||||
revers (1);
|
||||
revers (0);
|
||||
textcolor(1);
|
||||
bgcolor(0);
|
||||
screensize (&width, &i);
|
||||
@ -261,7 +272,7 @@ int main (void)
|
||||
|
||||
#if defined (__CBM610__) || defined (__PET__)
|
||||
cprintf("\n\rno COLOR_RAM\n\r");
|
||||
#elif defined (__C128__)
|
||||
#elif defined (__C128__) || defined (__C64__)
|
||||
if (width == 40) {
|
||||
cprintf("\n\rCOLOR_RAM at $%04x\n\r", COLOR_RAM);
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user