70 lines
3.1 KiB
Plaintext
70 lines
3.1 KiB
Plaintext
|
|
{-----------------------------------------------------------------------+
|
|
| |
|
|
| Hello World -- Display a friendly greeting |
|
|
| |
|
|
+-----------------------------------------------------------------------}
|
|
|
|
gcl0x {GCL version for this program}
|
|
|
|
{ First define some subroutines }
|
|
{ Just copy what you need from other programs and adapt }
|
|
|
|
{ Clear screen }
|
|
[def
|
|
$9001 j= {Step size to next vertical screen line}
|
|
$800 {Start of screen memory}
|
|
i= {Step size to next vertical slice of 8 pixels}
|
|
\sysArgs2. {All-zero 8-bit pattern}
|
|
[do {Outer horizontal loop}
|
|
[do {Inner vertical loop}
|
|
\sysArgs4: 134!! {VDrawBits SYS call clears 8 pixels vertically}
|
|
i+ if>0loop] {Go down and repeat for entire vertical stripe}
|
|
255& 159^ if<>0 {Until completing X=159 position}
|
|
\sysArgs4; j+ loop] {Step to next vertical stripe and repeat}
|
|
ret
|
|
] ClearScreen=
|
|
|
|
{ Print ASCII character (32..127) on screen using the 5x8 pixel built-in font }
|
|
[def
|
|
82- {Map ASCII code to offset in font table}
|
|
[if<0 50+ i= \font32up {First page for ASCII 32..81}
|
|
else i= \font82up] j= {Second page is ASCII 82..127}
|
|
i 2<< i+ {Multiply by 5}
|
|
j+ j= {Add page address to reach bitmap data}
|
|
Pos \sysArgs4: {Position of character}
|
|
6+ Pos= {Advance position by 6 pixels for next call}
|
|
5 [do i= {Loop to draw 5 vertical slices of 8 pixels}
|
|
j 0? \sysArgs2. {Get byte from ROM using `LUP 0' instruction}
|
|
134!! {Invoke SYS function to draw 8 vertical pixels}
|
|
<j++ <\sysArgs4++ {Advance to next slice in ROM and on screen}
|
|
i 1- if>0loop] {Looping}
|
|
ret
|
|
] PrintChar=
|
|
|
|
{ Print text string }
|
|
[def
|
|
push {Save vLR because this is not a leaf subroutine}
|
|
Text= [do {Loop over characters}
|
|
Text, if<>0 {Next character to be printed, unless 0}
|
|
PrintChar! {Print the character and advance cursor}
|
|
<Text++ loop] {Advance text pointer and loop}
|
|
pop ret
|
|
] PrintText=
|
|
|
|
{ `def' can also define data! }
|
|
[def
|
|
`Hello,`World! #0 {Inline "Hello, World!\0"}
|
|
] StringHelloWorld=
|
|
|
|
{ After the setup above the main program can start }
|
|
{ Clear the screen and print our friendly message! }
|
|
|
|
\SYS_VDrawBits_134 \sysFn: {Prepare SYS calls}
|
|
$203f \sysArgs0: {Middle blue pen color and white background}
|
|
ClearScreen! {Erase all screen data}
|
|
$4029 Pos= {Set cursor to an address in middle of screen}
|
|
StringHelloWorld PrintText! {Print the friendly greeting}
|
|
[do loop] {Loop forever and do nothing}
|
|
|