Source codes for MS Basic-80 for Okean-240.2 (R5 BIOS)

This commit is contained in:
Роман Бойков 2026-08-26 12:46:36 +03:00
parent 2413b7903a
commit 0597056403
7 changed files with 15787 additions and 0 deletions

9
MB/.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,9 @@
{
"recommendations": [
"maziac.asm-code-lens",
"maziac.dezog",
"maziac.hex-hover-converter",
"maziac.z80-instruction-set",
"maziac.sna-fileviewer"
]
}

42
MB/.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,42 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "dezog",
"request": "launch",
"name": "Simulator - ZX48K Spectrum",
"remoteType": "zsim",
"zsim": {
"visualMemory": true,
"memoryModel": "ZX48K",
"ulaScreen": "spectrum",
"zxKeyboard": "spectrum",
"zxBeeper": true
},
"sjasmplus": [
{
"path": "MB_OK240.sld"
}
],
"commandsAfterLaunch": [],
"history": {
"reverseDebugInstructionCount": 1000000,
"spotCount": 10,
"codeCoverageEnabled": true
},
"startAutomatically": false,
"rootFolder": "${workspaceFolder}",
"topOfStack": "stack_top",
"loadObjs": [
{ "path": "MB_OK240.com", "start": "0x0100" }
],
"execAddress": "0x0100"
}
]
}

32
MB/.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,32 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "make MB_OK240 (sjasmplus)",
"type": "shell",
"command": "sjasmplus",
"args": [
"--exp=MB_OK240.inc",
"--fullpath",
"--nofakes",
"--i8080",
"MB_OK240.asm"
],
"problemMatcher": {
"owner": "sjasmplus",
"fileLocation": "autoDetect",
"pattern": {
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"severity": 3,
"message": 4
}
},
"group": {
"kind": "build",
"isDefault": true
}
}
]
}

15221
MB/MB_OK240.asm Normal file

File diff suppressed because it is too large Load Diff

27
MB/README.md Normal file
View File

@ -0,0 +1,27 @@
# Ocean-240.2 MS Basic
Source codes of Microsoft Basic for Ocean-240.2 computer (BASIC-80 R.5/240).
Based on Microsoft BASIC-80 v5.21.
- In Z80 mnemonics, but limited for i8080 instruction set.
- I tried to keep the original label names as they are in the source codes published by Microsoft.
- Small bug with cond jump to data table fixed.
## Extended Ocean-240.2 operators
* CLS - Clear screen;
* SCRN - Set graphics mode;
* COLOR - Set foreground colors;
* CURS - Move cursor to specified position;
* PLOT - Draw line from cursor pos to specified position;
* RECT - Draw rectangle with diagonal from cursor pos to specified position;
* GPRINT - Print graphics screen to printer;
* TONE - unimplemented;
## Compile
Code is located in memory at address: 0x100
sjasmplus --sld=MB_OK240.sld --sym=MB_OK240.labels --raw=MB_OK240.obj --fullpath MB_OK240.asm
To compile sources, use [sjasmplus Z80 assembler](https://github.com/z00m128/sjasmplus).

456
MB/equates.inc Normal file
View File

@ -0,0 +1,456 @@
; ---------------------------------------------------
; STATEMENTS
; ---------------------------------------------------
_STMDSP EQU 128 ; 0x80
_END EQU 129 ; 0x81
_FOR EQU 130 ; 0x82
_NEXT EQU 131 ; 0x83
_DATA EQU 132 ; 0x84
_INPUT EQU 133 ; 0x85
_DIM EQU 134 ; 0x86
_READ EQU 135 ; 0x87
_LET EQU 136 ; 0x88
_GOTO EQU 137 ; 0x89
_RUN EQU 138 ; 0x8a
_IF EQU 139 ; 0x8b
_RESTORE EQU 140 ; 0x8c
_GOSUB EQU 141 ; 0x8d
_RETUR EQU 142 ; 0x8e
_REM EQU 143 ; 0x8f
_STOP EQU 144 ; 0x90
_PRINT EQU 145 ; 0x91
_CLEAR EQU 146 ; 0x92
_LIST EQU 147 ; 0x93
_NEW EQU 148 ; 0x94
; ---------------------------------------------------
; 8K AND ABOVE STATEMENTS
; ---------------------------------------------------
_ON EQU 149 ; 0x95
_NULL EQU 150 ; 0x96
_WAIT EQU 151 ; 0x97
_DEF EQU 152 ; 0x98
_POKE EQU 153 ; 0x99
_CONT EQU 154 ; 0x9A
_CSAVE EQU 155 ; 0x9B
_CLOAD EQU 156 ; 0x9C
_OUT EQU 157 ; 0x9D
_LPRINT EQU 158 ; 0x9E
_LLIST EQU 159 ; 0x9F
; ---------------------------------------------------
; LEN2 AND ABOVE STATEMENTS
; ---------------------------------------------------
_WIDTH EQU 161 ; 0xA1
_ELSE EQU 162 ; 0xA2
_TRON EQU 163 ; 0xA3
_TROFF EQU 164 ; 0xA4
_SWAP EQU 165 ; 0xA5
_ERASE EQU 166 ; 0xA6
_EDIT EQU 167 ; 0xA7
_ERROR EQU 168 ; 0xA8
_RESUME EQU 169 ; 0xA9
_DELETE EQU 170 ; 0xAA
_AUTO EQU 171 ; 0xAB
_RENUM EQU 172 ; 0xAC
; ---------------------------------------------------
; EXTENDED AND ABOVE
; ---------------------------------------------------
_DEFSTR EQU 173 ; 0xAD
_DEFINT EQU 174 ; 0xAE
_DEFSNG EQU 175 ; 0xAF
_DEFDBL EQU 176 ; 0xB0
_LINE EQU 177 ; 0xB1
_WHILE EQU 180 ; 0xB4
_WEND EQU 181 ; 0xB5
_CALL EQU 182 ; 0xB6
_WRITE EQU 183 ; 0xB7
_COMMON EQU 184 ; 0xB8
_CHAIN EQU 185 ; 0xB9
_OPTION EQU 186 ; 0xBA
_RANDOMIZE EQU 187 ; 0xBB
; ---------------------------------------------------
; DISK AND ABOVE
; ---------------------------------------------------
_SYSTE EQU 189 ; 0xBD
_OPEN EQU 191 ; 0xBF
_FIELD EQU 192 ; 0xC0
_GET EQU 193 ; 0xC1
_PUT EQU 194 ; 0xC2
_CLOSE EQU 195 ; 0xC3
_LOAD EQU 196 ; 0xC4
_MERGE EQU 197 ; 0xC5
_FILES EQU 198 ; 0xC6
_NAME EQU 199 ; 0xC7
_KILL EQU 200 ; 0xC8
_LSET EQU 201 ; 0xC9
_RSET EQU 202 ; 0xCA
_SAVE EQU 203 ; 0xCB
_RESET EQU 204 ; 0xCC
; ---------------------------------------------------
; NCR VERSION ONES.
; ---------------------------------------------------
_TO EQU 206 ; 0xCE
TOTK EQU 206
_THEN EQU 207 ; 0xCF
THENTK EQU 207
_TAB EQU 208 ; 0xD0
TABTK EQU 208
_STEP EQU 209 ; 0xD1
STEPTK EQU 209 ; 0xD1
_USR EQU 210 ; 0xD2
USRTK EQU 210 ; 0xD2
; ---------------------------------------------------
; 8K FUNCTIONS
; ---------------------------------------------------
_FN EQU 211 ; 0xD3
FNTK EQU 211
_SPC EQU 212 ; 0xD4
SPCTK EQU 212
_NOT EQU 213 ; 0xD5
NOTTK EQU 213
; ---------------------------------------------------
; LEN2 TOKENS
; ---------------------------------------------------
_ERL EQU 214 ; 0xD6
ERLTK EQU 214 ; 0xD6
_ERR EQU 215 ; 0xD7
ERCTK EQU 215 ; 0xD7
; EXTENDED TOKENS
_STRIN EQU 216 ; 0xD8
_USING EQU 217 ; 0xD9
USINTK EQU 217 ; 0xD9
_INSTR EQU 218 ; 0xDA
INSRTK EQU 218 ; 0xDA
;_DUMMY EQU 219 ; 0xDB
SNGQTK EQU 219 ; 0xDB
_VARPT EQU 220 ; 0xDC
; ---------------------------------------------------
; NCR VERSION TOKENS
; SPCDSK TOKENS
; ---------------------------------------------------
_INKEY EQU 221 ; 0xDD
; ---------------------------------------------------
; Extended OK-240 operators
; ---------------------------------------------------
EXT_OP_FIRST EQU 224
_CLS EQU 224 ; 0xE0
_SCRN EQU 225 ; 0xE1
_COLOR EQU 226 ; 0xE2
_CURS EQU 227 ; 0xE3
_PLOT EQU 228 ; 0xE4
_RECT EQU 229 ; 0xE5
_GPRINT EQU 230 ; 0xE6
_TONE EQU 231 ; 0xE7
EXT_OP_LAST EQU 231
; ---------------------------------------------------
; OPERATORS
; ---------------------------------------------------
GREATK EQU 0xef
EQULTK EQU 0xf0
LESSTK EQU 0xf1
PLUSTK EQU 0xf2 ; 242
MINUTK EQU 0xf3 ; 243
MULTK EQU 0xf4 ; 244
DIVTK EQU 0xf5
; ---------------------------------------------------
; 8K OPERATORS
; ---------------------------------------------------
EXPTK EQU 246 ; 0xF6
_AND EQU 247 ; 0xF7
_OR EQU 248 ; 0xF8
; ---------------------------------------------------
; EXTENDED OPERATORS
; ---------------------------------------------------
_XOR EQU 249 ; 0xF9
_EQV EQU 250 ; 0xFA
_IMP EQU 251 ; 0xFB
_MOD EQU 252 ; 0xFC
_DUMMY EQU 253 ; 0xFD
IDIVTK EQU 253 ; 0xFD
LSTOPK EQU 253 + 1 - PLUSTK
; ---------------------------------------------------
; FUNCTIONS
; ---------------------------------------------------
;Q EQU 128 ; 0x80
_LEFT_ EQU 129 ; 0x81
ONEFUN EQU 129 ; 0x81
_RIGHT EQU 130 ; 0x82
_MID_ EQU 131 ; 0x83
MIDTK EQU 131 ; 0x83
_SGN EQU 132 ; 0x84
_INT EQU 133 ; 0x85
_ABS EQU 134 ; 0x86
_SQR EQU 135 ; 0x87
SQRTK EQU 135 ; 0x87
_RND EQU 136 ; 0x88
_SIN EQU 137 ; 0x89
; ---------------------------------------------------
; 8K FUNCTIONS
; ---------------------------------------------------
_LOG EQU 138 ; 0x8A
_EXP EQU 139 ; 0x8B
_COS EQU 140 ; 0x8C
_TAN EQU 141 ; 0x8D
_ATN EQU 142 ; 0x8E
_FRE EQU 143 ; 0x8F
_INP EQU 144 ; 0x90
_POS EQU 145 ; 0x91
_LEN EQU 146 ; 0x92
_STR_ EQU 147 ; 0x93
_VAL EQU 148 ; 0x94
_ASC EQU 149 ; 0x95
_CHR_ EQU 150 ; 0x96
_PEEK EQU 151 ; 0x97
_SPACE EQU 152 ; 0x98
_OCT_ EQU 153 ; 0x99
_HEX_ EQU 154 ; 0x9A
_LPOS EQU 155 ; 0x9B
;LASNUM EQU 155 ; 0x9B
; ---------------------------------------------------
; EXTENDED FUNCTIONS
; ---------------------------------------------------
_CINT EQU 156 ; 0x9C
_CSNG EQU 157 ; 0x9D
_CDBL EQU 158 ; 0x9E
_FIX EQU 159 ; 0x9F
; ---------------------------------------------------
; NCR VERSION FUNCTIONS
; DISK FUNCTIONS
; ---------------------------------------------------
_CVI EQU 171 ; 0xAC
_CVS EQU 172 ; 0xAD
_CVD EQU 173 ; 0xAE
_EOF EQU 175 ; 0xB0
_LOC EQU 176 ; 0xB1
_LOF EQU 177 ; 0xB2
_MKI_ EQU 178 ; 0xB3
_MKS_ EQU 179 ; 0xB4
_MKD_ EQU 180 ; 0xB5
; ---------------------------------------------------
; END DISK FUNCTIONS
; ---------------------------------------------------
NUMGFN EQU 2*MIDTK-2*ONEFUN+1 ; 5
; ---------------------------------------------------
; CP/M Entry
; ---------------------------------------------------
WARM_BOOT EQU 0x0000
WARM_BOOT_ADDR EQU WARM_BOOT + 1
BDOS_ENTER EQU 0x0005
BDOS_ENTER_ADDR EQU BDOS_ENTER + 1
DMA_BUFFER EQU 0x80
P_CMD_LINE EQU DMA_BUFFER + 1
TPA EQU 0x100 ; 256
; ---------------------------------------------------
; CP/M functions
; ---------------------------------------------------
C.VER EQU 0x0c ; Get version
C.REST EQU 0x0d ; Init BDOS
C.SDRV EQU 0x0e ; Set current drive
C.OPEN EQU 0x0f ; Open file
C.CLOS EQU 0x10 ; Close file
C.SEAR EQU 0x11 ; Search file
C.SEAR_N EQU 0x12 ; Search next
C.DEL EQU 0x13 ; Delete file
C.MAKE EQU 0x16 ; Create new file
C.RENA EQU 0x17 ; Rename file
C.GDRV EQU 0x19 ; Get current drive
C.BUFF EQU 0x1a ; Set DMA buffer address
; ---------------------------------------------------
; OFFSETS INTO CP/M FCB (FILE CONTROL BLOCK)
; ---------------------------------------------------
FCB.FN EQU 1 ; FILE NAME
FCB.FT EQU 9 ; EXTENSION
FCB.EX EQU 32 ; 0x0C ? ; FILE EXTENT
FCB.RC EQU 38 ; 0x0F ? ; RECORD COUNT = CURRENT EXTENT SIZE
FCB.NR EQU 40 ; 0x20 ? ; NEXT RECORD NUMBER
FCB.RN EQU 33 ; CP/M 2.x Random Record Number
; ---------------------------------------------------
; File access mode
; ---------------------------------------------------
MD.SQI EQU 1 ; seq inp
MD.SQO EQU 2 ; seq out
MD.RND EQU 3 ; random
N1 EQU 11 ; Number of bytes to use from ATNCON
N2 EQU 13 ; Number of bytes to use from SINCON
OCTCON EQU 11 ; EMBEDED OCTAL CONSTANT
HEXCON EQU 12 ; EMBEDED CONSTANT
PTRCON EQU 13 ; A LINE REFERENCE CONSTANT
LINCON EQU 14 ; A LINE NUMBER UNCONVERTED TO POINTER
IN2CON EQU 15 ; SINGLE BYTE (TWO BYTE WITH TOKEN) INTEGER
CONCN2 EQU 16 ; TOKEN RETURNED SECOND TYPE CONSTANT IS SCANNED.
ONECON EQU 17 ; FIRST OF 10 (0-9) INTEGER SPECIAL TOKENS
INTCON EQU 28 ; REGULAR 16 BIT TWO'S COMPLEMENT INT
SNGCON EQU 29 ; SINGLE PREC (4 BYTE) CONSTANT
CONCON EQU 30 ; TOKEN RETURNED BY CHRGET AFTER CONSTANT SCANNED
DBLCON EQU 31 ; DOUBLE PREC (8 BYTE) CONSTANT
; ---------------------------------------------------
; ASCII codes
; ---------------------------------------------------
ASCII_BELL EQU 0x07 ; 7
ASCII_BKSP EQU 0x08 ; 8
ASCII_TAB EQU 0x09 ; 9
ASCII_LF EQU 0x0a ; 10
ASCII_CR EQU 0x0d ; 13
ASCII_DEL EQU 0x7f ; 127
ASCII_ESC EQU 0x1b ;
ASCII_SP EQU 0x20 ; space
ASCII_CUR EQU 0x24 ; $
ASCII_SQ EQU 0x27 ; '
ASCII_BKSL EQU 0x5C ; \
; ---------------------------------------------------
; Key codes
; ---------------------------------------------------
CTRL_C EQU 0x03 ; 3
CTRL_O EQU 0x0f ; 15
CTRL_R EQU 0x12 ; 18
CTRL_U EQU 0x15 ; 21
CTRL_X EQU 0x18 ; 24
CLMWID EQU 0x0e ; 14
CON1 EQU 0x2c20 ; ' ',
CONS1 EQU 0xc6 ; 198
DATPSC EQU 0x80 ; 128
; Offsets into file blocks for specific entries
LOCOFS EQU 0x25 ; OFFSET TO CURLOC BYTES
ORNOFS EQU 0x27 ; OFFSET TO NUMBER OF BYTES
NMLOFS EQU 0x28 ; OFFSET TO BYTES REMAINING IN THE BUFFER
NMLO.C EQU NMLOFS ; OR THE PRINT POSITION ON OUTPUT
DATOFS EQU 0x29 ; OFFSET TO BUFFER
DATOFC EQU DATOFS
DBLKSZ EQU DATOFS + DATPSC
DBLK.C EQU DBLKSZ ; SIZE OF A FILE INFO BLOCK PLUS $CODE
DSKERR EQU 0x31 ; 49
EOFCHR EQU 0x1a ; 26
ERRSN EQU 0x02 ; 2
ERRRG EQU 0x03 ; 3
ERROD EQU 0x04 ; 4
ERRFC EQU 0x05 ; 5
ERROM EQU 0x07
ERROV EQU 0x06 ; 6
ERRUS EQU 0x08 ; 8
ERRBS EQU 0x09 ; 9
ERRDD EQU 0x0a ; 10
ERRDV0 EQU 0x0b ; 11
ERRID EQU 0x0c ; 12
ERRTM EQU 0x0d ; 13
ERRLS EQU 0x0f ; 15
ERRCN EQU 0x11 ; 17
ERRRE EQU 0x14 ; 20
ERRNR EQU 0x13 ; 19
ERRLBO EQU 0x17 ; 23
ERRFN EQU 0x1a ; 26
ERRWH EQU 0x1d ; 29
ERRWE EQU 0x1e ; 30
ERRFOV EQU 0x32 ; 50
ERRIER EQU 0x33 ; 51
ERRBFN EQU 0x34 ; 52
ERRFNF EQU 0x35 ; 53
ERRBFM EQU 0x36 ; 54
ERRFAO EQU 0x37 ; 55
ERRIOE EQU 0x39 ; 57
ERRFAE EQU 0x3a ; 58
ERRDFL EQU 0x3d ; 61
ERRRPE EQU 0x3e ; 62
ERRFDR EQU 0x42 ; 66
ERRTMF EQU 0x43 ; 67
FD.SIZ EQU 0xa9 ; 169
FD.PHY EQU 0xab ; 171
FD.LOG EQU 0xad ; 173
FD.OPS EQU 0xb0 ; 176
FD.DAT EQU 0xb2 ; 178
FNZBLK EQU 0xB2 ; Size of other stuff
INCSTR EQU 1
FORSZC EQU 0x10 ; 16
KBFLEN EQU 0x13E ; 318
LINLN EQU 0x50 ; 80
LSTERR EQU 0x44 ; 68
MAXPRM EQU 0x20 ; 32
NMREL EQU 0x03 ; 3
NONDSK EQU 0x1e ; 30
PRMSIZ EQU 0x64 ; 100
SQO EQU 0x02 ; 2
SWTCHR EQU 0x2f ; 47
WHLSIZ EQU 0x06 ; 6
CPM_RES1 EQU 0x3B

BIN
MB/mb.com Normal file

Binary file not shown.