mirror of
https://github.com/KarolS/millfork.git
synced 2024-12-22 01:29:30 +00:00
CBM BASIC loader should use the actual address of main (fixes #111)
This commit is contained in:
parent
38ad919ed9
commit
a260d0a806
@ -2,6 +2,11 @@
|
||||
|
||||
### A note about Commodore 64
|
||||
|
||||
#### Unusual main function location
|
||||
|
||||
If you're creating a prg file and your `main` function may be located at address $2710 hex (10000 decimal) or higher,
|
||||
you might need to define the `DISPLACED_MAIN=1` preprocessor feature.
|
||||
|
||||
#### Multifile programs
|
||||
|
||||
A multifile program is a program stored on a disk that consists of the main program file that is executed first
|
||||
|
@ -103,6 +103,8 @@ Some libraries may require that some of these be defined.
|
||||
|
||||
* `KEYBOARD` – 1 if the target has a keyboard, 0 otherwise
|
||||
|
||||
* `DISPLACED_MAIN` – set this to 1 if the `main` function is in a very unusual location for the target
|
||||
|
||||
* `USE_MOUSE_MBM` – set this to 1 if you want to enable middle button support for the mouse.
|
||||
|
||||
* `JOYSTICKS` – the maximum number of joysticks using standard hardware configurations, may be 0
|
||||
|
31
include/cbm/basic_loader.mfk
Normal file
31
include/cbm/basic_loader.mfk
Normal file
@ -0,0 +1,31 @@
|
||||
#template $ADDR$
|
||||
|
||||
#if not(CBM)
|
||||
#warn cbm/basic_loader module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @ $ADDR$ = [
|
||||
#if DISPLACED_MAIN
|
||||
@word_le [
|
||||
$ADDR$ + 0xB
|
||||
],
|
||||
#else
|
||||
@word_le [
|
||||
$ADDR$ + if(main.addr >= 10000, 1/0, 0xA) // use -D DISPLACED_MAIN=1 if you get an error here
|
||||
],
|
||||
#endif
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
#if DISPLACED_MAIN
|
||||
$30 + (main.addr/10000)%%10,
|
||||
#endif
|
||||
$30 + (main.addr/1000)%%10,
|
||||
$30 + (main.addr/100)%%10,
|
||||
$30 + (main.addr/10)%%10,
|
||||
$30 + (main.addr/1)%%10,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
@ -1,19 +1 @@
|
||||
#if not(CBM)
|
||||
#warn loader_0401 module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @$401 = [
|
||||
$0b,
|
||||
4,
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
$31,
|
||||
$30,
|
||||
$33,
|
||||
$37,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
||||
import cbm/basic_loader<$401>
|
||||
|
@ -1,19 +1 @@
|
||||
#if not(CBM)
|
||||
#warn loader_0801 module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @$801 = [
|
||||
$0b,
|
||||
$08,
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
$32,
|
||||
$30,
|
||||
$36,
|
||||
$31,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
||||
import cbm/basic_loader<$801>
|
||||
|
@ -22,4 +22,5 @@ asm void __init_16bit() @$80D {
|
||||
clc
|
||||
xce
|
||||
sep #$30
|
||||
}
|
||||
jmp main
|
||||
}
|
||||
|
@ -1,19 +1 @@
|
||||
#if not(CBM)
|
||||
#warn loader_1001 module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @$1001 = [
|
||||
$0b,
|
||||
$10,
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
$34,
|
||||
$31,
|
||||
$30,
|
||||
$39,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
||||
import cbm/basic_loader<$1001>
|
||||
|
@ -1,19 +1 @@
|
||||
#if not(CBM)
|
||||
#warn loader_1201 module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @$1201 = [
|
||||
$0b,
|
||||
$12,
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
$34,
|
||||
$36,
|
||||
$32,
|
||||
$31,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
||||
import cbm/basic_loader<$1201>
|
||||
|
@ -1,19 +1 @@
|
||||
#if not(CBM)
|
||||
#warn loader_1c01 module should be only used on Commodore targets
|
||||
#endif
|
||||
|
||||
const array _basic_loader @$1C01 = [
|
||||
$0b,
|
||||
$1C,
|
||||
10,
|
||||
0,
|
||||
$9e,
|
||||
$37,
|
||||
$31,
|
||||
$38,
|
||||
$31,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
]
|
||||
|
||||
import cbm/basic_loader<$1c01>
|
||||
|
Loading…
Reference in New Issue
Block a user