#define _protected_a_start = $100
#define _protected_a_end = $1ff
dim b(100) as byte absolute _protected_a_start
dim c(100) as byte absolute (_protected_a_start + 100)
device=18F13K50
//
// 13K50 non-usb application using reserved blocks
//
// the 13K50 has ram at $000-0FF and a DPRAM block at $200-2FF
// since the memory map skips the $100-1FF block, normally the
// ram in the upper 200-2FF block is unavailable to SF.
// here we extend the ram size to the entire 768 byte space and
// then just mark the unimplemented block as reserved
//
#variable _maxram = $0100 * 3 // 768 bytes total user RAM
#define _protected_a_start = $100 // reserve the non-existent block
#define _protected_a_end = $1ff
// normally, this would be the limit of available ram
const SYS_VAR_SIZE = 25
dim b(256-SYS_VAR_SIZE) as byte
// newly available ram
dim c(256) as byte
clear(b)
clear(c)
NEW - Added _ram_protect and _ram_protect_length options.
#define _ram_protect = $804
#define _ram_protect_length = $100
private mval0 as byte = 0
private mval1 as byte = 0
private mval2 as byte = 0
private mval3 as byte = 0
private mval4 as byte = 0
sub main()
end subsub main()
dim val0 as byte = 0
dim val1 as byte = 0
dim val2 as byte = 0
dim val3 as byte = 0
end subsub main()
dim val0 as byte = 0
dim val1 as byte = 0
dim val2 as byte = 0
dim val3 as byte = 0
dim val4 as byte = 0
end sub#define _ram_protect_a = $804
#define _ram_protect_a_length = $100 .var PRI $0800 00 0000 0000 U08 mval0
.var PRI $0801 00 0000 0000 U08 mval1
.var PRI $0802 00 0000 0000 U08 mval2
.var PRI $0803 00 0000 0000 U08 mval3
.var PRI $0804 00 0000 0000 U08 mval4
#define _ram_protect = $804
#define _ram_protect_length = $100
private mval0 as byte = 0
private mval1 as byte = 0
private mval2 as byte = 0
private mval3 as byte = 0
private mval4 as byte = 0
sub main()
#if (true)
dim val0 as byte = 0
dim val1 as byte = 0
dim val2 as byte = 0
dim val3 as byte = 0
dim val4 as byte = 0
#endif
end sub
.proc PRI 00127 $00294 00046 $0904 0006 00034 00041 main
.var PRI $0904 00 0000 0000 U08 val0
.var PRI $0905 00 0000 0000 U08 val1
.var PRI $0906 00 0000 0000 U08 val2
.var PRI $0907 00 0000 0000 U08 val3
.var PRI $0908 00 0000 0000 U08 val4
.end
.var PRI $090A 00 0000 0000 U08 mval0
.var PRI $090B 00 0000 0000 U08 mval1
.var PRI $090C 00 0000 0000 U08 mval2
.var PRI $090D 00 0000 0000 U08 mval3
.var PRI $090E 00 0000 0000 U08 mval4
asm("USER_RAM = 0x0800;");
asm("_mval0_M0_U08 = USER_RAM + 0x000000;"); extern BYTE mval0_M0_U08;
asm("_mval1_M1_U08 = USER_RAM + 0x000001;"); extern BYTE mval1_M1_U08;
asm("_mval2_M2_U08 = USER_RAM + 0x000002;"); extern BYTE mval2_M2_U08;
asm("_mval3_M3_U08 = USER_RAM + 0x000003;"); extern BYTE mval3_M3_U08;
asm("_mval4_M4_U08 = USER_RAM + 0x000104;"); extern BYTE mval4_M4_U08;asm("USER_RAM = 0x0800;");
asm("_val0_F260_U08 = USER_RAM + 0x000104;"); extern BYTE val0_F260_U08;
asm("_val1_F261_U08 = USER_RAM + 0x000105;"); extern BYTE val1_F261_U08;
asm("_val2_F262_U08 = USER_RAM + 0x000106;"); extern BYTE val2_F262_U08;
asm("_val3_F263_U08 = USER_RAM + 0x000107;"); extern BYTE val3_F263_U08;
asm("_val4_F264_U08 = USER_RAM + 0x000108;"); extern BYTE val4_F264_U08;
asm("_mval0_M0_U08 = USER_RAM + 0x00010A;"); extern BYTE mval0_M0_U08;
asm("_mval1_M1_U08 = USER_RAM + 0x00010B;"); extern BYTE mval1_M1_U08;
asm("_mval2_M2_U08 = USER_RAM + 0x00010C;"); extern BYTE mval2_M2_U08;
asm("_mval3_M3_U08 = USER_RAM + 0x00010D;"); extern BYTE mval3_M3_U08;
asm("_mval4_M4_U08 = USER_RAM + 0x00010E;"); extern BYTE mval4_M4_U08;With sub and functions, if the whole frame cannot fit within a block then the whole frame is moved
dim val4 as byte = 0 Users browsing this forum: No registered users and 1 guest