rk86 2.0.25 → 2.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/rk86.js +162 -19
package/package.json
CHANGED
package/rk86.js
CHANGED
|
@@ -2870,6 +2870,22 @@ var init_catalog_data = __esm(() => {
|
|
|
2870
2870
|
checkSum: 60909,
|
|
2871
2871
|
leadingE6: false
|
|
2872
2872
|
},
|
|
2873
|
+
{
|
|
2874
|
+
name: "boulder.rkr",
|
|
2875
|
+
title: "\u0418\u0433\u0440\u0430 Boulder Dash",
|
|
2876
|
+
description: "",
|
|
2877
|
+
screenshots: [
|
|
2878
|
+
"boulder.rkr-1.png",
|
|
2879
|
+
"boulder.rkr-2.png",
|
|
2880
|
+
"boulder.rkr-3.png"
|
|
2881
|
+
],
|
|
2882
|
+
start: 0,
|
|
2883
|
+
end: 16129,
|
|
2884
|
+
size: 16130,
|
|
2885
|
+
entry: 0,
|
|
2886
|
+
checkSum: 4539,
|
|
2887
|
+
leadingE6: false
|
|
2888
|
+
},
|
|
2873
2889
|
{
|
|
2874
2890
|
name: "chars.bin",
|
|
2875
2891
|
title: "\u041F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0442\u0430\u0431\u043B\u0438\u0446\u0443 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \u0420\u0430\u0434\u0438\u043E-86\u0420\u041A",
|
|
@@ -2951,6 +2967,18 @@ var init_catalog_data = __esm(() => {
|
|
|
2951
2967
|
checkSum: 64981,
|
|
2952
2968
|
leadingE6: false
|
|
2953
2969
|
},
|
|
2970
|
+
{
|
|
2971
|
+
name: "mon32-color.bin",
|
|
2972
|
+
title: "\u041C\u043E\u043D\u0438\u0442\u043E\u0440 32\u041A\u0411 \u0441 visible field-attribute mode (i8275 reset byte 4 = 0xD3 \u0432\u043C\u0435\u0441\u0442\u043E vanilla 0x93). \u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442\u0441\u044F \u0434\u043B\u044F \u0446\u0432\u0435\u0442\u043D\u044B\u0445 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C \u0434\u043B\u044F \u0420\u041A, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043D\u044B \u043D\u0430 \u044D\u0442\u043E\u0442 \u0440\u0435\u0436\u0438\u043C. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044F \u0447\u0435\u0440\u0435\u0437 URL-\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 `?monitor=mon32-color.bin` (web) \u0438\u043B\u0438 `-m static/files/mon32-color.bin` (terminal).",
|
|
2973
|
+
description: "",
|
|
2974
|
+
screenshots: [],
|
|
2975
|
+
start: 0,
|
|
2976
|
+
end: 2047,
|
|
2977
|
+
size: 2048,
|
|
2978
|
+
entry: 0,
|
|
2979
|
+
checkSum: 21013,
|
|
2980
|
+
leadingE6: false
|
|
2981
|
+
},
|
|
2954
2982
|
{
|
|
2955
2983
|
name: "mon32.bin",
|
|
2956
2984
|
title: '\u041E\u0440\u0438\u0433\u0438\u043D\u0430\u043B\u044C\u043D\u044B\u0439 <a href="https://github.com/begoon/rk86-maximite/blob/master/monitor/monitor32.asm">\u041C\u043E\u043D\u0438\u0442\u043E\u0440 32\u041A\u0411</a>',
|
|
@@ -3021,6 +3049,22 @@ var init_catalog_data = __esm(() => {
|
|
|
3021
3049
|
checkSum: 20998,
|
|
3022
3050
|
leadingE6: false
|
|
3023
3051
|
},
|
|
3052
|
+
{
|
|
3053
|
+
name: "piton.rkr",
|
|
3054
|
+
title: "\u0418\u0433\u0440\u0430 \u041F\u0438\u0442\u043E\u043D",
|
|
3055
|
+
description: "",
|
|
3056
|
+
screenshots: [
|
|
3057
|
+
"piton.rkr-1.png",
|
|
3058
|
+
"piton.rkr-2.png",
|
|
3059
|
+
"piton.rkr-3.png"
|
|
3060
|
+
],
|
|
3061
|
+
start: 0,
|
|
3062
|
+
end: 22143,
|
|
3063
|
+
size: 22144,
|
|
3064
|
+
entry: 0,
|
|
3065
|
+
checkSum: 10676,
|
|
3066
|
+
leadingE6: false
|
|
3067
|
+
},
|
|
3024
3068
|
{
|
|
3025
3069
|
name: "psi_1v3.rkr",
|
|
3026
3070
|
title: '<a href="./psi_1v3.rkr/psi_1v3.txt">\u0423\u0442\u0438\u043B\u0438\u0442\u0430 \u0434\u043B\u044F \u043E\u043F\u044B\u0442\u043E\u0432 \u0441 \u0412\u041375/\u0412\u042257</a>',
|
|
@@ -3051,6 +3095,21 @@ var init_catalog_data = __esm(() => {
|
|
|
3051
3095
|
checkSum: 16294,
|
|
3052
3096
|
leadingE6: false
|
|
3053
3097
|
},
|
|
3098
|
+
{
|
|
3099
|
+
name: "rise.rkr",
|
|
3100
|
+
title: "\u0418\u0433\u0440\u0430 Rise",
|
|
3101
|
+
description: "",
|
|
3102
|
+
screenshots: [
|
|
3103
|
+
"rise.rkr-1.png",
|
|
3104
|
+
"rise.rkr-2.png"
|
|
3105
|
+
],
|
|
3106
|
+
start: 0,
|
|
3107
|
+
end: 9649,
|
|
3108
|
+
size: 9650,
|
|
3109
|
+
entry: 0,
|
|
3110
|
+
checkSum: 54320,
|
|
3111
|
+
leadingE6: false
|
|
3112
|
+
},
|
|
3054
3113
|
{
|
|
3055
3114
|
name: "rk8080pre.bin",
|
|
3056
3115
|
title: '\u0422\u0435\u0441\u0442 "8080 Preliminary tests" \u043E\u0442 Ian Bartholomew',
|
|
@@ -3157,6 +3216,20 @@ var init_catalog_data = __esm(() => {
|
|
|
3157
3216
|
checkSum: 12710,
|
|
3158
3217
|
leadingE6: false
|
|
3159
3218
|
},
|
|
3219
|
+
{
|
|
3220
|
+
name: "tree2025.rk",
|
|
3221
|
+
title: "\u041D\u043E\u0432\u043E\u0433\u043E\u0434\u043D\u044F\u044F \u0451\u043B\u043A\u0430 2025.",
|
|
3222
|
+
description: "\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 transparent field-attribute mode i8275 \u2014 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\n\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u0442\u0441\u044F \u0441 \u0434\u0435\u0444\u043E\u043B\u0442\u043D\u044B\u043C `mon32.bin`.",
|
|
3223
|
+
screenshots: [
|
|
3224
|
+
"tree2025.rk-1.png"
|
|
3225
|
+
],
|
|
3226
|
+
start: 0,
|
|
3227
|
+
end: 615,
|
|
3228
|
+
size: 616,
|
|
3229
|
+
entry: 0,
|
|
3230
|
+
checkSum: 48507,
|
|
3231
|
+
leadingE6: false
|
|
3232
|
+
},
|
|
3160
3233
|
{
|
|
3161
3234
|
name: "trex.rk",
|
|
3162
3235
|
title: "\u0418\u0433\u0440\u0430 T-Rex (\u0422\u0438\u0440\u0430\u043D\u043D\u043E\u0437\u0430\u0432\u0440)",
|
|
@@ -4083,7 +4156,7 @@ import { basename } from "path";
|
|
|
4083
4156
|
// packages/rk86/package.json
|
|
4084
4157
|
var package_default = {
|
|
4085
4158
|
name: "rk86",
|
|
4086
|
-
version: "2.0.
|
|
4159
|
+
version: "2.0.26",
|
|
4087
4160
|
description: "\u042D\u043C\u0443\u043B\u044F\u0442\u043E\u0440 \u0420\u0430\u0434\u0438\u043E-86\u0420\u041A (Intel 8080) \u0434\u043B\u044F \u0442\u0435\u0440\u043C\u0438\u043D\u0430\u043B\u0430",
|
|
4088
4161
|
bin: {
|
|
4089
4162
|
rk86: "rk86.js"
|
|
@@ -5427,6 +5500,7 @@ class Memory {
|
|
|
5427
5500
|
this.video_screen_size_y = this.video_screen_size_y_buf;
|
|
5428
5501
|
this.machine.screen.set_geometry(this.video_screen_size_x, this.video_screen_size_y);
|
|
5429
5502
|
}
|
|
5503
|
+
this.machine.screen.transparent_attr = (byte & 64) === 0;
|
|
5430
5504
|
return;
|
|
5431
5505
|
}
|
|
5432
5506
|
if (vt57_reg === 57352 && byte === 128) {
|
|
@@ -5634,6 +5708,7 @@ class Screen {
|
|
|
5634
5708
|
light_pen_active;
|
|
5635
5709
|
video_memory_base = 0;
|
|
5636
5710
|
video_memory_size = 0;
|
|
5711
|
+
transparent_attr = false;
|
|
5637
5712
|
ready = false;
|
|
5638
5713
|
renderer;
|
|
5639
5714
|
constructor(machine) {
|
|
@@ -6056,36 +6131,104 @@ class TerminalRenderer {
|
|
|
6056
6131
|
const dim = "\x1B[2m";
|
|
6057
6132
|
const reset = "\x1B[0m";
|
|
6058
6133
|
const w = screen.width;
|
|
6134
|
+
const ANSI_FG = ["37", "33", "35", "31", "36", "32", "34", "30"];
|
|
6059
6135
|
let output = "\x1B[H";
|
|
6060
6136
|
output += `${dim}\u250C${"\u2500".repeat(w)}\u2510${reset}
|
|
6061
6137
|
`;
|
|
6138
|
+
const transparent = screen.transparent_attr;
|
|
6139
|
+
const blinkOff = Math.floor(Date.now() / 320) % 2 === 1;
|
|
6140
|
+
const FA_PENDING = -1;
|
|
6062
6141
|
let addr = screen.video_memory_base;
|
|
6063
6142
|
let frameStopped = false;
|
|
6143
|
+
let color = 0;
|
|
6144
|
+
let blink = false;
|
|
6064
6145
|
for (let y = 0;y < screen.height; y++) {
|
|
6065
6146
|
let line = `${dim}\u2502${reset}`;
|
|
6066
|
-
|
|
6147
|
+
const cells = new Array(w);
|
|
6148
|
+
if (transparent) {
|
|
6149
|
+
const fifo = [];
|
|
6150
|
+
let fifoFlag = false;
|
|
6151
|
+
let cellCount = 0;
|
|
6152
|
+
let rowStopped = frameStopped;
|
|
6153
|
+
let bytesFetched = 0;
|
|
6154
|
+
while (cellCount < w && !rowStopped) {
|
|
6155
|
+
const raw = memory.read(addr + bytesFetched);
|
|
6156
|
+
bytesFetched++;
|
|
6157
|
+
if (fifoFlag) {
|
|
6158
|
+
fifo.push(raw);
|
|
6159
|
+
fifoFlag = false;
|
|
6160
|
+
continue;
|
|
6161
|
+
}
|
|
6162
|
+
if (raw >= 240) {
|
|
6163
|
+
cells[cellCount++] = { ch: 0, color, blink };
|
|
6164
|
+
rowStopped = true;
|
|
6165
|
+
if (raw >= 248)
|
|
6166
|
+
frameStopped = true;
|
|
6167
|
+
} else if (raw >= 192) {
|
|
6168
|
+
cells[cellCount++] = { ch: 0, color, blink };
|
|
6169
|
+
} else if (raw >= 128) {
|
|
6170
|
+
color = (raw & 1) << 2 | (raw & 12) >> 2;
|
|
6171
|
+
blink = (raw & 2) !== 0;
|
|
6172
|
+
cells[cellCount++] = { ch: FA_PENDING, color, blink };
|
|
6173
|
+
fifoFlag = true;
|
|
6174
|
+
} else {
|
|
6175
|
+
cells[cellCount++] = { ch: raw, color, blink };
|
|
6176
|
+
}
|
|
6177
|
+
}
|
|
6178
|
+
while (cellCount < w)
|
|
6179
|
+
cells[cellCount++] = { ch: 0, color, blink };
|
|
6180
|
+
let fifoIdx = 0;
|
|
6181
|
+
for (let x = 0;x < w; ++x) {
|
|
6182
|
+
if (cells[x].ch === FA_PENDING) {
|
|
6183
|
+
cells[x].ch = (fifo[fifoIdx] ?? 0) & 127;
|
|
6184
|
+
fifoIdx++;
|
|
6185
|
+
}
|
|
6186
|
+
}
|
|
6187
|
+
addr += bytesFetched;
|
|
6188
|
+
if (addr - screen.video_memory_base < (y + 1) * w) {
|
|
6189
|
+
addr = screen.video_memory_base + (y + 1) * w;
|
|
6190
|
+
}
|
|
6191
|
+
} else {
|
|
6192
|
+
let rowStopped = frameStopped;
|
|
6193
|
+
for (let x = 0;x < w; x++) {
|
|
6194
|
+
const raw = memory.read(addr + x);
|
|
6195
|
+
let ch;
|
|
6196
|
+
if (rowStopped) {
|
|
6197
|
+
ch = 0;
|
|
6198
|
+
} else if (raw >= 240) {
|
|
6199
|
+
ch = 0;
|
|
6200
|
+
rowStopped = true;
|
|
6201
|
+
if (raw >= 248)
|
|
6202
|
+
frameStopped = true;
|
|
6203
|
+
} else if (raw >= 192) {
|
|
6204
|
+
ch = 0;
|
|
6205
|
+
} else if (raw >= 128) {
|
|
6206
|
+
color = (raw & 1) << 2 | (raw & 12) >> 2;
|
|
6207
|
+
blink = (raw & 2) !== 0;
|
|
6208
|
+
ch = 0;
|
|
6209
|
+
} else {
|
|
6210
|
+
ch = raw;
|
|
6211
|
+
}
|
|
6212
|
+
cells[x] = { ch, color, blink };
|
|
6213
|
+
}
|
|
6214
|
+
addr += w;
|
|
6215
|
+
}
|
|
6216
|
+
let prevColor = -1;
|
|
6067
6217
|
for (let x = 0;x < w; x++) {
|
|
6068
|
-
const
|
|
6069
|
-
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
rowStopped = true;
|
|
6075
|
-
if (raw >= 248)
|
|
6076
|
-
frameStopped = true;
|
|
6077
|
-
} else if (raw >= 128) {
|
|
6078
|
-
ch = " ";
|
|
6079
|
-
} else {
|
|
6080
|
-
ch = rk86char(raw);
|
|
6218
|
+
const cell = cells[x];
|
|
6219
|
+
const ch = cell.blink && blinkOff ? 0 : cell.ch;
|
|
6220
|
+
const glyph = rk86char(ch);
|
|
6221
|
+
if (cell.color !== prevColor) {
|
|
6222
|
+
line += `\x1B[${ANSI_FG[cell.color]}m`;
|
|
6223
|
+
prevColor = cell.color;
|
|
6081
6224
|
}
|
|
6082
6225
|
if (x === screen.cursor_x && y === screen.cursor_y) {
|
|
6083
|
-
line += `\x1B[4m${
|
|
6226
|
+
line += `\x1B[4m${glyph}\x1B[24m`;
|
|
6084
6227
|
} else {
|
|
6085
|
-
line +=
|
|
6228
|
+
line += glyph;
|
|
6086
6229
|
}
|
|
6087
6230
|
}
|
|
6088
|
-
line += `${dim}\u2502${reset}`;
|
|
6231
|
+
line += `${reset}${dim}\u2502${reset}`;
|
|
6089
6232
|
output += line + `
|
|
6090
6233
|
`;
|
|
6091
6234
|
}
|
|
@@ -6210,7 +6353,7 @@ function setupKeyboard(keyboard) {
|
|
|
6210
6353
|
}
|
|
6211
6354
|
});
|
|
6212
6355
|
}
|
|
6213
|
-
var MON32_B64 = "wzb4w2P+w5j7w7r8w0b8w7r8wwH+w6X8wyL5w3L+w3v6w3/
|
|
6356
|
+
var MON32_B64 = "wzb4w2P+w5j7w7r8w0b8w7r8wwH+w6X8wyL5w3L+w3v6w3/6w7b6w0n7wxb7" + "w876w1L/w1b/PooyA4Axz3bNzvohAHYRX3YOAM3t+SHPdiIcdiFa/80i+c3O" + "+iH/dSIxdiEqHSIvdj7DMiZ2Mc92IWb/zSL5MgKAPTICoM3u+CFs+OUhM3Z+" + "/ljK0//+VcoA8PXNLPkqK3ZNRCopdusqJ3bx/kTKxfn+Q8rX+f5Gyu35/lPK" + "9Pn+VMr/+f5Nyib6/kfKP/r+ScqG+v5Pyi37/kzKCPr+Uspo+sMA8D4zvcrx" + "+OUhnv/NIvnhK8Pz+CEzdgYAzWP+/gjK3Pj+f8rc+MS5/Hf+Dcoa+f4uymz4" + "Bv8+Ur3Krvojw/P4eBcRM3YGAMl+p8jNufwjwyL5ISd2ES12DgDN7fkRNHbN" + "WvkiJ3YiKXbYPv8yLXbNWvkiKXbYzVr5Iit22MOu+iEAABoT/g3Kjvn+LMj+" + "IMpd+dYw+q76/gr6gvn+Efqu+v4X8q761gdPKSkpKdqu+gnDXfk3yXy6wH27" + "yc2k+c2Q+cKi+TMzySPJzXL+/gPAzc76w6765SFs/80i+eHJfsXNpfw+IM25" + "/MHJzXj7zbn5zZb5feYPysX5w8j5Cr7K5vnNePvNufkKzbr5A82W+cPX+XHN" + "mfnD7fl5vsx4+82W+cP0+X4CA82Z+cP/+c14+363+hX6/iDSF/o+Ls25/M2W" + "+X3mD8oI+sML+s14+825+eXN7vjh0jv65c1a+X3hdyPDJvrNkPnKWvrrIiN2" + "fjIldjb3PsMyMAAhov8iMQAxGHbB0eHx+SoWdsMmdj6QMgOgIgGgOgCgAgPN" + "mfnDbfoqAnbJ5SoAdn7hyTotdrfKkfp7Mi92zbb6zXj76814++vFzRb7YGnN" + "ePvRzZD5yOvNePs+P825/MNs+D7/zf/65Qnrzf364Qnr5c0K+z7/zf/64eUh" + "AcA2ACs2TTYdNpk2kyM2J35+5iDK4fohCOA2gC4ENtA2diw2IzZJLgg2pOHJ" + "PgjNmPtHPgjNmPtPyT4IzZj7d82Z+cMK+wEAAH6BT/XNkPnKn/nxeI5HzZn5" + "wxn7ebfKNfsyMHblzRb74c14++vNePvr5WBpzXj74cUBAADNRvwF4+PCTfsO" + "5s1G/M2Q++vNkPvrzYb7IQAAzZD7DubNRvzhzZD7w876xc2w+XzNpfx9zbr5" + "wclOzUb8zZn5w4b7TM1G/E3DRvzlxdVXPoAyCOAhAAA5MQAAIg12DgA6AoAP" + "Dw8P5gFf8XnmfwdPJgAlyjT88ToCgA8PDw/mAbvKv/uxTxU6L3bC3PvWEkfx" + "BcLd+xQ6AoAPDw8P5gFferfyC/x5/ubC//uvMi52wwn8/hnCt/s+/zIudhYJ" + "FcK3+yEE4DbQNnYjNiM2ST4nMgHAPuAyAcAuCDakKg12+ToudqnDofwqDXb5" + "zc76erfyrvrNpPnDnPvlxdX1PoAyCOAhAAA5MQAAFgjxeQdPPgGpMgKAOjB2" + "R/EFwmb8PgCpMgKAFTowdsJ6/NYOR/EFwnv8FBXCWPz5IQTgNtA2diM2IzZJ" + "PicyAcA+4DIBwC4INqTx0cHhyfUPDw8Pza788eYP/gr6t/zGB8YwT/XF1eXN" + "Af4hhf3lKgJ26yoAdjoEdj367vzKZf3ic/151iBPDfrp/MXNuf3Bw938rzIE" + "dsl55n9P/h/Ko/3+DMqy/f4NyvP9/grKR/3+CMrW/f4Yyrn9/hnK4v3+GsrF" + "/f4byp79/gfCOP0B8AV4+z3CKP148z3CLv0Nwif9yXHNuf16/gPAe/4IwM3i" + "/Xr+G8LF/eXVIcJ3ERB4AZ4HGncjEwt5sMJY/dHhyXn+WcLp/M2y/T4Cw+r8" + "edYgTw0+BPrq/MXNxf3Bw3f9IgB26yICdj6AMgHAfTIAwHwyAMDh0cHxyT4B" + "w+r8IfR/ESUJr3crG3uywqn9EQgDIcJ3yXsjHP5HwB4IAcD/CXr+GwFOAMLT" + "/RYCAbD4FAnJeysd/gjAHkcBQAAJev4DAbL/wvD9FhwBUAcVCcl9k9L5/SVv" + "HggBCAAJyToCgOaAyg7+OgV2t8DlKgl2zXL+vW/KKv4+ATILdiYVryIJduEy" + "BXbJJcIh/jzKIv48ylH+xQEDUM0n/cE6C3Ym4D0yC3bKTP4mQD7/wyL+OgKA" + "5oDKUf46BnYvMgZ2wxr+zQH+t8pj/q8yBXY6CXbJOgKA5oDCff4+/smvMgCA" + "MgKAOgZ25gH2BjIDgDoBgDzCl/49yeUuASYHfQ9vLzIAgDoBgC+3wrP+JfKc" + "/j7/4ckuIDoBgC+3yq/+LcK1/i4ILQfSw/58ZW/+Acr6/trz/gcHB8YgtP5f" + "wgb/PiDhyQkKDX8IGRgaDB8bAAECAwQFfCHq/sP+/nwh4v6Fb37+QOHY5W86" + "AoBn5kDCGv99/kD6P//mH+HJOgZ2t8oq/33+QPoq//Ygb3zmIMI//33+QPo7" + "/33uIOHJfeYvb33+QOHw5W/mD/4MffpQ/+4Q4ckqMXbJIjF2yR9yYWRpby04" + "NnJrAA0KLS0+AA0KGBgYGAANCiBQQy0NCiBITC0NCiBCQy0NCiBERS0NCiBT" + "UC0NCiBBRi0ZGRkZGRkACCAIACIWdvXhIh524SsiFHYhAAA5MR525dXFKhR2" + "Mc92zXj76yojds2Q+cJs+DoldnfDbPghc//NIvkhFHYGBl4jVsXl6814+83u" + "+NL2/81a+dHV63Irc+HBBSPC3v/J//8=";
|
|
6214
6357
|
function decodeMon32() {
|
|
6215
6358
|
return Array.from(new Uint8Array(Uint8Array.from(atob(MON32_B64), (c) => c.charCodeAt(0))));
|
|
6216
6359
|
}
|