remove bug and cc65 old code

This commit is contained in:
nino-porcino 2021-12-16 18:31:12 +01:00
parent 2b0de4c0b1
commit 66ea547a3d
8 changed files with 0 additions and 1527 deletions

View File

@ -1,28 +0,0 @@
#pragma zp_reserve(0,1,2)
volatile word tick_counts;
__interrupt(hardware_all) void interrupt_handler() {
tick_counts++;
}
void install_interrupt() {
*((word *)0x0001) = (word) &interrupt_handler;
}
void main() {
// make some use of "tick_counts"
*((word *)0x0001) = tick_counts;
install_interrupt();
}
/*
const byte *VDP_DATA = 0xA000; // TMS9918 data port (VRAM)
#define TMS_READ_DATA (*VDP_DATA);
void main() {
byte x = TMS_READ_DATA();
*((byte *)0xFFFF) = x;
}
*/

View File

@ -1,4 +0,0 @@
cl65 -D APPLE1 --target none --start-addr $4000 -O test.c -o test_apple1.prg
cl65 --listing test.lst -D VIC20 --target vic20 -O test.c -o test_vic20.prg

View File

@ -1,262 +0,0 @@
// modified CC65 charmap to allow pure ASCII on VIC20
#pragma warn (remap-zero, push, off)
#pragma charmap (0x00, 0x00)
#pragma charmap (0x01, 0x01)
#pragma charmap (0x02, 0x02)
#pragma charmap (0x03, 0x03)
#pragma charmap (0x04, 0x04)
#pragma charmap (0x05, 0x05)
#pragma charmap (0x06, 0x06)
#pragma charmap (0x07, 0x07)
#pragma charmap (0x08, 0x08)
#pragma charmap (0x09, 0x09)
#pragma charmap (0x0A, 0x0A)
#pragma charmap (0x0B, 0x0B)
#pragma charmap (0x0C, 0x0C)
#pragma charmap (0x0D, 0x0D)
#pragma charmap (0x0E, 0x0E)
#pragma charmap (0x0F, 0x0F)
#pragma charmap (0x10, 0x10)
#pragma charmap (0x11, 0x11)
#pragma charmap (0x12, 0x12)
#pragma charmap (0x13, 0x13)
#pragma charmap (0x14, 0x14)
#pragma charmap (0x15, 0x15)
#pragma charmap (0x16, 0x16)
#pragma charmap (0x17, 0x17)
#pragma charmap (0x18, 0x18)
#pragma charmap (0x19, 0x19)
#pragma charmap (0x1A, 0x1A)
#pragma charmap (0x1B, 0x1B)
#pragma charmap (0x1C, 0x1C)
#pragma charmap (0x1D, 0x1D)
#pragma charmap (0x1E, 0x1E)
#pragma charmap (0x1F, 0x1F)
#pragma charmap (0x20, 0x20)
#pragma charmap (0x21, 0x21)
#pragma charmap (0x22, 0x22)
#pragma charmap (0x23, 0x23)
#pragma charmap (0x24, 0x24)
#pragma charmap (0x25, 0x25)
#pragma charmap (0x26, 0x26)
#pragma charmap (0x27, 0x27)
#pragma charmap (0x28, 0x28)
#pragma charmap (0x29, 0x29)
#pragma charmap (0x2A, 0x2A)
#pragma charmap (0x2B, 0x2B)
#pragma charmap (0x2C, 0x2C)
#pragma charmap (0x2D, 0x2D)
#pragma charmap (0x2E, 0x2E)
#pragma charmap (0x2F, 0x2F)
#pragma charmap (0x30, 0x30)
#pragma charmap (0x31, 0x31)
#pragma charmap (0x32, 0x32)
#pragma charmap (0x33, 0x33)
#pragma charmap (0x34, 0x34)
#pragma charmap (0x35, 0x35)
#pragma charmap (0x36, 0x36)
#pragma charmap (0x37, 0x37)
#pragma charmap (0x38, 0x38)
#pragma charmap (0x39, 0x39)
#pragma charmap (0x3A, 0x3A)
#pragma charmap (0x3B, 0x3B)
#pragma charmap (0x3C, 0x3C)
#pragma charmap (0x3D, 0x3D)
#pragma charmap (0x3E, 0x3E)
#pragma charmap (0x3F, 0x3F)
#pragma charmap (0x40, 0x40)
#pragma charmap (0x41, 0x41)
#pragma charmap (0x42, 0x42)
#pragma charmap (0x43, 0x43)
#pragma charmap (0x44, 0x44)
#pragma charmap (0x45, 0x45)
#pragma charmap (0x46, 0x46)
#pragma charmap (0x47, 0x47)
#pragma charmap (0x48, 0x48)
#pragma charmap (0x49, 0x49)
#pragma charmap (0x4A, 0x4A)
#pragma charmap (0x4B, 0x4B)
#pragma charmap (0x4C, 0x4C)
#pragma charmap (0x4D, 0x4D)
#pragma charmap (0x4E, 0x4E)
#pragma charmap (0x4F, 0x4F)
#pragma charmap (0x50, 0x50)
#pragma charmap (0x51, 0x51)
#pragma charmap (0x52, 0x52)
#pragma charmap (0x53, 0x53)
#pragma charmap (0x54, 0x54)
#pragma charmap (0x55, 0x55)
#pragma charmap (0x56, 0x56)
#pragma charmap (0x57, 0x57)
#pragma charmap (0x58, 0x58)
#pragma charmap (0x59, 0x59)
#pragma charmap (0x5A, 0x5A)
#pragma charmap (0x5B, 0x5B)
#pragma charmap (0x5C, 0x5C)
#pragma charmap (0x5D, 0x5D)
#pragma charmap (0x5E, 0x5E)
#pragma charmap (0x5F, 0x5F)
#pragma charmap (0x60, 0x60)
#pragma charmap (0x61, 0x61)
#pragma charmap (0x62, 0x62)
#pragma charmap (0x63, 0x63)
#pragma charmap (0x64, 0x64)
#pragma charmap (0x65, 0x65)
#pragma charmap (0x66, 0x66)
#pragma charmap (0x67, 0x67)
#pragma charmap (0x68, 0x68)
#pragma charmap (0x69, 0x69)
#pragma charmap (0x6A, 0x6A)
#pragma charmap (0x6B, 0x6B)
#pragma charmap (0x6C, 0x6C)
#pragma charmap (0x6D, 0x6D)
#pragma charmap (0x6E, 0x6E)
#pragma charmap (0x6F, 0x6F)
#pragma charmap (0x70, 0x70)
#pragma charmap (0x71, 0x71)
#pragma charmap (0x72, 0x72)
#pragma charmap (0x73, 0x73)
#pragma charmap (0x74, 0x74)
#pragma charmap (0x75, 0x75)
#pragma charmap (0x76, 0x76)
#pragma charmap (0x77, 0x77)
#pragma charmap (0x78, 0x78)
#pragma charmap (0x79, 0x79)
#pragma charmap (0x7A, 0x7A)
#pragma charmap (0x7B, 0x7B)
#pragma charmap (0x7C, 0x7C)
#pragma charmap (0x7D, 0x7D)
#pragma charmap (0x7E, 0x7E)
#pragma charmap (0x7F, 0x7F)
#pragma charmap (0x80, 0x80)
#pragma charmap (0x81, 0x81)
#pragma charmap (0x82, 0x82)
#pragma charmap (0x83, 0x83)
#pragma charmap (0x84, 0x84)
#pragma charmap (0x85, 0x85)
#pragma charmap (0x86, 0x86)
#pragma charmap (0x87, 0x87)
#pragma charmap (0x88, 0x88)
#pragma charmap (0x89, 0x89)
#pragma charmap (0x8A, 0x8A)
#pragma charmap (0x8B, 0x8B)
#pragma charmap (0x8C, 0x8C)
#pragma charmap (0x8D, 0x8D)
#pragma charmap (0x8E, 0x8E)
#pragma charmap (0x8F, 0x8F)
#pragma charmap (0x90, 0x90)
#pragma charmap (0x91, 0x91)
#pragma charmap (0x92, 0x92)
#pragma charmap (0x93, 0x93)
#pragma charmap (0x94, 0x94)
#pragma charmap (0x95, 0x95)
#pragma charmap (0x96, 0x96)
#pragma charmap (0x97, 0x97)
#pragma charmap (0x98, 0x98)
#pragma charmap (0x99, 0x99)
#pragma charmap (0x9A, 0x9A)
#pragma charmap (0x9B, 0x9B)
#pragma charmap (0x9C, 0x9C)
#pragma charmap (0x9D, 0x9D)
#pragma charmap (0x9E, 0x9E)
#pragma charmap (0x9F, 0x9F)
#pragma charmap (0xA0, 0xA0)
#pragma charmap (0xA1, 0xA1)
#pragma charmap (0xA2, 0xA2)
#pragma charmap (0xA3, 0xA3)
#pragma charmap (0xA4, 0xA4)
#pragma charmap (0xA5, 0xA5)
#pragma charmap (0xA6, 0xA6)
#pragma charmap (0xA7, 0xA7)
#pragma charmap (0xA8, 0xA8)
#pragma charmap (0xA9, 0xA9)
#pragma charmap (0xAA, 0xAA)
#pragma charmap (0xAB, 0xAB)
#pragma charmap (0xAC, 0xAC)
#pragma charmap (0xAD, 0xAD)
#pragma charmap (0xAE, 0xAE)
#pragma charmap (0xAF, 0xAF)
#pragma charmap (0xB0, 0xB0)
#pragma charmap (0xB1, 0xB1)
#pragma charmap (0xB2, 0xB2)
#pragma charmap (0xB3, 0xB3)
#pragma charmap (0xB4, 0xB4)
#pragma charmap (0xB5, 0xB5)
#pragma charmap (0xB6, 0xB6)
#pragma charmap (0xB7, 0xB7)
#pragma charmap (0xB8, 0xB8)
#pragma charmap (0xB9, 0xB9)
#pragma charmap (0xBA, 0xBA)
#pragma charmap (0xBB, 0xBB)
#pragma charmap (0xBC, 0xBC)
#pragma charmap (0xBD, 0xBD)
#pragma charmap (0xBE, 0xBE)
#pragma charmap (0xBF, 0xBF)
#pragma charmap (0xC0, 0xC0)
#pragma charmap (0xC1, 0xC1)
#pragma charmap (0xC2, 0xC2)
#pragma charmap (0xC3, 0xC3)
#pragma charmap (0xC4, 0xC4)
#pragma charmap (0xC5, 0xC5)
#pragma charmap (0xC6, 0xC6)
#pragma charmap (0xC7, 0xC7)
#pragma charmap (0xC8, 0xC8)
#pragma charmap (0xC9, 0xC9)
#pragma charmap (0xCA, 0xCA)
#pragma charmap (0xCB, 0xCB)
#pragma charmap (0xCC, 0xCC)
#pragma charmap (0xCD, 0xCD)
#pragma charmap (0xCE, 0xCE)
#pragma charmap (0xCF, 0xCF)
#pragma charmap (0xD0, 0xD0)
#pragma charmap (0xD1, 0xD1)
#pragma charmap (0xD2, 0xD2)
#pragma charmap (0xD3, 0xD3)
#pragma charmap (0xD4, 0xD4)
#pragma charmap (0xD5, 0xD5)
#pragma charmap (0xD6, 0xD6)
#pragma charmap (0xD7, 0xD7)
#pragma charmap (0xD8, 0xD8)
#pragma charmap (0xD9, 0xD9)
#pragma charmap (0xDA, 0xDA)
#pragma charmap (0xDB, 0xDB)
#pragma charmap (0xDC, 0xDC)
#pragma charmap (0xDD, 0xDD)
#pragma charmap (0xDE, 0xDE)
#pragma charmap (0xDF, 0xDF)
#pragma charmap (0xE0, 0xE0)
#pragma charmap (0xE1, 0xE1)
#pragma charmap (0xE2, 0xE2)
#pragma charmap (0xE3, 0xE3)
#pragma charmap (0xE4, 0xE4)
#pragma charmap (0xE5, 0xE5)
#pragma charmap (0xE6, 0xE6)
#pragma charmap (0xE7, 0xE7)
#pragma charmap (0xE8, 0xE8)
#pragma charmap (0xE9, 0xE9)
#pragma charmap (0xEA, 0xEA)
#pragma charmap (0xEB, 0xEB)
#pragma charmap (0xEC, 0xEC)
#pragma charmap (0xED, 0xED)
#pragma charmap (0xEE, 0xEE)
#pragma charmap (0xEF, 0xEF)
#pragma charmap (0xF0, 0xF0)
#pragma charmap (0xF1, 0xF1)
#pragma charmap (0xF2, 0xF2)
#pragma charmap (0xF3, 0xF3)
#pragma charmap (0xF4, 0xF4)
#pragma charmap (0xF5, 0xF5)
#pragma charmap (0xF6, 0xF6)
#pragma charmap (0xF7, 0xF7)
#pragma charmap (0xF8, 0xF8)
#pragma charmap (0xF9, 0xF9)
#pragma charmap (0xFA, 0xFA)
#pragma charmap (0xFB, 0xFB)
#pragma charmap (0xFC, 0xFC)
#pragma charmap (0xFD, 0xFD)
#pragma charmap (0xFE, 0xFE)
#pragma charmap (0xFF, 0xFF)
#pragma warn (remap-zero, pop)

View File

@ -1 +0,0 @@
PATH %PATH%;C:\Programmi\cc65-snapshot-win32\bin

View File

@ -1,856 +0,0 @@
byte FONT[768] = {
0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 8
, 8
, 8
, 8
, 8
, 0
, 8
, 0
, 20
, 20
, 20
, 0
, 0
, 0
, 0
, 0
, 20
, 20
, 62
, 20
, 62
, 20
, 20
, 0
, 8
, 30
, 40
, 28
, 10
, 60
, 8
, 0
, 48
, 50
, 4
, 8
, 16
, 38
, 6
, 0
, 16
, 40
, 40
, 16
, 42
, 36
, 26
, 0
, 8
, 8
, 8
, 0
, 0
, 0
, 0
, 0
, 8
, 16
, 32
, 32
, 32
, 16
, 8
, 0
, 8
, 4
, 2
, 2
, 2
, 4
, 8
, 0
, 8
, 42
, 28
, 8
, 28
, 42
, 8
, 0
, 0
, 8
, 8
, 62
, 8
, 8
, 0
, 0
, 0
, 0
, 0
, 0
, 8
, 8
, 16
, 0
, 0
, 0
, 0
, 62
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 8
, 0
, 0
, 2
, 4
, 8
, 16
, 32
, 0
, 0
, 28
, 34
, 38
, 42
, 50
, 34
, 28
, 0
, 8
, 24
, 8
, 8
, 8
, 8
, 28
, 0
, 28
, 34
, 2
, 12
, 16
, 32
, 62
, 0
, 62
, 2
, 4
, 12
, 2
, 34
, 28
, 0
, 4
, 12
, 20
, 36
, 62
, 4
, 4
, 0
, 62
, 32
, 60
, 2
, 2
, 34
, 28
, 0
, 14
, 16
, 32
, 60
, 34
, 34
, 28
, 0
, 62
, 2
, 4
, 8
, 16
, 32
, 32
, 0
, 28
, 34
, 34
, 28
, 34
, 34
, 28
, 0
, 28
, 34
, 34
, 30
, 2
, 4
, 56
, 0
, 0
, 0
, 8
, 0
, 8
, 0
, 0
, 0
, 0
, 0
, 8
, 0
, 8
, 8
, 16
, 0
, 4
, 8
, 16
, 32
, 16
, 8
, 4
, 0
, 0
, 0
, 62
, 0
, 62
, 0
, 0
, 0
, 16
, 8
, 4
, 2
, 4
, 8
, 16
, 0
, 28
, 34
, 4
, 8
, 8
, 0
, 8
, 0
, 28
, 34
, 42
, 46
, 44
, 32
, 28
, 0
, 8
, 20
, 34
, 34
, 62
, 34
, 34
, 0
, 60
, 34
, 34
, 60
, 34
, 34
, 60
, 0
, 28
, 34
, 32
, 32
, 32
, 34
, 28
, 0
, 56
, 36
, 34
, 34
, 34
, 36
, 56
, 0
, 62
, 32
, 32
, 56
, 32
, 32
, 62
, 0
, 62
, 32
, 32
, 56
, 32
, 32
, 32
, 0
, 30
, 32
, 32
, 32
, 38
, 34
, 30
, 0
, 34
, 34
, 34
, 62
, 34
, 34
, 34
, 0
, 28
, 8
, 8
, 8
, 8
, 8
, 28
, 0
, 2
, 2
, 2
, 2
, 2
, 34
, 28
, 0
, 34
, 36
, 40
, 48
, 40
, 36
, 34
, 0
, 32
, 32
, 32
, 32
, 32
, 32
, 62
, 0
, 34
, 54
, 42
, 42
, 34
, 34
, 34
, 0
, 34
, 34
, 50
, 42
, 38
, 34
, 34
, 0
, 28
, 34
, 34
, 34
, 34
, 34
, 28
, 0
, 60
, 34
, 34
, 60
, 32
, 32
, 32
, 0
, 28
, 34
, 34
, 34
, 42
, 36
, 26
, 0
, 60
, 34
, 34
, 60
, 40
, 36
, 34
, 0
, 28
, 34
, 32
, 28
, 2
, 34
, 28
, 0
, 62
, 8
, 8
, 8
, 8
, 8
, 8
, 0
, 34
, 34
, 34
, 34
, 34
, 34
, 28
, 0
, 34
, 34
, 34
, 34
, 34
, 20
, 8
, 0
, 34
, 34
, 34
, 42
, 42
, 54
, 34
, 0
, 34
, 34
, 20
, 8
, 20
, 34
, 34
, 0
, 34
, 34
, 20
, 8
, 8
, 8
, 8
, 0
, 62
, 2
, 4
, 8
, 16
, 32
, 62
, 0
, 62
, 48
, 48
, 48
, 48
, 48
, 62
, 0
, 0
, 32
, 16
, 8
, 4
, 2
, 0
, 0
, 62
, 6
, 6
, 6
, 6
, 6
, 62
, 0
, 8
, 20
, 34
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 62
, 16
, 8
, 4
, 0
, 0
, 0
, 0
, 0
, 0
, 0
, 28
, 2
, 30
, 34
, 30
, 0
, 32
, 32
, 60
, 34
, 34
, 34
, 60
, 0
, 0
, 0
, 30
, 32
, 32
, 32
, 30
, 0
, 2
, 2
, 30
, 34
, 34
, 34
, 30
, 0
, 0
, 0
, 28
, 34
, 62
, 32
, 30
, 0
, 12
, 18
, 16
, 60
, 16
, 16
, 16
, 0
, 0
, 0
, 28
, 34
, 34
, 30
, 2
, 28
, 32
, 32
, 60
, 34
, 34
, 34
, 34
, 0
, 8
, 0
, 24
, 8
, 8
, 8
, 28
, 0
, 2
, 0
, 6
, 2
, 2
, 2
, 18
, 12
, 32
, 32
, 34
, 36
, 56
, 36
, 34
, 0
, 24
, 8
, 8
, 8
, 8
, 8
, 28
, 0
, 0
, 0
, 52
, 42
, 42
, 42
, 34
, 0
, 0
, 0
, 60
, 34
, 34
, 34
, 34
, 0
, 0
, 0
, 28
, 34
, 34
, 34
, 28
, 0
, 0
, 0
, 60
, 34
, 34
, 60
, 32
, 32
, 0
, 0
, 30
, 34
, 34
, 30
, 2
, 2
, 0
, 0
, 46
, 48
, 32
, 32
, 32
, 0
, 0
, 0
, 30
, 32
, 28
, 2
, 60
, 0
, 16
, 16
, 60
, 16
, 16
, 18
, 12
, 0
, 0
, 0
, 34
, 34
, 34
, 38
, 26
, 0
, 0
, 0
, 34
, 34
, 34
, 20
, 8
, 0
, 0
, 0
, 34
, 34
, 42
, 42
, 20
, 0
, 0
, 0
, 34
, 20
, 8
, 20
, 34
, 0
, 0
, 0
, 34
, 36
, 20
, 24
, 8
, 48
, 0
, 0
, 62
, 4
, 8
, 16
, 62
, 0
, 6
, 8
, 8
, 48
, 8
, 8
, 6
, 0
, 8
, 8
, 8
, 8
, 8
, 8
, 8
, 8
, 48
, 8
, 8
, 6
, 8
, 8
, 48
, 0
, 26
, 44
, 0
, 0
, 0
, 0
, 0
, 0
};

View File

@ -1,104 +0,0 @@
// SCREEN 1 VALUES
// sprite patterns: $0000
// pattern table: $0800 (256*8)
// sprite attributes: $1000
// unused: $1080
// name table: $1400 (32*24)
// unused: $1800
// color table: $2000 (32)
// unused $2020-$3FFF
#define SCREEN1_PATTERN_TABLE 0x0800
#define SCREEN1_NAME_TABLE 0x1400
#define SCREEN1_COLOR_TABLE 0x2000
#define SCREEN1_SPRITE_PATTERNS 0x0000
#define SCREEN1_SPRITE_ATTRS 0x1000
#define SCREEN1_SIZE (32*24)
byte SCREEN1_TABLE[8] = {
0x00, 0xc0, 0x05, 0x80, 0x01, 0x20, 0x00, 0x25
};
// loads the Laser 500 font on the pattern table
void SCREEN1_LOAD_FONT() {
static byte *source = FONT;
static word i;
// start writing into VRAM from "space" character
set_vram_addr(SCREEN1_PATTERN_TABLE+(32*8));
for(i=0;i<768;i++) {
POKE(VDP_DATA, *source);
source++;
}
source = FONT;
set_vram_addr(SCREEN1_PATTERN_TABLE+((128+32)*8));
for(i=0;i<768;i++) {
POKE(VDP_DATA, ~(*source));
source++;
}
// TODO: inverted characters ?
}
// prints character to TMS (SCREEN 1 MODE)
void fastcall SCREEN1_PUTCHAR(byte c) {
set_vram_addr(tms_cursor);
POKE(VDP_DATA, c);
tms_cursor++;
}
// prints 0 terminated string pointed by YA
void SCREEN1_PUTS(char *s) {
byte c;
while(1) {
c = *s;
// c = *s & 127; // TODO: explain why???
if(c==0) return;
SCREEN1_PUTCHAR(c);
s++;
}
}
void SCREEN1_HOME() {
tms_cursor = SCREEN1_NAME_TABLE;
}
void SCREEN1_LOCATEXY(byte x, byte y) {
tms_cursor = SCREEN1_NAME_TABLE + ((word)y)*32 + x;
}
void SCREEN1_INIT() {
static byte i;
for(i=0;i<8;i++) {
write_reg(i, SCREEN1_TABLE[i]);
}
}
void SCREEN1_FILL() {
static word i;
// fills name table with spaces (32)
set_vram_addr(SCREEN1_NAME_TABLE);
for(i=0;i<SCREEN1_SIZE;i++) {
POKE(VDP_DATA, 32);
// nops here?
}
// fill pattern table with 0
set_vram_addr(SCREEN1_PATTERN_TABLE);
for(i=0;i<256*8;i++) {
POKE(VDP_DATA, 0);
// nops here?
}
// fill color table with $1F
set_vram_addr(SCREEN1_COLOR_TABLE);
for(i=0;i<32;i++) {
POKE(VDP_DATA, 0x1f);
// nops here?
}
}

View File

@ -1,115 +0,0 @@
// SCREEN 2 VALUES
// pattern table: $0000-$17FF (256*8*3)
// sprite patterns: $1800-$19FF
// color table: $2000-$27FF (256*8*3)
// name table: $3800-$3AFF (32*24 = 256*3 = 768)
// sprite attributes: $3B00-$3BFF
// unused $3C00-$3FFF
//
#define SCREEN2_PATTERN_TABLE 0x0000
#define SCREEN2_NAME_TABLE 0x3800
#define SCREEN2_COLOR_TABLE 0x2000
#define SCREEN2_SPRITE_PATTERNS 0x1800
#define SCREEN2_SPRITE_ATTRS 0x3b00
#define SCREEN2_SIZE (32*24)
byte SCREEN2_TABLE[8] = {
0x02, 0xc0, 0x0e, 0xff, 0x03, 0x76, 0x03, 0x25
};
void SCREEN2_INIT() {
static byte i;
for(i=0;i<8;i++) {
write_reg(i, SCREEN2_TABLE[i]);
}
}
void SCREEN2_FILL() {
static word i;
// fills name table x3 with increasing numbers
set_vram_addr(SCREEN2_NAME_TABLE);
for(i=0;i<SCREEN2_SIZE;i++) {
POKE(VDP_DATA, i & 0xFF);
}
// fill pattern table with 0 (clear screen)
set_vram_addr(SCREEN2_PATTERN_TABLE);
for(i=0;i<768*8;i++) {
POKE(VDP_DATA, 0);
}
// fill color table with $1F
set_vram_addr(SCREEN2_COLOR_TABLE);
for(i=0;i<768*8;i++) {
POKE(VDP_DATA, 0x1f);
}
}
void SCREEN2_PUTC(byte ch, byte x, byte y, byte col) {
byte *source = &FONT[(ch-32)*8];
byte i;
word paddr = SCREEN2_PATTERN_TABLE + x*8 + y*256;
word caddr = SCREEN2_COLOR_TABLE + x*8 + y*256;
set_vram_addr(paddr); for(i=0;i<8;i++) POKE(VDP_DATA, source[i]);
set_vram_addr(caddr); for(i=0;i<8;i++) POKE(VDP_DATA, col);
}
void SCREEN2_PUTS(byte x, byte y, byte col, char *s) {
while(*s) {
SCREEN2_PUTC(*s++, x++, y, col);
}
}
void SCREEN2_PSET(byte x, byte y) {
word paddr = SCREEN2_PATTERN_TABLE + (x & 0b11111000) + (y & 0b11111000)*32 + y%8;
byte pattern = 128 >> (x%8);
byte data;
set_vram_read_addr(paddr);
data = PEEK(VDP_DATA);
set_vram_addr(paddr);
POKE(VDP_DATA,data | pattern);
}
// int vti_abs(int x) {
// return x < 0 ? -x : x;
// }
//
// // http://members.chello.at/~easyfilter/bresenham.html
// void vti_ellipse_rect(int x0, int y0, int x1, int y1)
// {
// long a,b,b1,dx,dy,e2,err;
//
// a = vti_abs(x1-x0);
// b = vti_abs(y1-y0);
// b1 = b&1; /* values of diameter */
// dx = 4*(1-a)*b*b;
// dy = 4*(b1+1)*a*a; /* error increment */
// err = dx+dy+b1*a*a; /* error of 1.step */
//
// if (x0 > x1) { x0 = x1; x1 += a; } /* if called with swapped points */
// if (y0 > y1) y0 = y1; /* .. exchange them */
// y0 += (b+1)/2; y1 = y0-b1; /* starting pixel */
// a *= 8*a; b1 = 8*b*b;
//
// do {
// SCREEN2_PSET(x1, y0); /* I. Quadrant */
// SCREEN2_PSET(x0, y0); /* II. Quadrant */
// SCREEN2_PSET(x0, y1); /* III. Quadrant */
// SCREEN2_PSET(x1, y1); /* IV. Quadrant */
// e2 = 2*err;
// if (e2 <= dy) { y0++; y1--; err += dy += a; } /* y step */
// if (e2 >= dx || 2*err > dy) { x0++; x1--; err += dx += b1; } /* x step */
// } while (x0 <= x1);
//
// while (y0-y1 < b) { /* too early stop of flat ellipses a=1 */
// SCREEN2_PSET(x0-1, y0); /* -> finish tip of ellipse */
// SCREEN2_PSET(x1+1, y0++);
// SCREEN2_PSET(x0-1, y1);
// SCREEN2_PSET(x1+1, y1--);
// }
// }

View File

@ -1,157 +0,0 @@
#ifdef APPLE1
#define WOZMON 0xFF1F // enters monitor
#define ECHO 0xFFEF // output ascii character in A (A not destroyed)
#define PRBYTE 0xFFDC // print hex byte in A (A destroyed)
#define VDP_DATA 0xC000 // TMS9918 data port (VRAM)
#define VDP_REG 0xC001 // TMS9918 register port (write) or status (read)
#endif
#ifdef VIC20
#define ECHO 0xFFD2 // chrout routine in kernal rom
#define VDP_DATA 0xA000 // TMS9918 data port (VRAM)
#define VDP_REG 0xA001 // TMS9918 register port (write) or status (read)
#include "cbm_ascii_charmap.h" // allow VIC-20 to work with pure ASCII
#endif
// TMS9918 interface flags
#define WRITE_TO_REG 0b10000000
#define WRITE_TO_VRAM 0b01000000
#define READ_FROM_VRAM 0b00000000
// utils
typedef unsigned char byte;
typedef unsigned int word;
#define POKE(a,b) (*((byte *)(a))=(byte)(b))
#define PEEK(a) (*((byte *)(a)))
// puts a character on the apple1 screen using the WOZMON routine
void fastcall woz_putc(byte c) {
asm("jsr %w", ECHO);
}
// returns to WOZMON prompt
void woz_mon() {
#ifdef APPLE1
asm("jmp %w", WOZMON);
#endif
}
// sets the VRAM address on the TMS9918
void fastcall set_vram_addr(word addr) {
asm("sta %w", VDP_REG); // write address low byte
// nops here ?
asm("txa"); // X = addres high byte
asm("and #%b", 0b00111111); // mask address high byte
asm("ora #%b", WRITE_TO_VRAM); // set "write to vram" flag bits "01" upper bits ("00" for read)
asm("sta %w", VDP_REG); // write flags and address high byte
// nops here ?
}
// sets the VRAM address on the TMS9918
void fastcall set_vram_read_addr(word addr) {
asm("sta %w", VDP_REG); // write address low byte
// nops here ?
asm("txa"); // X = addres high byte
asm("and #%b", 0b00111111); // mask address high byte
asm("ora #%b", READ_FROM_VRAM); // set "write to vram" flag bits "01" upper bits ("00" for read)
asm("sta %w", VDP_REG); // write flags and address high byte
// nops here ?
}
// writes a value to a TMS9918 register (0-7)
void write_reg(byte regnum, byte val) {
// nops are not required
POKE(VDP_REG, val);
POKE(VDP_REG, (regnum & 0b00001111)|WRITE_TO_REG);
}
static word tms_cursor;
#include "laser500_font.ascii.c"
#include "screen1.c"
#include "screen2.c"
void screen1_square_sprites() {
static byte i;
// fills first sprite pattern with 255
set_vram_addr(SCREEN1_SPRITE_PATTERNS); // start writing in the sprite patterns
for(i=0;i<8;i++) {
POKE(VDP_DATA, 255);
}
// set sprite coordinates
set_vram_addr(SCREEN1_SPRITE_ATTRS); // start writing in the sprite attribute
for(i=0;i<32;i++) {
POKE(VDP_DATA,(6+i)*8); // y coordinate
POKE(VDP_DATA,(6+i)*8); // x coordinate
POKE(VDP_DATA,0); // name
POKE(VDP_DATA,i); // color
}
}
void screen2_square_sprites() {
static byte i;
// fills first sprite pattern with 255
set_vram_addr(SCREEN2_SPRITE_PATTERNS); // start writing in the sprite patterns
for(i=0;i<8;i++) {
POKE(VDP_DATA, 0);
}
// set sprite coordinates
set_vram_addr(SCREEN2_SPRITE_ATTRS); // start writing in the sprite attribute
for(i=0;i<32;i++) {
POKE(VDP_DATA,0); // y coordinate
POKE(VDP_DATA,0); // x coordinate
POKE(VDP_DATA,0); // name
POKE(VDP_DATA,i); // color
}
}
void main() {
word i;
if(0) {
SCREEN1_INIT();
SCREEN1_FILL();
SCREEN1_LOAD_FONT();
SCREEN1_HOME(); SCREEN1_PUTS("*** P-LAB VIDEO CARD SYSTEM ***");
SCREEN1_LOCATEXY(0, 2); SCREEN1_PUTS("16K VRAM BYTES FREE");
SCREEN1_LOCATEXY(0, 4); SCREEN1_PUTS("READY.");
SCREEN1_LOCATEXY(0, 10);
for(i=0;i<256;i++) SCREEN1_PUTCHAR(i);
screen1_square_sprites();
}
if(1) {
SCREEN2_INIT();
SCREEN2_FILL();
screen2_square_sprites();
//SCREEN2_PUTC(65,1,1,0x1F);
SCREEN2_PUTS(0,0,0x1F,"*** P-LAB VIDEO CARD SYSTEM ***");
SCREEN2_PUTS(0,2,0x1F,"16K VRAM BYTES FREE");
SCREEN2_PUTS(0,4,0x1F,"READY.");
for(i=0;i<16;i++) {
SCREEN2_PUTS(5,6+i,((15-i)<<4)+i," COLOR ");
}
for(i=0;i<192;i++) {
SCREEN2_PSET(i,i/2);
SCREEN2_PSET(i,i);
SCREEN2_PSET(i/2,i);
}
}
woz_putc(42);
woz_mon();
}