mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-04-14 10:37:36 +00:00
Merge commit 'f2bf3484ad84a75f644a47560f1d2a0dd42c1acd' into jesper_baseline_all_changes
(cherry picked from commit 74512e132625e2e4f8f0ae3a80beae043dcc642d)
This commit is contained in:
parent
f2bf3484ad
commit
9cf5f4cd05
@ -13,7 +13,7 @@
|
||||
#pragma link("cx16-banking.ld")
|
||||
#pragma var_model(mem)
|
||||
|
||||
// #include <cx16.h>
|
||||
#include <cx16.h>
|
||||
#include <conio.h>
|
||||
#include <printf.h>
|
||||
|
||||
@ -24,33 +24,31 @@
|
||||
|
||||
// Functional code
|
||||
|
||||
__address(0x00) char RAM_Bank;
|
||||
|
||||
#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
|
||||
#pragma bank(cx16_ram, 1) // The sequent functions will be banked using call method ram in bank number 1.
|
||||
|
||||
char add_a(char a) {
|
||||
printf("add_a(%02x), ", RAM_Bank);
|
||||
printf("add_a(%02x), ", bank_get_bram());
|
||||
return a+1;
|
||||
}
|
||||
|
||||
char add_c(char a) {
|
||||
printf("add_c(%02x), ", RAM_Bank);
|
||||
printf("add_c(%02x), ", bank_get_bram());
|
||||
return add_a(a)+1; // Non banked call in ram bank 1.
|
||||
}
|
||||
|
||||
char add_d(char a) {
|
||||
printf("add_d(%02x), ",RAM_Bank);
|
||||
printf("add_d(%02x), ",bank_get_bram());
|
||||
return mul_a(a)+1; // Banked call fram ram bank 1 to ram bank 2.
|
||||
}
|
||||
|
||||
char add_e(char a) {
|
||||
printf("add_e(%02x), ",RAM_Bank);
|
||||
printf("add_e(%02x), ",bank_get_bram());
|
||||
return mul_b(a)+1; // Banked call fram ram bank 1 to ram bank 2.
|
||||
}
|
||||
|
||||
char add_f(char a) {
|
||||
printf("add_f(%02x), ",RAM_Bank);
|
||||
printf("add_f(%02x), ",bank_get_bram());
|
||||
return add_m(a)+1; // Non banked call fram ram bank 1 to main memory.
|
||||
}
|
||||
|
||||
@ -59,27 +57,27 @@ char add_f(char a) {
|
||||
#pragma bank(cx16_ram, 2) // The sequent functions will be banked using call method ram in bank number 2.
|
||||
|
||||
char mul_a(char m) {
|
||||
printf("mul_a(%02x), ",RAM_Bank);
|
||||
printf("mul_a(%02x), ",bank_get_bram());
|
||||
return m * 2;
|
||||
}
|
||||
|
||||
char mul_c(char m) {
|
||||
printf("mul_c(%02x), ",RAM_Bank);
|
||||
printf("mul_c(%02x), ",bank_get_bram());
|
||||
return add_a(m)*2; // Banked call fram ram bank 2 to ram bank 1.
|
||||
}
|
||||
|
||||
char mul_d(char m) {
|
||||
printf("mul_d(%02x), ",RAM_Bank);
|
||||
printf("mul_d(%02x), ",bank_get_bram());
|
||||
return mul_a(m)*2; // Non banked call in ram bank 2.
|
||||
}
|
||||
|
||||
char mul_e(char a) {
|
||||
printf("mul_e(%02x), ",RAM_Bank);
|
||||
printf("mul_e(%02x), ",bank_get_bram());
|
||||
return mul_b(a)*2; // Non Banked call in ram bank 2.
|
||||
}
|
||||
|
||||
char mul_f(char m) {
|
||||
printf("mul_f(%02x), ",RAM_Bank);
|
||||
printf("mul_f(%02x), ",bank_get_bram());
|
||||
return add_m(m)*2; // Non banked call fram ram bank 2 to main memory.
|
||||
}
|
||||
|
||||
@ -89,14 +87,14 @@ char mul_f(char m) {
|
||||
#pragma code_seg(Bank1) // The sequent functions will be addressed specified by segment bank1 in the linker.
|
||||
// The __bank directive declares this function to be banked using call method ram in bank number 1 of banked ram.
|
||||
char __bank(cx16_ram, 1) add_b(char a) {
|
||||
printf("add_b(%02x), ",RAM_Bank);
|
||||
printf("add_b(%02x), ",bank_get_bram());
|
||||
return a+1;
|
||||
}
|
||||
|
||||
#pragma code_seg(Bank2) // The sequent functions will be addressed specified by segment bank1 in the linker.
|
||||
// The __bank directive declares this function to be banked using call method ram in bank number 2 of banked ram.
|
||||
char __bank(cx16_ram, 2) mul_b(char m) {
|
||||
printf("mul_b(%02x), ",RAM_Bank);
|
||||
printf("mul_b(%02x), ",bank_get_bram());
|
||||
return m*2;
|
||||
}
|
||||
|
||||
@ -104,13 +102,13 @@ char __bank(cx16_ram, 2) mul_b(char m) {
|
||||
|
||||
// Allocated in main memory.
|
||||
char add_m(char a) {
|
||||
printf("add_m(%02x), ",RAM_Bank);
|
||||
printf("add_m(%02x), ",bank_get_bram());
|
||||
return add_e(a)+1; // Banked call to ram in bank 1 fram main memory.
|
||||
}
|
||||
|
||||
// Allocated in main memory.
|
||||
char mul_m(char m) {
|
||||
printf("mul_m(%02x), ",RAM_Bank);
|
||||
printf("mul_m(%02x), ",bank_get_bram());
|
||||
return mul_e(m)*2; // Banked call to ram in bank 2 fram main memory.
|
||||
}
|
||||
|
||||
@ -118,46 +116,21 @@ char mul_m(char m) {
|
||||
// Practically this means that the main() function is placed in main memory ...
|
||||
|
||||
void load_bank(char bank, char *file) {
|
||||
RAM_Bank = bank;
|
||||
|
||||
//cbm_k_setnam(file);
|
||||
char file_len = strlen(file);
|
||||
asm {
|
||||
lda file_len
|
||||
ldx <file
|
||||
ldy >file
|
||||
jsr $FFBD
|
||||
}
|
||||
|
||||
//cbm_k_setlfs(1,8,2);
|
||||
asm {
|
||||
lda #1
|
||||
ldx #8
|
||||
ldy #2
|
||||
jsr $FFBA
|
||||
}
|
||||
|
||||
//cbm_k_load((char*)0xA000, 0);
|
||||
asm {
|
||||
lda #0
|
||||
ldx #<$A000
|
||||
ldy #>$A000
|
||||
jsr $FFD5
|
||||
}
|
||||
|
||||
//cbm_k_close(1);
|
||||
asm {
|
||||
lda #1
|
||||
jsr $FFC3
|
||||
}
|
||||
bank_set_bram(bank);
|
||||
cbm_k_setnam(file);
|
||||
cbm_k_setlfs(1,8,2);
|
||||
cbm_k_load((char*)0xA000, 0);
|
||||
cbm_k_close(1);
|
||||
}
|
||||
|
||||
void main(void) {
|
||||
|
||||
clrscr();
|
||||
|
||||
load_bank(1, "BANK1.BIN");
|
||||
load_bank(2, "BANK2.BIN");
|
||||
|
||||
RAM_Bank = 0;
|
||||
bank_set_bram(0);
|
||||
|
||||
asm{.byte $db}
|
||||
printf("result = %u\n", add_a(1)); // Banked call to ram in bank 1 fram main memory.
|
||||
|
Loading…
x
Reference in New Issue
Block a user