From cf115c042e060cb11ff5df41b84be1e8ea69d4e1 Mon Sep 17 00:00:00 2001 From: marcobaye Date: Mon, 26 Nov 2012 23:11:45 +0000 Subject: [PATCH] Added "cbm" directory to library (with several new files). git-svn-id: https://svn.code.sf.net/p/acme-crossass/code-0/trunk@10 4df02467-bbd4-4a76-a152-e7ce94205b78 --- ACME_Lib/cbm/basic1.a | 88 +++++ ACME_Lib/cbm/basic10.a | 45 +++ ACME_Lib/cbm/basic2.a | 7 + ACME_Lib/cbm/basic3.5.a | 74 +++++ ACME_Lib/cbm/basic4.a | 22 ++ ACME_Lib/cbm/basic7.a | 75 +++++ ACME_Lib/cbm/c128/basic.a | 6 + ACME_Lib/cbm/c128/kernel.a | 32 ++ ACME_Lib/cbm/c128/mmu.a | 26 ++ ACME_Lib/cbm/c128/petscii.a | 50 +++ ACME_Lib/cbm/c128/vdc.a | 156 +++++++++ ACME_Lib/cbm/c128/vic.a | 10 + ACME_Lib/cbm/c128/zeropage.a | 608 +++++++++++++++++++++++++++++++++++ ACME_Lib/cbm/c64/basic.a | 6 + ACME_Lib/cbm/c64/cia1.a | 21 ++ ACME_Lib/cbm/c64/cia2.a | 21 ++ ACME_Lib/cbm/c64/kernel.a | 9 + ACME_Lib/cbm/c64/petscii.a | 36 +++ ACME_Lib/cbm/c64/sid.a | 52 +++ ACME_Lib/cbm/c64/vic.a | 78 +++++ ACME_Lib/cbm/c65/basic.a | 6 + ACME_Lib/cbm/kernel.a | 48 +++ ACME_Lib/cbm/petscii.a | 22 ++ 23 files changed, 1498 insertions(+) create mode 100644 ACME_Lib/cbm/basic1.a create mode 100644 ACME_Lib/cbm/basic10.a create mode 100644 ACME_Lib/cbm/basic2.a create mode 100644 ACME_Lib/cbm/basic3.5.a create mode 100644 ACME_Lib/cbm/basic4.a create mode 100644 ACME_Lib/cbm/basic7.a create mode 100644 ACME_Lib/cbm/c128/basic.a create mode 100644 ACME_Lib/cbm/c128/kernel.a create mode 100644 ACME_Lib/cbm/c128/mmu.a create mode 100644 ACME_Lib/cbm/c128/petscii.a create mode 100644 ACME_Lib/cbm/c128/vdc.a create mode 100644 ACME_Lib/cbm/c128/vic.a create mode 100644 ACME_Lib/cbm/c128/zeropage.a create mode 100644 ACME_Lib/cbm/c64/basic.a create mode 100644 ACME_Lib/cbm/c64/cia1.a create mode 100644 ACME_Lib/cbm/c64/cia2.a create mode 100644 ACME_Lib/cbm/c64/kernel.a create mode 100644 ACME_Lib/cbm/c64/petscii.a create mode 100644 ACME_Lib/cbm/c64/sid.a create mode 100644 ACME_Lib/cbm/c64/vic.a create mode 100644 ACME_Lib/cbm/c65/basic.a create mode 100644 ACME_Lib/cbm/kernel.a create mode 100644 ACME_Lib/cbm/petscii.a diff --git a/ACME_Lib/cbm/basic1.a b/ACME_Lib/cbm/basic1.a new file mode 100644 index 0000000..4ff997b --- /dev/null +++ b/ACME_Lib/cbm/basic1.a @@ -0,0 +1,88 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic1_a !eof +lib_cbm_basic1_a = 1 + +; Macros for inserting BASIC commands. Note that "#" and "$" characters in +; BASIC keywords have been converted to "_" in the macro names. +; *All* function macros already include the '(' character. + +!macro b_END {!by $80} +!macro b_FOR {!by $81} +!macro b_NEXT {!by $82} +!macro b_DATA {!by $83} +!macro b_INPUT_ {!by $84} ; INPUT# +!macro b_INPUT {!by $85} +!macro b_DIM {!by $86} +!macro b_READ {!by $87} +!macro b_LET {!by $88} +!macro b_GOTO {!by $89} +!macro b_RUN {!by $8a} +!macro b_IF {!by $8b} +!macro b_RESTORE {!by $8c} +!macro b_GOSUB {!by $8d} +!macro b_RETURN {!by $8e} +!macro b_REM {!by $8f} +!macro b_STOP {!by $90} +!macro b_ON {!by $91} +!macro b_WAIT {!by $92} +!macro b_LOAD {!by $93} +!macro b_SAVE {!by $94} +!macro b_VERIFY {!by $95} +; As "DEF" cannot be used without "FN", here is a macro called "b_DEFFN" +; instead of one called "b_DEF": +!macro b_DEFFN {!by $96, $a5} +!macro b_POKE {!by $97} +!macro b_PRINT_ {!by $98} ; PRINT# +!macro b_PRINT {!by $99} +!macro b_CONT {!by $9a} +!macro b_LIST {!by $9b} +!macro b_CLR {!by $9c} +!macro b_CMD {!by $9d} +!macro b_SYS {!by $9e} +!macro b_OPEN {!by $9f} +!macro b_CLOSE {!by $a0} +!macro b_GET {!by $a1} +!macro b_NEW {!by $a2} +!macro b_TAB {!by $a3} ; the token already includes '(' +!macro b_TO {!by $a4} +!macro b_FN {!by $a5} +!macro b_SPC {!by $a6} ; the token already includes '(' +!macro b_THEN {!by $a7} +!macro b_NOT {!by $a8} +!macro b_STEP {!by $a9} +!macro b_ADD {!by $aa} ; '+' +!macro b_SUBTRACT {!by $ab} ; '-' +!macro b_MULTIPLY {!by $ac} ; '*' +!macro b_DIVIDE {!by $ad} ; '/' +!macro b_POWEROF {!by $ae} ; '^' +!macro b_AND {!by $af} +!macro b_OR {!by $b0} +!macro b_GREATER {!by $b1} ; '>' +!macro b_EQUAL {!by $b2} ; '=' +!macro b_LESS {!by $b3} ; '<' +!macro b_SGN {!by $b4:!pet '('} +!macro b_INT {!by $b5:!pet '('} +!macro b_ABS {!by $b6:!pet '('} +!macro b_USR {!by $b7:!pet '('} +!macro b_FRE {!by $b8:!pet '('} +!macro b_POS {!by $b9:!pet '('} +!macro b_SQR {!by $ba:!pet '('} +!macro b_RND {!by $bb:!pet '('} +!macro b_LOG {!by $bc:!pet '('} +!macro b_EXP {!by $bd:!pet '('} +!macro b_COS {!by $be:!pet '('} +!macro b_SIN {!by $bf:!pet '('} +!macro b_TAN {!by $c0:!pet '('} +!macro b_ATN {!by $c1:!pet '('} +!macro b_PEEK {!by $c2:!pet '('} +!macro b_LEN {!by $c3:!pet '('} +!macro b_STR_ {!by $c4:!pet '('} ; STR$( +!macro b_VAL {!by $c5:!pet '('} +!macro b_ASC {!by $c6:!pet '('} +!macro b_CHR_ {!by $c7:!pet '('} ; CHR$( +!macro b_LEFT_ {!by $c8:!pet '('} ; LEFT$( +!macro b_RIGHT_ {!by $c9:!pet '('} ; RIGHT$( +!macro b_MID_ {!by $ca:!pet '('} ; MID$( + +!macro b_PI {!by $ff} diff --git a/ACME_Lib/cbm/basic10.a b/ACME_Lib/cbm/basic10.a new file mode 100644 index 0000000..c72b536 --- /dev/null +++ b/ACME_Lib/cbm/basic10.a @@ -0,0 +1,45 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic10_a !eof +lib_cbm_basic10_a = 1 + +!source ; from 0x80 to 0xff, 0xce 0x02 to 0xce 0x0a, 0xfe 0x02 to 0xfe 0x26 + +; GSHAPE/SSHAPE/DRAW have new names: +!macro b_PASTE {!by $e3} +!macro b_CUT {!by $e4} +!macro b_LINE {!by $e5} +; DIRECTORY has a new name: +!macro b_DIR {!by $ee} + +; STASH/FETCH/SWAP are all decoded to DMA: +!macro b_DMA {!by $fe, $1f} +; extended token $fe $20 isn't used ($20 is ' ') +;!macro b_DMA {!by $fe, $21} +; extended token $fe $22 isn't used ($20 is '"') +;!macro b_DMA {!by $fe, $23} + +; new instructions: +!macro b_TYPE {!by $fe, $27} +!macro b_BVERIFY {!by $fe, $28} +!macro b_ECTORY {!by $fe, $29} ; no-op in case someone types "DIRECTORY"? +!macro b_ERASE {!by $fe, $2a} +!macro b_FIND {!by $fe, $2b} +!macro b_CHANGE {!by $fe, $2c} +!macro b_SET {!by $fe, $2d} +!macro b_SCREEN {!by $fe, $2e} +!macro b_POLYGON {!by $fe, $2f} +!macro b_ELLIPSE {!by $fe, $30} +!macro b_VIEWPORT {!by $fe, $31} +!macro b_GCOPY {!by $fe, $32} +!macro b_PEN {!by $fe, $33} +!macro b_PALETTE {!by $fe, $34} +!macro b_DMODE {!by $fe, $35} +!macro b_DPAT {!by $fe, $36} +!macro b_PIC {!by $fe, $37} +!macro b_GENLOCK {!by $fe, $38} +!macro b_FOREGROUND {!by $fe, $39} +; extended token $fe $3a isn't used ($3a is ':') +!macro b_BACKGROUND {!by $fe, $3b} +!macro b_BORDER {!by $fe, $3c} +!macro b_HIGHLIGHT {!by $fe, $3d} diff --git a/ACME_Lib/cbm/basic2.a b/ACME_Lib/cbm/basic2.a new file mode 100644 index 0000000..5ce7894 --- /dev/null +++ b/ACME_Lib/cbm/basic2.a @@ -0,0 +1,7 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic2_a !eof +lib_cbm_basic2_a = 1 + +!source ; from 0x80 to 0xca +!macro b_GO {!by $cb} diff --git a/ACME_Lib/cbm/basic3.5.a b/ACME_Lib/cbm/basic3.5.a new file mode 100644 index 0000000..79cad60 --- /dev/null +++ b/ACME_Lib/cbm/basic3.5.a @@ -0,0 +1,74 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic3_5_a !eof +lib_cbm_basic3_5_a = 1 + +; Macros for inserting BASIC commands. Note that "#" and "$" characters in +; BASIC keywords have been converted to "_" in the macro names. +; *All* function macros already include the '(' character. + +!source ; from 0x80 to $cb +!macro b_RGR {!by $cc:!pet '('} +!macro b_RCLR {!by $cd:!pet '('} +; if this file gets included via "cbm/basic7.a" or "cbm/basic10.a", do not define RLUM +; (because v7 and higher use $ce as prefix byte for additional functions): +!ifndef lib_cbm_basic7_a { + !ifndef lib_cbm_basic10_a { + !macro b_RLUM {!by $ce:!pet '('} + } +} +!macro b_JOY {!by $cf:!pet '('} +!macro b_RDOT {!by $d0:!pet '('} +!macro b_DEC {!by $d1:!pet '('} +!macro b_HEX_ {!by $d2:!pet '('} ; HEX$( +!macro b_ERR_ {!by $d3:!pet '('} ; ERR$( +!macro b_INSTR {!by $d4:!pet '('} +!macro b_ELSE {!by $d5} +!macro b_RESUME {!by $d6} +!macro b_TRAP {!by $d7} +!macro b_TRON {!by $d8} +!macro b_TROFF {!by $d9} +!macro b_SOUND {!by $da} +!macro b_VOL {!by $db} +!macro b_AUTO {!by $dc} +!macro b_PUDEF {!by $dd} +!macro b_GRAPHIC {!by $de} +!macro b_PAINT {!by $df} +!macro b_CHAR {!by $e0} +!macro b_BOX {!by $e1} +!macro b_CIRCLE {!by $e2} +; if this file gets included via "cbm/basic10.a", do not define GSHAPE/SSHAPE/DRAW +; (because in v10, they are called PASTE/CUT/LINE): +!ifndef lib_cbm_basic10_a { + !macro b_GSHAPE {!by $e3} + !macro b_SSHAPE {!by $e4} + !macro b_DRAW {!by $e5} +} +!macro b_LOCATE {!by $e6} +!macro b_COLOR {!by $e7} +!macro b_SCNCLR {!by $e8} +!macro b_SCALE {!by $e9} +!macro b_HELP {!by $ea} +!macro b_DO {!by $eb} +!macro b_LOOP {!by $ec} +!macro b_EXIT {!by $ed} +; if this file gets included via "cbm/basic10.a", do not define DIRECTORY +; (because in v10, it is called DIR): +!ifndef lib_cbm_basic10_a { + !macro b_DIRECTORY {!by $ee} +} +!macro b_DSAVE {!by $ef} +!macro b_DLOAD {!by $f0} +!macro b_HEADER {!by $f1} +!macro b_SCRATCH {!by $f2} +!macro b_COLLECT {!by $f3} +!macro b_COPY {!by $f4} +!macro b_RENAME {!by $f5} +!macro b_BACKUP {!by $f6} +!macro b_DELETE {!by $f7} +!macro b_RENUMBER {!by $f8} +!macro b_KEY {!by $f9} +!macro b_MONITOR {!by $fa} +!macro b_USING {!by $fb} +!macro b_UNTIL {!by $fc} +!macro b_WHILE {!by $fd} diff --git a/ACME_Lib/cbm/basic4.a b/ACME_Lib/cbm/basic4.a new file mode 100644 index 0000000..6c7f04e --- /dev/null +++ b/ACME_Lib/cbm/basic4.a @@ -0,0 +1,22 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic4_a !eof +lib_cbm_basic4_a = 1 + +!source ; from 0x80 to $cb +; CAUTION - these tokens are different to the ones in BASIC 3.5, BASIC 7 and BASIC 10! +!macro b_CONCAT {!by $cc} +!macro b_DOPEN {!by $cd} +!macro b_DCLOSE {!by $ce} +!macro b_RECORD {!by $cf} +!macro b_HEADER {!by $d0} +!macro b_COLLECT {!by $d1} +!macro b_BACKUP {!by $d2} +!macro b_COPY {!by $d3} +!macro b_APPEND {!by $d4} +!macro b_DSAVE {!by $d5} +!macro b_DLOAD {!by $d6} +!macro b_CATALOG {!by $d7} +!macro b_RENAME {!by $d8} +!macro b_SCRATCH {!by $d9} +!macro b_DIRECTORY {!by $da} diff --git a/ACME_Lib/cbm/basic7.a b/ACME_Lib/cbm/basic7.a new file mode 100644 index 0000000..621c298 --- /dev/null +++ b/ACME_Lib/cbm/basic7.a @@ -0,0 +1,75 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_basic7_a !eof +lib_cbm_basic7_a = 1 + +; Macros for inserting BASIC commands. Note that "#" and "$" characters in +; BASIC keywords have been converted to "_" in the macro names. +; *All* function macros already include the '(' character. + +!source ; from 0x80 to $fd + +; extended (16-bit) tokens, $ce range (replacing RLUM function): + +; extended token $ce $00 isn't used +; extended token $ce $01 isn't used +!macro b_POT {!by $ce, $02:!pet '('} +!macro b_BUMP {!by $ce, $03:!pet '('} +; if this file gets included via "cbm/basic10.a", do not define PEN +; (because in v10, there is an instruction called PEN): +!ifndef lib_cbm_basic10_a { + !macro b_PEN {!by $ce, $04:!pet '('} +} +!macro b_RSPPOS {!by $ce, $05:!pet '('} +!macro b_RSPRITE {!by $ce, $06:!pet '('} +!macro b_RSPCOLOR {!by $ce, $07:!pet '('} +!macro b_XOR {!by $ce, $08:!pet '('} +!macro b_RWINDOW {!by $ce, $09:!pet '('} +!macro b_POINTER {!by $ce, $0a:!pet '('} + + +; extended (16-bit) tokens, $fe range: + +; extended token $fe $00 isn't used +; extended token $fe $01 isn't used +!macro b_BANK {!by $fe, $02} +!macro b_FILTER {!by $fe, $03} +!macro b_PLAY {!by $fe, $04} +!macro b_TEMPO {!by $fe, $05} +!macro b_MOVSPR {!by $fe, $06} +!macro b_SPRITE {!by $fe, $07} +!macro b_SPRCOLOR {!by $fe, $08} +!macro b_RREG {!by $fe, $09} +!macro b_ENVELOPE {!by $fe, $0a} +!macro b_SLEEP {!by $fe, $0b} +!macro b_CATALOG {!by $fe, $0c} +!macro b_DOPEN {!by $fe, $0d} +!macro b_APPEND {!by $fe, $0e} +!macro b_DCLOSE {!by $fe, $0f} +!macro b_BSAVE {!by $fe, $10} +!macro b_BLOAD {!by $fe, $11} +!macro b_RECORD {!by $fe, $12} +!macro b_CONCAT {!by $fe, $13} +!macro b_DVERIFY {!by $fe, $14} +!macro b_DCLEAR {!by $fe, $15} +!macro b_SPRSAV {!by $fe, $16} +!macro b_COLLISION {!by $fe, $17} +!macro b_BEGIN {!by $fe, $18} +!macro b_BEND {!by $fe, $19} +!macro b_WINDOW {!by $fe, $1a} +!macro b_BOOT {!by $fe, $1b} +!macro b_WIDTH {!by $fe, $1c} +!macro b_SPRDEF {!by $fe, $1d} +!macro b_QUIT {!by $fe, $1e} ; "unimplemented command" +; if this file gets included via "cbm/basic10.a", do not define STASH/FETCH/SWAP +; (because in v10, they all get decoded to DMA): +!ifndef lib_cbm_basic10_a { + !macro b_STASH {!by $fe, $1f} + ; extended token $fe $20 isn't used ($20 is ' ') + !macro b_FETCH {!by $fe, $21} + ; extended token $fe $22 isn't used ($22 is '"') + !macro b_SWAP {!by $fe, $23} +} +!macro b_OFF {!by $fe, $24} ; "unimplemented command" +!macro b_FAST {!by $fe, $25} +!macro b_SLOW {!by $fe, $26} diff --git a/ACME_Lib/cbm/c128/basic.a b/ACME_Lib/cbm/c128/basic.a new file mode 100644 index 0000000..75c7540 --- /dev/null +++ b/ACME_Lib/cbm/c128/basic.a @@ -0,0 +1,6 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_basic_a !eof +lib_cbm_c128_basic_a = 1 + +!source diff --git a/ACME_Lib/cbm/c128/kernel.a b/ACME_Lib/cbm/c128/kernel.a new file mode 100644 index 0000000..04503ff --- /dev/null +++ b/ACME_Lib/cbm/c128/kernel.a @@ -0,0 +1,32 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_kernel_a !eof +lib_cbm_c128_kernel_a = 1 + +; Taken from the web. +; Sorry, I can't give credit because I don't have the URL anymore. + +k_spin_spout = $ff47 +k_close_all = $ff4a +k_c64mode = $ff4d +k_dma_call = $ff50 +k_boot_call = $ff53 +k_phoenix = $ff56 +k_lkupla = $ff59 +k_lkupsa = $ff5c +k_swapper = $ff5f +k_dlchr = $ff62 +k_pfkey = $ff65 +k_setbnk = $ff68 +k_getcfg = $ff6b +k_jsrfar = $ff6e +k_jmpfar = $ff71 +k_indfet = $ff74 +k_indsta = $ff77 +k_indcmp = $ff7a +k_primm = $ff7d +k_release_number = $ff80 +!source ; $ff81-$fff5 is backward compatible to older machines +; $fff6/$fff7 are unused (ff ff) +k_indirect128mode = $fff8 ; indirect vector, without JMP command! +; $fffa through $ffff are cpu hardware vectors (see <6502/std.a>) diff --git a/ACME_Lib/cbm/c128/mmu.a b/ACME_Lib/cbm/c128/mmu.a new file mode 100644 index 0000000..d62e5b9 --- /dev/null +++ b/ACME_Lib/cbm/c128/mmu.a @@ -0,0 +1,26 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_mmu_a !eof +lib_cbm_c128_mmu_a = 1 + +; mirrored registers, available in every configuration: +mmu_cr = $ff00 +mmu_lcra = $ff01 +mmu_lcrb = $ff02 +mmu_lcrc = $ff03 +mmu_lcrd = $ff04 + +; "normal" registers, only available when accessing i/o space: + +;mmu_cr = $d500; need not be defined: If $d500 works, $ff00 does as well. +mmu_pcra = $d501 +mmu_pcrb = $d502 +mmu_pcrc = $d503 +mmu_pcrd = $d504 +mmu_mcr = $d505 +mmu_rcr = $d506 +mmu_p0l = $d507 +mmu_p0h = $d508 +mmu_p1l = $d509 +mmu_p1h = $d50a +mmu_vr = $d50b diff --git a/ACME_Lib/cbm/c128/petscii.a b/ACME_Lib/cbm/c128/petscii.a new file mode 100644 index 0000000..108b129 --- /dev/null +++ b/ACME_Lib/cbm/c128/petscii.a @@ -0,0 +1,50 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_petscii_a !eof +lib_cbm_c128_petscii_a = 1 + +!source + +; color codes +; vic vdc +petscii_BLACK = 144: petscii_DBLACK = 144 +petscii_WHITE = 5: petscii_LWHITE = 5 +petscii_RED = 28: petscii_DRED = 28 +petscii_CYAN = 159: petscii_LCYAN = 159 +petscii_PURPLE = 156: petscii_LMAGENTA = 156 +petscii_GREEN = 30: petscii_DGREEN = 30 +petscii_BLUE = 31: petscii_DBLUE = 31 +petscii_YELLOW = 158: petscii_LYELLOW = 158 +petscii_ORANGE = 129: petscii_DMAGENTA = 129 +petscii_BROWN = 149: petscii_DYELLOW = 149 +petscii_LRED = 150 +petscii_GRAY1 = 151: petscii_DCYAN = 151 +petscii_GRAY2 = 152: petscii_LBLACK = 152: petscii_DGRAY = 152 +petscii_LGREEN = 153 +petscii_LBUE = 154 +petscii_GRAY3 = 155: petscii_DWHITE = 155: petscii_LGRAY = 155 + +; switching character set +petscii_LOCK = 11 ; forbid CBM-shift (C64 uses 8) +petscii_UNLOCK = 12 ; allow CBM-shift (C64 uses 9) +petscii_LOWERCASE = 14 ; switch to lowercase/uppercase character set +petscii_UPPERCASE = 142 ; switch to uppercase/graphics character set + +; function keys +petscii_F1 = 133: petscii_F2 = 137 +petscii_F3 = 134: petscii_F4 = 138 +petscii_F5 = 135: petscii_F6 = 139 +petscii_F7 = 136: petscii_F8 = 140 + +; C128-specific stuff +petscii_UNDERLINEON = 2 +petscii_UNDERLINEOFF = 130 +petscii_FLASHON = 15 +petscii_FLASHOFF = 143 +petscii_BELL = 7 +petscii_TAB = 9 +petscii_SETTAB = 24 +petscii_LINEFEED = 10 +petscii_ESCAPE = 27 +petscii_SHIFTSTOP = 131 +petscii_HELP = 132 diff --git a/ACME_Lib/cbm/c128/vdc.a b/ACME_Lib/cbm/c128/vdc.a new file mode 100644 index 0000000..42529ed --- /dev/null +++ b/ACME_Lib/cbm/c128/vdc.a @@ -0,0 +1,156 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_vdc_a !eof +lib_cbm_c128_vdc_a = 1 + +; access macros + +!macro vdc_lda { +- bit vdc_state + bpl - + lda vdc_data +} + +!macro vdc_sta { +- bit vdc_state + bpl - + sta vdc_data +} + +!macro vdc_ldx { +- bit vdc_state + bpl - + ldx vdc_data +} + +!macro vdc_stx { +- bit vdc_state + bpl - + stx vdc_data +} + +!macro vdc_ldy { +- bit vdc_state + bpl - + ldy vdc_data +} + +!macro vdc_sty { +- bit vdc_state + bpl - + sty vdc_data +} + +; color codes + +; These are the colors officially available on the C128 - the same names as if +; using a C64's VIC, but different codes of course. + +; color name RGBI VIC equivalent +vdccolor_BLACK = %.... ; 0 +vdccolor_WHITE = %#### ; 15 +vdccolor_RED = %#... ; 8 +vdccolor_CYAN = %.### ; 7 +vdccolor_PURPLE = %#.## ; 11 +vdccolor_GREEN = %.#.. ; 4 +vdccolor_BLUE = %..#. ; 2 +vdccolor_YELLOW = %##.# ; 13 +vdccolor_ORANGE = %#.#. ; 10 (on VDC, this is in fact a dark shade of purple) +vdccolor_BROWN = %##.. ; 12 +vdccolor_LRED = %#..# ; 9 +vdccolor_GRAY1 = %.##. ; 6 (on VDC, this is in fact a dark shade of cyan) +vdccolor_GRAY2 = %...# ; 1 (this is almost, but not quite, entirely black) +vdccolor_LGREEN = %.#.# ; 5 +vdccolor_LBLUE = %..## ; 3 +vdccolor_GRAY3 = %###. ; 14 + +; The following alternative names are much easier to remember when you're used +; to writing programs for the VDC: There are eight main colors, and each one is +; available in a light and a dark shade - even black and white! + +; primary colors RGBI code +vdccolor_DRED = %#... +vdccolor_DGREEN = %.#.. +vdccolor_DBLUE = %..#. +vdccolor_LRED = %#..# +vdccolor_LGREEN = %.#.# +vdccolor_LBLUE = %..## + +; secondary colors RGBI code +vdccolor_LCYAN = %.### +vdccolor_LMAGENTA = %#.## +vdccolor_LYELLOW = %##.# +vdccolor_DCYAN = %.##. +vdccolor_DMAGENTA = %#.#. +vdccolor_DYELLOW = %##.. + +; black & white RGBI code +vdccolor_DBLACK = %.... +vdccolor_LBLACK = %...# +vdccolor_LWHITE = %#### +vdccolor_DWHITE = %###. + +; if you don't like the concept of shaded black/white, then use these: + +; gray level RGBI code +vdccolor_BLACK = %.... ; "dark black" => "black" +vdccolor_DGRAY = %...# ; "light black" => "dark grey" +vdccolor_LGRAY = %###. ; "dark white" => "light grey" +vdccolor_WHITE = %#### ; "light white" => "white" + +; attribute flags (2rufRGBI) +vdcattr_2ND = %#....... ; second character set +vdcattr_REVS = %.#...... ; reverse mode +vdcattr_UL = %..#..... ; underline +vdcattr_FLASH = %...#.... ; flash +vdcattr_R = %....#... ; red +vdcattr_G = %.....#.. ; green +vdcattr_B = %......#. ; blue +vdcattr_I = %.......# ; intensity + +; direct registers +vdc_state = $d600 ; 1b "ready", 1b "lightpen", 1b "rescan", 5b "version" +vdc_reg = $d600 +vdc_data = $d601 + +; indirect registers +vdcr_htotal = $00 ; card columns (total), minus one +vdcr_columns = $01 ; card columns actually displayed +vdcr_hdisp = $01 +vdcr_hsync_pos = $02 ; card to send horizontal sync in +vdcr_syncwidth = $03 ; 4b vertical, 4b horizontal +vdcr_vtotal = $04 ; card lines (total), minus one +vdcr_vadjust = $05 ; additionally scan lines +vdcr_lines = $06 ; card lines actually displayed +vdcr_vdisp = $06 +vdcr_vsync_pos = $07 ; card line to send vertical sync in +vdcr_interlace = $08 ; interlace mode +vdcr_cardheight = $09 ; 5b total, minus one +vdcr_crsr_start = $0a ; 2b mode, 5b scanline +vdcr_crsr_end = $0b ; 5b scanline +vdcr_display_hi = $0c ; RAM address of display buffer +vdcr_display_lo = $0d +vdcr_crsr_hi = $0e ; RAM address of cursor +vdcr_crsr_lo = $0f +vdcr_lp_y = $10 ; y position of light pen +vdcr_lp_x = $11 ; x position +vdcr_ram_hi = $12 ; RAM address of register $1f +vdcr_ram_lo = $13 +vdcr_attr_hi = $14 ; RAM address of attribute buffer +vdcr_attr_lo = $15 +vdcr_cardwidth_charwidth = $16; 4b total, 4b displayed +vdcr_charheight = $17 ; 5b displayed, minus one +vdcr_control_v = $18 ; vertical scroll and much other stuff +vdcr_control_h = $19 ; horizontal scroll and much other stuff +vdcr_color = $1a ; 4b foreground, 4b background +vdcr_row_inc = $1b ; Address increment per row +vdcr_charset = $1c ; 3b charset pointer, 1b RAM type, 4b unused +vdcr_underline = $1d ; 5b scanline +vdcr_cycles = $1e ; number of write- or copy-cycles. 0 means 256. +vdcr_access = $1f ; RAM content of address r$12/13 +vdcr_source_hi = $20 ; RAM address of cycle start +vdcr_source_lo = $21 +vdcr_enable_start = $22 ; column to enable display in +vdcr_enable_end = $23 ; column to disable display in +vdcr_dram_refresh = $24 ; RAM refresh rate +vdcr_sync_polarity = $25 ; only in type 2 VDCs diff --git a/ACME_Lib/cbm/c128/vic.a b/ACME_Lib/cbm/c128/vic.a new file mode 100644 index 0000000..820eb90 --- /dev/null +++ b/ACME_Lib/cbm/c128/vic.a @@ -0,0 +1,10 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_vic_a !eof +lib_cbm_c128_vic_a = 1 + +!source ; registers 0..2e + +; registers only present in the C128 variant of this chip: +vic_keyboard = $d02f +vic_clock = $d030 diff --git a/ACME_Lib/cbm/c128/zeropage.a b/ACME_Lib/cbm/c128/zeropage.a new file mode 100644 index 0000000..cb21565 --- /dev/null +++ b/ACME_Lib/cbm/c128/zeropage.a @@ -0,0 +1,608 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c128_zeropage_a !eof +lib_cbm_c128_zeropage_a = 1 + +; These labels and their values are given in the C128 manual. +; Label names were converted to lower case and prefixed by "z_", however. +; The following labels appear twice, only their first appearance is active: +; z_verck, given as $0c and $93 +; z_count, given as $0d and $a5 +; z_keysiz, given as $78 and $da +; z_keynum, given as $77 and $dc +; z_xcnt, given as $0110 and $0a80 +; z_hulp, given as $78 and $0aa0 +; z_keynxt, given as $dd and $1152 +; z_xsave , given as $0ab2 and $115d +; z_bitmsk, given as $da and $116d +; z_dejavu, given as $0a02 and $1221 + +z_d8502 = $00 +z_d6510 = $00 +z_r8502 = $01 +z_r6510 = $01 +z_bank = $02 +z_pc_hi = $03 +z_pc_lo = $04 +z_s_reg = $05 +z_a_reg = $06 +z_x_reg = $07 +z_y_reg = $08 +z_stkptr = $09 +z_integr = $09 +z_charac = $09 + ; labels from MONITOR + z_pcb = $02 + z_pch = $03 + z_pcl = $04 + z_flgs = $05 + z_acc = $06 + z_xr = $07 + z_yr = $08 + z_sp = $09 +z_endchr = $0a +z_trmpos = $0b +z_verck = $0c +z_count = $0d +z_dimflg = $0e +z_valtyp = $0f +z_intflg = $10 +z_garbfl = $11 +z_dores = $11 +z_subflg = $12 +z_inpflg = $13 +z_domask = $14 +z_tansgn = $14 +z_channl = $15 +z_poker = $15 +z_linnum = $16 +z_temppt = $18 +z_lastpt = $19 +z_tempst = $1b +z_index = $24 +z_index1 = $24 +z_index2 = $26 ; given as $24 in german manual, which is probably wrong +z_resho = $28 +z_resmoh = $29 +z_addend = $2a +z_resmo = $2a +z_reslo = $2b +z_txttab = $2d +z_vartab = $2f +z_arytab = $31 +z_strend = $33 +z_fretop = $35 +z_frespc = $37 +z_max_mem_1 = $39 +z_curlin = $3b +z_txtptr = $3d +z_form = $3f +z_fndpnt = $3f +z_datlin = $41 +z_datptr = $43 +z_inpptr = $45 +z_varnam = $47 +z_fdecpt = $49 +z_varpnt = $49 +z_lstpnt = $4b +z_andmsk = $4b +z_forpnt = $4b +z_eormsk = $4c +z_vartxt = $4d +z_opptr = $4d +z_opmask = $4f +z_grbpnt = $50 +z_tempf3 = $50 +z_defpnt = $50 +z_dscpnt = $52 +z_helper = $55 +z_jmper = $56 +z_oldov = $58 +z_tempf1 = $59 +z_arypnt = $5a +z_highds = $5a +z_hightr = $5c +z_tempf2 = $5e +z_deccnt = $5f +z_grbtop = $61 +z_dptflg = $61 +z_lowtr = $61 +z_expsgn = $62 +z_fac1 = $63 +z_degree = $69 +z_sgnflg = $69 +z_argexp = $6a +z_strng1 = $70 +z_arisgn = $70 +z_facov = $71 +z_strng2 = $72 +z_polypt = $72 +z_curtol = $72 +z_fbufpt = $72 +z_autinc = $74 +z_mvdflg = $76 +z_noze = $77 +z_sprnum = $77 +z_keynum = $77 +z_hulp = $78 +z_keysiz = $78 +z_syntmp = $79 +z_dsdesc = $7a +z_tos = $7d +z_runmod = $7f +z_parsts = $80 +z_point = $80 +z_parstx = $81 +z_oldstk = $82 +z_colsel = $83 +z_multicolor_1 = $84 +z_multicolor_2 = $85 +z_foreground = $86 +z_scale_x = $87 +z_scale_y = $89 +z_stopnb = $8b +z_grapnt = $8c +z_vtemp1 = $8e +z_vtemp2 = $8f +z_status = $90 +z_stkey = $91 +z_svxt = $92 +; z_verck = $93 ; already given as $0c ! +z_c3po = $94 +z_bsour = $95 +z_syno = $96 +z_xsav = $97 +z_ldtnd = $98 +z_dfltn = $99 +z_dflto = $9a +z_prty = $9b +z_dpsw = $9c +z_msgflg = $9d +z_ptr1 = $9e +z_t1 = $9e +z_ptr2 = $9f +z_t2 = $9f +z_time = $a0 +z_r2d2 = $a3 +z_pcntr = $a3 +z_bsour1 = $a4 +; z_count = $a5 ; already given as $0d ! +z_cntdn = $a5 +z_bufpt = $a6 +z_inbit = $a7 +z_bitci = $a8 +z_rinone = $a9 +z_ridata = $aa +z_riprty = $ab +z_sal = $ac +z_sah = $ad +z_eal = $ae +z_eah = $af +z_cmpo = $b0 +z_tape1 = $b2 +z_bitts = $b4 +z_nxtbit = $b5 +z_rodata = $b6 +z_fnlen = $b7 +z_la = $b8 +z_sa = $b9 +z_fa = $ba +z_fnadr = $bb +z_roprty = $bd +z_fsblk = $be +z_drive = $bf +z_cas1 = $c0 +z_stal = $c1 +z_stah = $c2 +z_memuss = $c3 +z_data = $c5 +z_ba = $c6 +z_fnbank = $c7 +z_ribuf = $c8 +z_robuf = $ca +z_keytab = $cc +z_imparm = $ce +z_ndx = $d0 +z_kyndx = $d1 +z_keyidx = $d2 +z_shflag = $d3 +z_sfdx = $d4 +z_lstx = $d5 +z_crsw = $d6 +z_mode = $d7 +z_graphm = $d8 +z_charen = $d9 +z_sedsal = $da +z_sedeal = $dc +z_sedt1 = $de +z_sedt2 = $df + +; z_keysiz = $da ; already given as $78 ! +z_keylen = $db +; z_keynum = $dc ; already given as $77 ! +z_keynxt = $dd +z_keybnk = $de +z_keytmp = $df + +z_bitmsk = $da +z_saver = $db + +z_pnt = $e0 +z_user = $e2 +z_scbot = $e4 +z_sctop = $e5 +z_sclf = $e6 +z_scrt = $e7 +z_lsxp = $e8 +z_lstp = $e9 +z_indx = $ea +z_tblx = $eb +z_pntr = $ec +z_lines = $ed +z_columns = $ee +z_datax = $ef +z_lstchr = $f0 +z_color = $f1 +z_tcolor = $f2 +z_rvs = $f3 +z_qtsw = $f4 +z_insrt = $f5 +z_insflg = $f6 +z_locks = $f7 +z_scroll = $f8 +z_beeper = $f9 +z_lofbuf = $ff +z_fbuffr = $0100 +z_xcnt = $0110 +z_dosf1l = $0111 +z_dosds1 = $0112 +z_dosf2l = $0113 +z_dosds2 = $0114 +z_dosf2a = $0115 +z_dosofl = $0117 +z_dosofh = $0119 +z_dosla = $011b +z_dosfa = $011c +z_dossa = $011d +z_dosrcl = $011e +z_dosbnk = $011f +z_dosdid = $0120 +z_didchk = $0122 +z_bnr = $0123 +z_enr = $0124 +z_dolr = $0125 +z_flag = $0126 +z_swe = $0127 +z_usgn = $0128 +z_uexp = $0129 +z_vn = $012a +z_chsn = $012b +z_vf = $012c +z_nf = $012d +z_posp = $012e +z_fesp = $012f +z_etof = $0130 +z_cform = $0131 +z_sno = $0132 +z_blfd = $0133 +z_begfd = $0134 +z_lfor = $0135 +z_endfd = $0136 +z_sysstk = $0137 +z_buf = $0200 + ; the following block is omitted in the german C128 manual + z_fetch = $02a2 + z_fetchvec = $02aa + z_stash = $02af + z_stavec = $02b9 + z_cmpare = $02c8 + z_cmpvec = $02c8 + z_jsrfar = $02cd + z_jmpfar = $02e3 +z_esc_fn_vec = $02fc +z_bnkvec = $02fe +z_ierror = $0300 +z_icrnch = $0304 +z_iqplop = $0306 +z_igone = $0308 +z_ieval = $030a +z_iesclk = $030c +z_iescpr = $030e +z_iescex = $0310 +z_itime = $0312 +z_iirq = $0314 +z_ibrk = $0316 +z_inmi = $0318 +z_iopen = $031a +z_iclose = $031c +z_ichkin = $031e +z_ichkout = $0320 +z_iclrch = $0322 +z_ibasin = $0324 +z_ibasout = $0326 +z_istop = $0328 +z_igetin = $032a +z_iclall = $032c +z_exmon = $032e +z_iload = $0330 +z_isave = $0332 + ; the following block is omitted in the german C128 manual + z_ctlvec = $0334 + z_shfvec = $0336 + z_escvec = $0338 + z_keyvec = $033a + z_keychk = $033c + z_decode = $033e + z_decode_shift = $0340 + z_decode_cbm = $0342 + z_decode_ctrl = $0344 + z_decode_alt = $0346 + z_decode_caps = $0348 + z_keyd = $034a + z_tabmap = $0354 + z_bitabl = $035e + z_lat = $0362 + z_fat = $036c + z_sat = $0376 + z_chrget = $0380 + z_chrgot = $0386 + z_qnum = $0390 +z_ind_sub_ram0 = $039f +z_ind_sub_ram1 = $03ab +z_indin1_ram1 = $03b7 +z_indin2 = $03c0 +z_indtxt = $03c9 +z_zero = $03d2 +z_current_bank = $03d5 +z_tmpdes = $03d6 +z_fin_bank = $03da +z_savsiz = $03db +z_bits = $03df +z_sprtmp_1 = $03e0 +z_sprtmp_2 = $03e1 +z_fg_bg = $03e2 +z_fg_mc1 = $03e3 +z_vicscn = $0400 +z_system = $0a00 +z_dejavu = $0a02 +z_palnts = $0a03 +z_init_status = $0a04 +z_memstr = $0a05 +z_memsiz = $0a07 +z_irqtmp = $0a09 +z_caston = $0a0b +z_kika26 = $0a0c +z_stupid = $0a0d +z_timout = $0a0e +z_enabl = $0a0f +z_m51ctr = $0a10 +z_m51cdr = $0a11 +z_m51ajb = $0a12 +z_rsstat = $0a14 +z_bitnum = $0a15 +z_baudof = $0a16 +z_ridbe = $0a18 +z_ridbs = $0a19 +z_rodbs = $0a1a +z_rodbe = $0a1b +z_serial = $0a1c +z_timer = $0a1d +z_xmax = $0a20 +z_pause = $0a21 +z_rptflg = $0a22 +z_kount = $0a23 +z_delay = $0a24 +z_lstshf = $0a25 +z_blnon = $0a26 +z_blnsw = $0a27 +z_blnct = $0a28 +z_gdbln = $0a29 +z_gdcol = $0a2a + +z_curmod = $0a2b +z_vm1 = $0a2c +z_vm2 = $0a2d +z_vm3 = $0a2e +z_vm4 = $0a2f +z_lintmp = $0a30 +z_sav80a = $0a31 +z_sav80b = $0a32 +z_curcol = $0a33 +z_split = $0a34 +z_fnadrx = $0a35 +z_palcnt = $0a36 +z_speed = $0a37 +z_sprites = $0a38 +z_blanking = $0a39 + ; the following block is omitted in the german C128 manual + z_hold_off = $0a3a + z_ldtbi_sa = $0a3b + z_clr_ea_lo = $0a3c + z_clr_ea_hi = $0a3d +; $a40 - $a5f: copy of data at $e0 - $ff of currently inactive screen +; $a60 - $a7f: ? +; z_xcnt = $0a80 ; already given as $0110 ! +; z_hulp = $0aa0 ; already given as $78 ! +z_format = $0aaa +z_length = $0aab +z_msal = $0aac +z_sxreg = $0aaf +z_syreg = $0ab0 +z_wrap = $0ab1 +z_xsave = $0ab2 +z_direction = $0ab3 +z_temps = $0ab4 +z_curbnk = $0ac0 +z_pat = $0ac1 +z_tbuffr = $0b00 +z_rs232i = $0c00 +z_rs232o = $0d00 + +z_pkybuf = $1000 +z_pkydef = $100a +z_dosstr = $1100 +z_vwork = $1131 +z_xypos = $1131 +z_xpos = $1131 +z_ypos = $1133 +z_xdest = $1135 +z_ydest = $1137 +z_xyabs = $1139 +z_xabs = $1139 +z_yabs = $113b +z_xysgn = $113d +z_xsgn = $113d +z_ysgn = $113f +z_fct = $1141 +z_errval = $1145 +z_lesser = $1147 +z_greatr = $1148 +z_angsgn = $1149 +z_sinval = $114a +z_cosval = $114c +z_angcnt = $114e +z_xcircl = $1150 +z_ycircl = $1152 +z_xradus = $1154 +z_yradus = $1156 +z_rotang = $1158 +z_angbeg = $115c +z_angend = $115e +z_xrcos = $1160 +z_yrsin = $1162 +z_xrsin = $1164 +z_yrcos = $1166 +z_xcentr = $1150 +z_ycentr = $1152 +z_xdist1 = $1154 +z_ydist1 = $1156 +z_xdist2 = $1158 +z_ydist2 = $115a +z_disend = $115c +z_colcnt = $115e +z_rowcnt = $115f +z_strcnt = $1160 +z_xcord1 = $1150 +z_ycord1 = $1152 +z_boxang = $1154 +z_xcount = $1156 +z_ycount = $1158 +z_bxleng = $115a +z_xcord2 = $115c +z_ycord2 = $115e +z_leylen = $1151 +; z_keynxt = $1152 ; already given as $dd ! +z_strsz = $1153 +z_gettyp = $1154 +z_strptr = $1155 +z_oldbyt = $1156 +z_newbyt = $1157 +z_xsize = $1159 +z_ysize = $115b +; z_xsave = $115d ; already given as $0ab2 ! +z_stradr = $115f +z_bitidx = $1161 +z_chrpag = $1168 +z_bitcnt = $1169 +z_scalem = $116a +z_width = $116b +z_filflg = $116c +; z_bitmsk = $116d ; already given as $da ! +z_numcnt = $116e +z_trcflg = $116f +z_renum_tmp_1 = $1170 +z_renum_tmp_2 = $1172 +z_t3 = $1174 +z_t4 = $1175 +z_vtemp3 = $1177 +z_vtemp4 = $1178 +z_vtemp5 = $1179 +z_adray1 = $117a +z_adray2 = $117c +z_sprite_data = $117e +z_vic_save = $11d6 + ; the following block is omitted in the german C128 manual + z_upper_lower = $11eb + z_upper_graphic = $11ec +z_oldlin = $1200 +z_oldtxt = $1202 +z_puchrs = $1204 +z_pufill = $1204 +z_pucoma = $1205 +z_pudot = $1206 +z_pumony = $1207 +z_errnum = $1208 +z_errlin = $1209 +z_trapno = $120b +z_tmptrp = $120d +z_errtxt = $120e +z_text_top = $1210 +z_max_mem_0 = $1212 +z_tmptxt = $1214 +z_tmplin = $1216 +z_usrpok = $1218 +z_rndx = $121b +z_circle_segment = $1220 +; z_dejavu = $1221 ; already given as $0a02 ! +z_tempo_rate = $1222 +z_voices = $1223 +z_ntime = $1229 +z_octave = $122b +z_sharp = $122c +z_pitch = $122d +z_voice = $122f +z_wave0 = $1230 +z_dnote = $1233 +z_fltsav = $1234 +z_fltflg = $1238 +z_nibble = $1239 +z_tonnum = $123a +z_tonval = $123b +z_parcnt = $123e +z_atktab = $123f +z_sustab = $1249 +z_wavtab = $1253 +z_pulslw = $125d +z_pulshi = $1267 +z_filters = $1271 +z_int_trip_flag = $1276 +z_int_adr_lo = $1279 +z_int_adr_hi = $127c +z_intval = $127f +z_coltyp = $1280 +z_sound_voice = $1281 +z_sound_time_lo = $1282 +z_sound_time_hi = $1285 +z_sound_max_lo = $1288 +z_sound_max_hi = $128b +z_sound_min_lo = $128e +z_sound_min_hi = $1291 +z_sound_direction = $1294 +z_sound_step_lo = $1297 +z_sound_step_hi = $129a +z_sound_freq_lo = $129d +z_sound_freq_hi = $12a0 +z_temp_time_lo = $12a3 +z_temp_time_hi = $12a4 +z_temp_max_lo = $12a5 +z_temp_max_hi = $12a6 +z_temp_min_lo = $12a7 +z_temp_min_hi = $12a8 +z_temp_direction = $12a9 +z_temp_step_lo = $12aa +z_temp_step_hi = $12ab +z_temp_freq_lo = $12ac +z_temp_freq_hi = $12ad +z_temp_pulse_lo = $12ae +z_temp_pulse_hi = $12af +z_temp_waveform = $12b0 +z_pot_temp_1 = $12b1 +z_pot_temp_2 = $12b2 +z_window_temp = $12b3 +z_savram = $12b7 +z_defmod = $12fa +z_lincnt = $12fb +z_sprite_number = $12fc + ; the following block is omitted in the german C128 manual + z_irq_wrap_flag = $12fd + z_rambot = $1c00 diff --git a/ACME_Lib/cbm/c64/basic.a b/ACME_Lib/cbm/c64/basic.a new file mode 100644 index 0000000..b211fdb --- /dev/null +++ b/ACME_Lib/cbm/c64/basic.a @@ -0,0 +1,6 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_basic_a !eof +lib_cbm_c64_basic_a = 1 + +!source diff --git a/ACME_Lib/cbm/c64/cia1.a b/ACME_Lib/cbm/c64/cia1.a new file mode 100644 index 0000000..438281b --- /dev/null +++ b/ACME_Lib/cbm/c64/cia1.a @@ -0,0 +1,21 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_cia1_a !eof +lib_cbm_c64_cia1_a = 1 + +cia1_pra = $dc00 +cia1_prb = $dc01 +cia1_ddra = $dc02 +cia1_ddrb = $dc03 +cia1_ta_lo = $dc04 +cia1_ta_hi = $dc05 +cia1_tb_lo = $dc06 +cia1_tb_hi = $dc07 +cia1_tod10ths = $dc08 +cia1_todsec = $dc09 +cia1_todmin = $dc0a +cia1_todhr = $dc0b +cia1_sdr = $dc0c +cia1_icr = $dc0d +cia1_cra = $dc0e +cia1_crb = $dc0f diff --git a/ACME_Lib/cbm/c64/cia2.a b/ACME_Lib/cbm/c64/cia2.a new file mode 100644 index 0000000..8fa4390 --- /dev/null +++ b/ACME_Lib/cbm/c64/cia2.a @@ -0,0 +1,21 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_cia2_a !eof +lib_cbm_c64_cia2_a = 1 + +cia2_pra = $dd00 +cia2_prb = $dd01 +cia2_ddra = $dd02 +cia2_ddrb = $dd03 +cia2_ta_lo = $dd04 +cia2_ta_hi = $dd05 +cia2_tb_lo = $dd06 +cia2_tb_hi = $dd07 +cia2_tod10ths = $dd08 +cia2_todsec = $dd09 +cia2_todmin = $dd0a +cia2_todhr = $dd0b +cia2_sdr = $dd0c +cia2_icr = $dd0d +cia2_cra = $dd0e +cia2_crb = $dd0f diff --git a/ACME_Lib/cbm/c64/kernel.a b/ACME_Lib/cbm/c64/kernel.a new file mode 100644 index 0000000..e4ad9e0 --- /dev/null +++ b/ACME_Lib/cbm/c64/kernel.a @@ -0,0 +1,9 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_kernel_a !eof +lib_cbm_c64_kernel_a = 1 + +!source ; from $ff81 through $fff5 + +; $fff6 through $fff9 are developers' initials ("RRBY") +; $fffa through $ffff are cpu hardware vectors (see <6502/std.a>) diff --git a/ACME_Lib/cbm/c64/petscii.a b/ACME_Lib/cbm/c64/petscii.a new file mode 100644 index 0000000..da493f1 --- /dev/null +++ b/ACME_Lib/cbm/c64/petscii.a @@ -0,0 +1,36 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_petscii_a !eof +lib_cbm_c64_petscii_a = 1 + +!source + +; color codes +petscii_BLACK = 144 +petscii_WHITE = 5 +petscii_RED = 28 +petscii_CYAN = 159 +petscii_PURPLE = 156 +petscii_GREEN = 30 +petscii_BLUE = 31 +petscii_YELLOW = 158 +petscii_ORANGE = 129 +petscii_BROWN = 149 +petscii_LRED = 150 +petscii_GRAY1 = 151 +petscii_GRAY2 = 152 +petscii_LGREEN = 153 +petscii_LBUE = 154 +petscii_GRAY3 = 155 + +; switching character set +petscii_LOCK = 8 ; forbid CBM-shift (C128 uses 11) +petscii_UNLOCK = 9 ; allow CBM-shift (C128 uses 12) +petscii_LOWERCASE = 14 ; switch to lowercase/uppercase character set +petscii_UPPERCASE = 142 ; switch to uppercase/graphics character set + +; function keys +petscii_F1 = 133: petscii_F2 = 137 +petscii_F3 = 134: petscii_F4 = 138 +petscii_F5 = 135: petscii_F6 = 139 +petscii_F7 = 136: petscii_F8 = 140 diff --git a/ACME_Lib/cbm/c64/sid.a b/ACME_Lib/cbm/c64/sid.a new file mode 100644 index 0000000..09406c1 --- /dev/null +++ b/ACME_Lib/cbm/c64/sid.a @@ -0,0 +1,52 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_sid_a !eof +lib_cbm_c64_sid_a = 1 + +; write-only registers: +; voice 1: +sid_v1_freq_lo = $d400 +sid_v1_freq_hi = $d401 +sid_v1_width_lo = $d402 +sid_v1_width_hi = $d403 +sid_v1_control = $d404 ; see below for bits +sid_v1_attack_decay = $d405 ; hi-nibble: attack length, low-nibble: decay length +sid_v1_sustain_release = $d406 ; hi-nibble: sustain volumne, low-nibble: release length +; voice 2: +sid_v2_freq_lo = $d407 +sid_v2_freq_hi = $d408 +sid_v2_width_lo = $d409 +sid_v2_width_hi = $d40a +sid_v2_control = $d40b ; see below for bits +sid_v2_attack_decay = $d40c ; hi-nibble: attack length, low-nibble: decay length +sid_v2_sustain_release = $d40d ; hi-nibble: sustain volumne, low-nibble: release length +; voice 3: +sid_v3_freq_lo = $d40e +sid_v3_freq_hi = $d40f +sid_v3_width_lo = $d410 +sid_v3_width_hi = $d411 +sid_v3_control = $d412 ; see below for bits +sid_v3_attack_decay = $d413 ; hi-nibble: attack length, low-nibble: decay length +sid_v3_sustain_release = $d414 ; hi-nibble: sustain volumne, low-nibble: release length +; voice control bits: + sid_VOICECONTROL_NOISE = %#....... + sid_VOICECONTROL_RECTANGLE = %.#...... + sid_VOICECONTROL_SAWTOOTH = %..#..... + sid_VOICECONTROL_TRIANGLE = %...#.... + sid_VOICECONTROL_DISABLE_RESET = %....#... ; 1 = disable voice, reset noise generator + sid_VOICECONTROL_RINGMODULATION = %.....#.. + sid_VOICECONTROL_SYNC = %......#. + sid_VOICECONTROL_ON = %.......# ; 0 = release, 1 = attack/sustain/decay +; registers shared by all voices: +sid_filter_cutoff_lo = $d415 ; only bits 0/1/2! +sid_filter_cutoff_hi = $d416 +sid_filter_control = $d417 ; hi-nibble: resonance, lo-nibble: filter ext/v3/v2/v1 +sid_filter_volume = $d418 ; hi-nibble: filter mode (disable v3, high, band, low), lo-nibble: volume +; read-only registers: +sid_potx = $d419 +sid_poty = $d41a +sid_v3_waveform_output = $d41b +sid_v3_adsr_output = $d41c + +; Do not use the shadow copies of these registers at $d500, $d600 or $d700, +; on a C128 they do not exist! diff --git a/ACME_Lib/cbm/c64/vic.a b/ACME_Lib/cbm/c64/vic.a new file mode 100644 index 0000000..9b60e40 --- /dev/null +++ b/ACME_Lib/cbm/c64/vic.a @@ -0,0 +1,78 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c64_vic_a !eof +lib_cbm_c64_vic_a = 1 + +; color codes +viccolor_BLACK = $0 +viccolor_WHITE = $1 +viccolor_RED = $2 +viccolor_CYAN = $3 +viccolor_PURPLE = $4 +viccolor_GREEN = $5 +viccolor_BLUE = $6 +viccolor_YELLOW = $7 +viccolor_ORANGE = $8 +viccolor_BROWN = $9 +viccolor_LRED = $a +viccolor_GRAY1 = $b +viccolor_GRAY2 = $c +viccolor_LGREEN = $d +viccolor_LBLUE = $e +viccolor_GRAY3 = $f + +; register addresses +vic_xs0 = $d000 +vic_ys0 = $d001 +vic_xs1 = $d002 +vic_ys1 = $d003 +vic_xs2 = $d004 +vic_ys2 = $d005 +vic_xs3 = $d006 +vic_ys3 = $d007 +vic_xs4 = $d008 +vic_ys4 = $d009 +vic_xs5 = $d00a +vic_ys5 = $d00b +vic_xs6 = $d00c +vic_ys6 = $d00d +vic_xs7 = $d00e +vic_ys7 = $d00f +vic_msb_xs = $d010 +vic_controlv = $d011 ; vertical control (and much other stuff) +vic_line = $d012 ; raster line +vic_xlp = $d013 ; light pen coordinates +vic_ylp = $d014 +vic_sactive = $d015 ; sprites: active +vic_controlh = $d016 ; horizontal control (and much other stuff) +vic_sdy = $d017 ; sprites: double height +vic_ram = $d018 ; RAM pointer +vic_irq = $d019 +vic_irqmask = $d01a +vic_sback = $d01b ; sprites: background mode +vic_smc = $d01c ; sprites: multi color mode +vic_sdx = $d01d ; sprites: double width +vic_ss_collided = $d01e ; sprite-sprite collision detect +vic_sd_collided = $d01f ; sprite-data collision detect + +; color registers +vic_cborder = $d020 ; border color +vic_cbg = $d021 ; general background color +vic_cbg0 = $d021 +vic_cbg1 = $d022 ; background color 1 (for EBC and MC text mode) +vic_cbg2 = $d023 ; background color 2 (for EBC and MC text mode) +vic_cbg3 = $d024 ; background color 3 (for EBC mode) +vic_sc01 = $d025 ; sprite color for MC-bitpattern %01 +vic_sc11 = $d026 ; sprite color for MC-bitpattern %11 +vic_cs0 = $d027 ; sprite colors +vic_cs1 = $d028 +vic_cs2 = $d029 +vic_cs3 = $d02a +vic_cs4 = $d02b +vic_cs5 = $d02c +vic_cs6 = $d02d +vic_cs7 = $d02e + +; See for the C128's two additional registers at $d02f/$d030. +; They are accessible even in C64 mode and $d030 can garble the video output, +; so be careful not to write to it accidentally in a C64 program! diff --git a/ACME_Lib/cbm/c65/basic.a b/ACME_Lib/cbm/c65/basic.a new file mode 100644 index 0000000..eb0188d --- /dev/null +++ b/ACME_Lib/cbm/c65/basic.a @@ -0,0 +1,6 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_c65_basic_a !eof +lib_cbm_c65_basic_a = 1 + +!source diff --git a/ACME_Lib/cbm/kernel.a b/ACME_Lib/cbm/kernel.a new file mode 100644 index 0000000..4134a09 --- /dev/null +++ b/ACME_Lib/cbm/kernel.a @@ -0,0 +1,48 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_kernel_a !eof +lib_cbm_kernel_a = 1 + +; Taken from the web. +; Sorry, I can't give credit because I don't have the URL anymore. +; There are alternative names for some calls. + +k_cint = $ff81 +k_ioinit = $ff84 +k_ramtas = $ff87 +k_restor = $ff8a +k_vector = $ff8d +k_setmsg = $ff90 +k_secnd = $ff93 +k_tksa = $ff96 +k_memtop = $ff99 +k_membot = $ff9c +k_key = $ff9f +k_settmo = $ffa2 +k_iecin = $ffa5:k_acptr = $ffa5 +k_iecout = $ffa8:k_ciout = $ffa8 +k_untalk = $ffab:k_untlk = $ffab +k_unlisten = $ffae:k_unlsn = $ffae +k_listen = $ffb1:k_listn = $ffb1 +k_talk = $ffb4 +k_readss = $ffb7 +k_setlfs = $ffba +k_setnam = $ffbd ; A is length, X is ptr-low, Y is ptr-high +k_open = $ffc0 +k_close = $ffc3:k_close_A = $ffc3 +k_chkin = $ffc6:k_chkin_X = $ffc6 +k_chkout = $ffc9:k_chkout_X = $ffc9:k_ckout = $ffc9 +k_clrchn = $ffcc:k_clrch = $ffcc +k_chrin = $ffcf:k_basin = $ffcf +k_chrout = $ffd2:k_basout = $ffd2:k_bsout = $ffd2 +k_load = $ffd5:k_load_AXY = $ffd5 ; A means verify, YYXX is desired load address (if channel == 0), returns end+1 in YYXX +k_save = $ffd8:k_save_AXY = $ffd8 ; A is zp address of start ptr(!), YYXX is end address (+1) +k_settim = $ffdb +k_rdtim = $ffde +k_stop = $ffe1 +k_getin = $ffe4:k_get = $ffe4 +k_clall = $ffe7 +k_udtim = $ffea +k_scrorg = $ffed +k_plot = $fff0 ; get/set cursor (to set, clear carry) +k_iobase = $fff3 diff --git a/ACME_Lib/cbm/petscii.a b/ACME_Lib/cbm/petscii.a new file mode 100644 index 0000000..4a70476 --- /dev/null +++ b/ACME_Lib/cbm/petscii.a @@ -0,0 +1,22 @@ +;ACME 0.94.4 + +!ifdef lib_cbm_petscii_a !eof +lib_cbm_petscii_a = 1 + +; cursor movements +petscii_UP = 145 +petscii_DOWN = 17 +petscii_LEFT = 157 +petscii_RIGHT = 29 + +; other control codes +petscii_STOP = 3 +petscii_CR = 13 ; carriage return +petscii_CS = 141 ; carriage return, shifted +petscii_REVSON = 18 +petscii_REVSOFF = 146 +petscii_HOME = 19 +petscii_CLEAR = 147 +petscii_DEL = 20: petscii_BACKSPACE = 20 +petscii_INST = 148: petscii_INSERT = 148 +petscii_SHIFTSPACE = 160