Compare commits
2 commits
3c8525dcca
...
c779cd0d3f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c779cd0d3f | ||
|
|
b0c4b664f2 |
6 changed files with 45 additions and 10 deletions
|
|
@ -240,6 +240,7 @@ procedure freadreal(var v:real;var f:file); external;
|
||||||
procedure openchannel(name:filenamestr; var f:file; mode:filemode; var error:integer); external;
|
procedure openchannel(name:filenamestr; var f:file; mode:filemode; var error:integer); external;
|
||||||
procedure open(var f:file; name:pathnamestr; mode: filemode); external;
|
procedure open(var f:file; name:pathnamestr; mode: filemode); external;
|
||||||
procedure noecho(var f:file; noecho:boolean; var old:boolean); external;
|
procedure noecho(var f:file; noecho:boolean; var old:boolean); external;
|
||||||
|
procedure nointr(var f:file; aBool:boolean; var old:boolean); external;
|
||||||
|
|
||||||
procedure intstr(v:integer; fieldWith:integer; var rbuf:string);
|
procedure intstr(v:integer; fieldWith:integer; var rbuf:string);
|
||||||
external;
|
external;
|
||||||
|
|
@ -269,8 +270,8 @@ procedure TextDefault; external;
|
||||||
|
|
||||||
procedure PTerm; external; (* from runtime.s *)
|
procedure PTerm; external; (* from runtime.s *)
|
||||||
procedure PExec(prgfile:pathnamestr; var args:PArgVec; argCount:integer;var error:integer); external;
|
procedure PExec(prgfile:pathnamestr; var args:PArgVec; argCount:integer;var error:integer); external;
|
||||||
procedure PExec2(prgfile:pathnamestr; arg1:string; var error:integer); external;
|
procedure PExec1(prgfile:pathnamestr; arg1:string; var error:integer); external;
|
||||||
procedure PExec3(prgfile:pathnamestr; arg1, arg2:string; var error:integer); external;
|
procedure PExec2(prgfile:pathnamestr; arg1, arg2:string; var error:integer); external;
|
||||||
function ParamStr(i:integer):string; external;
|
function ParamStr(i:integer):string; external;
|
||||||
function ParamCount():integer; external;
|
function ParamCount():integer; external;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2563,6 +2563,16 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure nointr(var f:file;aBool:boolean;var old:boolean);
|
||||||
|
begin
|
||||||
|
if f.typ <> IOChannel then
|
||||||
|
fileerror(f, IOInvalidOp)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
old := f.nointr;
|
||||||
|
f.nointr := nointr;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
(*
|
(*
|
||||||
implementation of Xorshift algorithm by George Marsaglia,
|
implementation of Xorshift algorithm by George Marsaglia,
|
||||||
see: Marsaglia, George (July 2003).
|
see: Marsaglia, George (July 2003).
|
||||||
|
|
@ -2599,6 +2609,7 @@ begin
|
||||||
if ord(aChar) <= ord('z') then
|
if ord(aChar) <= ord('z') then
|
||||||
upcase := chr(ord(aChar) - 32)
|
upcase := chr(ord(aChar) - 32)
|
||||||
else
|
else
|
||||||
|
upcase := aChar
|
||||||
else
|
else
|
||||||
upcase := aChar;
|
upcase := aChar;
|
||||||
end;
|
end;
|
||||||
|
|
@ -2664,14 +2675,14 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure PExec2(prgfile:pathnamestr; arg1:string; var error:integer);
|
procedure PExec1(prgfile:pathnamestr; arg1:string; var error:integer);
|
||||||
var args:PArgVec;
|
var args:PArgVec;
|
||||||
begin
|
begin
|
||||||
args[0] := arg1;
|
args[0] := arg1;
|
||||||
PExec(prgfile, args, 1, error);
|
PExec(prgfile, args, 1, error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure PExec3(prgfile:pathnamestr; arg1, arg2:string; var error:integer);
|
procedure PExec2(prgfile:pathnamestr; arg1, arg2:string; var error:integer);
|
||||||
var args:PArgVec;
|
var args:PArgVec;
|
||||||
begin
|
begin
|
||||||
args[0] := arg1;
|
args[0] := arg1;
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
(* Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details *)
|
(* Copyright 2021-2024 Sebastian Lederer. See the file LICENSE.md for details *)
|
||||||
{$H384}
|
{$H600}
|
||||||
{$S64}
|
{$S64}
|
||||||
program PascalCompiler;
|
program PascalCompiler;
|
||||||
{$R+}
|
{$R+}
|
||||||
|
|
|
||||||
|
|
@ -324,7 +324,7 @@ begin
|
||||||
PExec(EDITORPROG, args, 3, error);
|
PExec(EDITORPROG, args, 3, error);
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
PExec2(EDITORPROG, ShellWorkFile, error);
|
PExec1(EDITORPROG, ShellWorkFile, error);
|
||||||
writeln('PExec error ', error);
|
writeln('PExec error ', error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -334,7 +334,7 @@ var filename:filenamestr;
|
||||||
begin
|
begin
|
||||||
requireWorkfile;
|
requireWorkfile;
|
||||||
filename := replaceExtension(ShellWorkFile, '.s');
|
filename := replaceExtension(ShellWorkFile, '.s');
|
||||||
PExec2(ASMPROG, filename, error);
|
PExec1(ASMPROG, filename, error);
|
||||||
writeln('PExec error ', error);
|
writeln('PExec error ', error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -344,7 +344,7 @@ var filename:filenamestr;
|
||||||
begin
|
begin
|
||||||
requireWorkfile;
|
requireWorkfile;
|
||||||
filename := replaceExtension(ShellWorkFile, '.pas');
|
filename := replaceExtension(ShellWorkFile, '.pas');
|
||||||
PExec3(COMPILERPROG, '-S', filename, error);
|
PExec2(COMPILERPROG, '-S', filename, error);
|
||||||
writeln('PExec error ', error);
|
writeln('PExec error ', error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -354,7 +354,7 @@ var filename:filenamestr;
|
||||||
begin
|
begin
|
||||||
requireWorkfile;
|
requireWorkfile;
|
||||||
filename := replaceExtension(ShellWorkFile, '.pas');
|
filename := replaceExtension(ShellWorkFile, '.pas');
|
||||||
PExec2(COMPILERPROG, filename, error);
|
PExec1(COMPILERPROG, filename, error);
|
||||||
writeln('PExec error ', error);
|
writeln('PExec error ', error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
@ -373,7 +373,7 @@ end;
|
||||||
procedure krunch;
|
procedure krunch;
|
||||||
var error:integer;
|
var error:integer;
|
||||||
begin
|
begin
|
||||||
PExec2(RECLAIMPROG, DefaultVolume, error);
|
PExec1(RECLAIMPROG, DefaultVolume, error);
|
||||||
writeln('PExec error ', error);
|
writeln('PExec error ', error);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ type Framebuffer struct {
|
||||||
paletteSlot word
|
paletteSlot word
|
||||||
vmem [VmemWords]word
|
vmem [VmemWords]word
|
||||||
readCount int
|
readCount int
|
||||||
|
paletteChanged bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Framebuffer) initialize() {
|
func (f *Framebuffer) initialize() {
|
||||||
|
|
@ -104,6 +105,26 @@ func (f *Framebuffer) readPalette() word {
|
||||||
return word(0)
|
return word(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (f *Framebuffer) startFrame() {
|
||||||
|
// when the palette changes, we
|
||||||
|
// need to redraw every pixel
|
||||||
|
// to get the new colors
|
||||||
|
if f.paletteChanged {
|
||||||
|
oldRAddr := f.readAddr
|
||||||
|
oldWAddr := f.writeAddr
|
||||||
|
f.readAddr = 0
|
||||||
|
f.writeAddr = 0
|
||||||
|
|
||||||
|
for i := 0; i < VmemWords; i++ {
|
||||||
|
f.writeVmem(f.readVmem())
|
||||||
|
}
|
||||||
|
|
||||||
|
f.readAddr = oldRAddr
|
||||||
|
f.writeAddr = oldWAddr
|
||||||
|
f.paletteChanged = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (f *Framebuffer) writePalette(value word) {
|
func (f *Framebuffer) writePalette(value word) {
|
||||||
// 4 bits per color channel
|
// 4 bits per color channel
|
||||||
r := uint8((value & 0b111100000000) >> 8)
|
r := uint8((value & 0b111100000000) >> 8)
|
||||||
|
|
@ -116,6 +137,7 @@ func (f *Framebuffer) writePalette(value word) {
|
||||||
b = b << 4
|
b = b << 4
|
||||||
|
|
||||||
f.palette[f.paletteSlot] = color.RGBA{r,g,b,0}
|
f.palette[f.paletteSlot] = color.RGBA{r,g,b,0}
|
||||||
|
f.paletteChanged = true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *Framebuffer) readCtl() word {
|
func (f *Framebuffer) readCtl() word {
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ type Game struct{
|
||||||
func (g *Game) Update() error {
|
func (g *Game) Update() error {
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
|
|
||||||
|
framebuffer.startFrame()
|
||||||
for i := 0; i < g.stepsPerFrame; i++ {
|
for i := 0; i < g.stepsPerFrame; i++ {
|
||||||
err := cpu.step()
|
err := cpu.step()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue