mirror of
https://github.com/Pecusx/scorch_src.git
synced 2026-05-20 22:33:43 +02:00
Prepare for C64 port
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
vic_spr0_x = $D000
|
||||
vic_spr0_y = $D001
|
||||
vic_spr1_x = $D002
|
||||
vic_spr1_y = $D003
|
||||
vic_spr2_x = $D004
|
||||
vic_spr2_y = $D005
|
||||
vic_spr3_x = $D006
|
||||
vic_spr3_y = $D007
|
||||
vic_spr4_x = $D008
|
||||
vic_spr4_y = $D009
|
||||
vic_spr5_x = $D00A
|
||||
vic_spr5_y = $D00B
|
||||
vic_spr6_x = $D00C
|
||||
vic_spr6_y = $D00D
|
||||
vic_spr7_x = $D00E
|
||||
vic_spr7_y = $D00F
|
||||
vic_spr_hi_x = $D010
|
||||
vic_cr1 = $D011
|
||||
vic_raster = $D012
|
||||
vic_lp_x = $D013
|
||||
vic_lp_y = $D014
|
||||
vic_spr_ena = $D015
|
||||
vic_cr2 = $D016
|
||||
vic_spr_exp_y = $D017
|
||||
vic_mem = $D018
|
||||
vic_irq = $D019
|
||||
vic_irq_ena = $D01A
|
||||
vic_spr_dp = $D01B
|
||||
vic_spr_mcolor = $D01C
|
||||
vic_spr_exp_x = $D01D
|
||||
vic_spr_ss_col = $D01E
|
||||
vic_spr_sd_col = $D01F
|
||||
vic_border = $D020
|
||||
vic_bg_color0 = $D021
|
||||
vic_bg_color1 = $D022
|
||||
vic_bg_color2 = $D023
|
||||
vic_bg_color3 = $D024
|
||||
vic_spr_color1 = $D025
|
||||
vic_spr_color2 = $D026
|
||||
vic_spr0_color = $D027
|
||||
vic_spr1_color = $D028
|
||||
vic_spr2_color = $D029
|
||||
vic_spr3_color = $D02A
|
||||
vic_spr4_color = $D02B
|
||||
vic_spr5_color = $D02C
|
||||
vic_spr6_color = $D02D
|
||||
vic_spr7_color = $D02E
|
||||
@@ -0,0 +1,213 @@
|
||||
|
||||
|
||||
|
||||
.macro basic_start(addr)
|
||||
|
||||
.word upstartEnd // link address
|
||||
.word 10 // line num
|
||||
.byte $9e // sys
|
||||
|
||||
?a=0
|
||||
?b=0
|
||||
?c=0
|
||||
?d=0
|
||||
?e=0
|
||||
|
||||
?v = %%addr
|
||||
|
||||
ift ?v>=10000
|
||||
?a=?v/10000
|
||||
?v=?v-(?a*10000)
|
||||
eif
|
||||
|
||||
ift ?v>=1000
|
||||
?b=?v/1000
|
||||
?v=?v-(?b*1000)
|
||||
eif
|
||||
|
||||
ift ?v>=100
|
||||
?c=?v/100
|
||||
?v=?v-(?c*100)
|
||||
eif
|
||||
|
||||
ift ?v>=10
|
||||
?d=?v/10
|
||||
?v=?v-(?d*10)
|
||||
eif
|
||||
|
||||
?e=?v%10
|
||||
|
||||
dta ?a+$30,?b+$30,?c+$30,?d+$30,?e+$30
|
||||
|
||||
.byte 0
|
||||
upstartEnd
|
||||
.word 0 // empty link signals the end of the program
|
||||
|
||||
.endm
|
||||
|
||||
|
||||
//
|
||||
// Switch bank in VIC-II
|
||||
//
|
||||
// Args:
|
||||
// bank: bank number to switch to. Valid values: 0-3.
|
||||
//
|
||||
.macro SwitchVICBank(bank)
|
||||
//
|
||||
// The VIC-II chip can only access 16K bytes at a time. In order to
|
||||
// have it access all of the 64K available, we have to tell it to look
|
||||
// at one of four banks.
|
||||
//
|
||||
// This is controller by bits 0 and 1 in $dd00 (PORT A of CIA #2).
|
||||
//
|
||||
// +------+-------+----------+-------------------------------------+
|
||||
// | BITS | BANK | STARTING | VIC-II CHIP RANGE |
|
||||
// | | | LOCATION | |
|
||||
// +------+-------+----------+-------------------------------------+
|
||||
// | 00 | 3 | 49152 | ($C000-$FFFF)* |
|
||||
// | 01 | 2 | 32768 | ($8000-$BFFF) |
|
||||
// | 10 | 1 | 16384 | ($4000-$7FFF)* |
|
||||
// | 11 | 0 | 0 | ($0000-$3FFF) (DEFAULT VALUE) |
|
||||
// +------+-------+----------+-------------------------------------+
|
||||
?bits=%11
|
||||
|
||||
ift (%%bank==0)
|
||||
?bits=%11
|
||||
eli (%%bank==1)
|
||||
?bits=%10
|
||||
eli (%%bank==2)
|
||||
?bits=%01
|
||||
eli (%%bank==3)
|
||||
?bits=%00
|
||||
eif
|
||||
|
||||
//
|
||||
// Set Data Direction for CIA #2, Port A to output
|
||||
//
|
||||
lda $dd02
|
||||
and #%11111100 // Mask the bits we're interested in.
|
||||
ora #$03 // Set bits 0 and 1.
|
||||
sta $dd02
|
||||
|
||||
//
|
||||
// Tell VIC-II to switch to bank
|
||||
//
|
||||
lda $dd00
|
||||
and #%11111100
|
||||
ora #?bits
|
||||
sta $dd00
|
||||
.endm
|
||||
|
||||
|
||||
//
|
||||
// Enter hires bitmap mode (a.k.a. standard bitmap mode)
|
||||
//
|
||||
.macro SetHiresBitmapMode
|
||||
//
|
||||
// Clear extended color mode (bit 6) and set bitmap mode (bit 5)
|
||||
//
|
||||
lda $d011
|
||||
and #%10111111
|
||||
ora #%00100000
|
||||
sta $d011
|
||||
|
||||
//
|
||||
// Clear multi color mode (bit 4)
|
||||
//
|
||||
lda $d016
|
||||
and #%11101111
|
||||
sta $d016
|
||||
.endm
|
||||
|
||||
|
||||
//
|
||||
// Enter hires bitmap mode (a.k.a. standard bitmap mode)
|
||||
//
|
||||
.macro SetMulticolorBitmapMode
|
||||
//
|
||||
// Clear extended color mode (bit 6) and set bitmap mode (bit 5)
|
||||
//
|
||||
lda $d011
|
||||
and #%10111111
|
||||
ora #%00100000
|
||||
sta $d011
|
||||
|
||||
//
|
||||
// Clear multi color mode (bit 4)
|
||||
//
|
||||
lda $d016
|
||||
ora #%00010000
|
||||
sta $d016
|
||||
.endm
|
||||
|
||||
|
||||
//
|
||||
// Switch location of screen memory.
|
||||
//
|
||||
// Args:
|
||||
// address: Address relative to current VIC-II bank base address.
|
||||
// Valid values: $0000-$3c00. Must be a multiple of $0400.
|
||||
//
|
||||
.macro SetScreenMemory(address)
|
||||
//
|
||||
// The most significant nibble of $D018 selects where the screen is
|
||||
// located in the current VIC-II bank.
|
||||
//
|
||||
// +------------+-----------------------------+
|
||||
// | | LOCATION* |
|
||||
// | BITS +---------+-------------------+
|
||||
// | | DECIMAL | HEX |
|
||||
// +------------+---------+-------------------+
|
||||
// | 0000XXXX | 0 | $0000 |
|
||||
// | 0001XXXX | 1024 | $0400 (DEFAULT) |
|
||||
// | 0010XXXX | 2048 | $0800 |
|
||||
// | 0011XXXX | 3072 | $0C00 |
|
||||
// | 0100XXXX | 4096 | $1000 |
|
||||
// | 0101XXXX | 5120 | $1400 |
|
||||
// | 0110XXXX | 6144 | $1800 |
|
||||
// | 0111XXXX | 7168 | $1C00 |
|
||||
// | 1000XXXX | 8192 | $2000 |
|
||||
// | 1001XXXX | 9216 | $2400 |
|
||||
// | 1010XXXX | 10240 | $2800 |
|
||||
// | 1011XXXX | 11264 | $2C00 |
|
||||
// | 1100XXXX | 12288 | $3000 |
|
||||
// | 1101XXXX | 13312 | $3400 |
|
||||
// | 1110XXXX | 14336 | $3800 |
|
||||
// | 1111XXXX | 15360 | $3C00 |
|
||||
// +------------+---------+-------------------+
|
||||
//
|
||||
?bits = (%%address / $0400) << 4
|
||||
|
||||
lda $d018
|
||||
and #%00001111
|
||||
ora #?bits
|
||||
sta $d018
|
||||
.endm
|
||||
|
||||
|
||||
//
|
||||
// Set location of bitmap.
|
||||
//
|
||||
// Args:
|
||||
// address: Address relative to VIC-II bank address.
|
||||
// Valid values: $0000 (bitmap at $0000-$1FFF)
|
||||
// $2000 (bitmap at $2000-$3FFF)
|
||||
//
|
||||
.macro SetBitmapAddress(address)
|
||||
//
|
||||
// In standard bitmap mode the location of the bitmap area can
|
||||
// be set to either BANK address + $0000 or BANK address + $2000
|
||||
//
|
||||
// By setting bit 3, we can configure which of the locations to use.
|
||||
//
|
||||
|
||||
lda $d018
|
||||
|
||||
ift %%address == $0000
|
||||
and #%11110111
|
||||
eli %%address == $2000
|
||||
ora #%00001000
|
||||
eif
|
||||
|
||||
sta $d018
|
||||
.end
|
||||
Reference in New Issue
Block a user