From 9cf5f4cd056a7c4c06e502b8cc3e3d2cf5884733 Mon Sep 17 00:00:00 2001 From: Sven Van de Velde Date: Tue, 11 Apr 2023 09:00:46 +0200 Subject: [PATCH] Merge commit 'f2bf3484ad84a75f644a47560f1d2a0dd42c1acd' into jesper_baseline_all_changes (cherry picked from commit 74512e132625e2e4f8f0ae3a80beae043dcc642d) --- .../kc/examples/cx16/banking/cx16-banking.c | 73 ++++++------------- 1 file changed, 23 insertions(+), 50 deletions(-) diff --git a/src/test/kc/examples/cx16/banking/cx16-banking.c b/src/test/kc/examples/cx16/banking/cx16-banking.c index 87d4b224e..113f11c40 100644 --- a/src/test/kc/examples/cx16/banking/cx16-banking.c +++ b/src/test/kc/examples/cx16/banking/cx16-banking.c @@ -13,7 +13,7 @@ #pragma link("cx16-banking.ld") #pragma var_model(mem) -// #include +#include #include #include @@ -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 - 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.