mirror of
https://github.com/catseye/SixtyPical.git
synced 2024-11-22 17:32:01 +00:00
Fix example programs; allow externals to be called.
--HG-- rename : eg/hi.60p => eg/hello-world.60p
This commit is contained in:
parent
ad1e159317
commit
af7d65ee09
@ -266,3 +266,27 @@ temporaries are not unioned yet, but they could be.
|
|||||||
= .space _temp_4 2
|
= .space _temp_4 2
|
||||||
= .space _temp_1 1
|
= .space _temp_1 1
|
||||||
= .space _temp_2 2
|
= .space _temp_2 2
|
||||||
|
|
||||||
|
Declaring and calling an external routine.
|
||||||
|
|
||||||
|
| external chrout 65490
|
||||||
|
| routine main {
|
||||||
|
| lda #72
|
||||||
|
| jsr chrout
|
||||||
|
| lda #73
|
||||||
|
| jsr chrout
|
||||||
|
| lda #13
|
||||||
|
| jsr chrout
|
||||||
|
| }
|
||||||
|
= main:
|
||||||
|
= lda #72
|
||||||
|
= jsr chrout
|
||||||
|
= lda #73
|
||||||
|
= jsr chrout
|
||||||
|
= lda #13
|
||||||
|
= jsr chrout
|
||||||
|
= rts
|
||||||
|
=
|
||||||
|
= .data
|
||||||
|
= .alias chrout 65490
|
||||||
|
|
||||||
|
18
eg/demo.60p
18
eg/demo.60p
@ -1,15 +1,15 @@
|
|||||||
assign byte table screen $0400
|
assign byte[256] screen $0400
|
||||||
assign byte table screen2 1274
|
assign byte[256] screen2 1274
|
||||||
assign byte table screen3 1524
|
assign byte[256] screen3 1524
|
||||||
assign byte table screen4 1774
|
assign byte[256] screen4 1774
|
||||||
|
|
||||||
assign byte table colormap 55296
|
assign byte[256] colormap 55296
|
||||||
assign byte table colormap2 55546
|
assign byte[256] colormap2 55546
|
||||||
assign byte table colormap3 55796
|
assign byte[256] colormap3 55796
|
||||||
assign byte table colormap4 56046
|
assign byte[256] colormap4 56046
|
||||||
|
|
||||||
assign byte vic_border 53280
|
assign byte vic_border 53280
|
||||||
assign byte table vic_bg 53281
|
assign byte[4] vic_bg 53281
|
||||||
|
|
||||||
assign vector cinv 788
|
assign vector cinv 788
|
||||||
reserve vector save_cinv
|
reserve vector save_cinv
|
||||||
|
18
eg/game.60p
18
eg/game.60p
@ -1,15 +1,15 @@
|
|||||||
assign byte table screen $0400
|
assign byte[256] screen $0400
|
||||||
assign byte table screen2 1274
|
assign byte[256] screen2 1274
|
||||||
assign byte table screen3 1524
|
assign byte[256] screen3 1524
|
||||||
assign byte table screen4 1774
|
assign byte[256] screen4 1774
|
||||||
|
|
||||||
assign byte table colormap 55296
|
assign byte[256] colormap 55296
|
||||||
assign byte table colormap2 55546
|
assign byte[256] colormap2 55546
|
||||||
assign byte table colormap3 55796
|
assign byte[256] colormap3 55796
|
||||||
assign byte table colormap4 56046
|
assign byte[256] colormap4 56046
|
||||||
|
|
||||||
assign byte vic_border 53280
|
assign byte vic_border 53280
|
||||||
assign byte table vic_bg 53281
|
assign byte[4] vic_bg 53281
|
||||||
|
|
||||||
assign byte joy2 $dc00
|
assign byte joy2 $dc00
|
||||||
|
|
||||||
|
13
eg/hello-world.60p
Normal file
13
eg/hello-world.60p
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
reserve byte[13] message: "HELLO, WORLD!"
|
||||||
|
external chrout 65490
|
||||||
|
routine main {
|
||||||
|
ldy #0
|
||||||
|
repeat bne {
|
||||||
|
lda message, y
|
||||||
|
jsr chrout
|
||||||
|
iny
|
||||||
|
cpy #13
|
||||||
|
}
|
||||||
|
lda #13
|
||||||
|
jsr chrout
|
||||||
|
}
|
@ -1,9 +0,0 @@
|
|||||||
external chrout 65490
|
|
||||||
routine main {
|
|
||||||
lda #72
|
|
||||||
jsr chrout
|
|
||||||
lda #73
|
|
||||||
jsr chrout
|
|
||||||
lda #13
|
|
||||||
jsr chrout
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
assign byte table screen 1024
|
assign byte[256] screen 1024
|
||||||
reserve byte value
|
reserve byte value
|
||||||
routine main {
|
routine main {
|
||||||
lda #0
|
lda #0
|
||||||
|
@ -53,14 +53,19 @@ analyzeProgram program@(Program decls routines) =
|
|||||||
updateRoutCtx nm dst (UpdatedWith src) routCtx
|
updateRoutCtx nm dst (UpdatedWith src) routCtx
|
||||||
|
|
||||||
checkInstr nm (JSR name) progCtx routCtx =
|
checkInstr nm (JSR name) progCtx routCtx =
|
||||||
let
|
case lookupRoutine program name of
|
||||||
Just calledRout = lookupRoutine program name
|
Just calledRout ->
|
||||||
in
|
case Map.lookup name progCtx of
|
||||||
case Map.lookup name progCtx of
|
Just calledRoutCtx ->
|
||||||
Just calledRoutCtx ->
|
mergeRoutCtxs nm routCtx calledRoutCtx calledRout
|
||||||
mergeRoutCtxs nm routCtx calledRoutCtx calledRout
|
Nothing ->
|
||||||
Nothing ->
|
error ("can't call routine '" ++ name ++ "' before it is defined")
|
||||||
error ("can't call routine '" ++ name ++ "' before it is defined")
|
Nothing ->
|
||||||
|
-- it must be an external.
|
||||||
|
-- TODO: merge in any poisoning/outputs that are declared
|
||||||
|
-- on the external. for now,
|
||||||
|
routCtx
|
||||||
|
|
||||||
checkInstr nm (CMP reg addr) progCtx routCtx =
|
checkInstr nm (CMP reg addr) progCtx routCtx =
|
||||||
-- TODO: mark Carry bit as "touched" here
|
-- TODO: mark Carry bit as "touched" here
|
||||||
routCtx
|
routCtx
|
||||||
|
@ -69,7 +69,7 @@ consistentInitialTableSizes p@(Program decls routines) =
|
|||||||
checkAndTransformProgram :: Program -> Maybe Program
|
checkAndTransformProgram :: Program -> Maybe Program
|
||||||
checkAndTransformProgram program =
|
checkAndTransformProgram program =
|
||||||
if
|
if
|
||||||
trueOrDie "missing 'main' routine" (routineDeclared "main" program) &&
|
trueOrDie ("missing 'main' routine: " ++ show program) (routineDeclared "main" program) &&
|
||||||
trueOrDie "duplicate location name" (noDuplicateDecls program) &&
|
trueOrDie "duplicate location name" (noDuplicateDecls program) &&
|
||||||
trueOrDie "duplicate routine name" (noDuplicateRoutines program) &&
|
trueOrDie "duplicate routine name" (noDuplicateRoutines program) &&
|
||||||
trueOrDie "undeclared routine" (noUseOfUndeclaredRoutines program) &&
|
trueOrDie "undeclared routine" (noUseOfUndeclaredRoutines program) &&
|
||||||
|
@ -111,6 +111,7 @@ isLocationDecl _ = False
|
|||||||
isInitializedDecl (Assign _ _ _) = False
|
isInitializedDecl (Assign _ _ _) = False
|
||||||
isInitializedDecl (Reserve _ _ (v:vs)) = True
|
isInitializedDecl (Reserve _ _ (v:vs)) = True
|
||||||
isInitializedDecl (Reserve _ _ []) = False
|
isInitializedDecl (Reserve _ _ []) = False
|
||||||
|
isInitializedDecl _ = False
|
||||||
|
|
||||||
declaredLocationNames (Program decls _) =
|
declaredLocationNames (Program decls _) =
|
||||||
map (getDeclLocationName) (filter (isLocationDecl) decls)
|
map (getDeclLocationName) (filter (isLocationDecl) decls)
|
||||||
|
Loading…
Reference in New Issue
Block a user