├── .gitignore ├── LICENSE ├── Oric ├── dflat │ ├── .vscode │ │ ├── dflat_programming_language │ │ │ ├── .vscode │ │ │ │ └── launch.json │ │ │ ├── .vscodeignore │ │ │ ├── language-configuration.json │ │ │ ├── package.json │ │ │ └── syntaxes │ │ │ │ └── dflat.tmLanguage.json │ │ └── settings.json │ ├── as65 │ ├── as65.exe │ ├── as65.man │ ├── bank │ │ ├── bank0.lst │ │ └── bank0.s │ ├── cia │ │ └── cia.s │ ├── dflat │ │ ├── asm.i │ │ ├── asm.s │ │ ├── asmjmptab.s │ │ ├── asmsymtab.s │ │ ├── dflat.i │ │ ├── dflat.s │ │ ├── error.i │ │ ├── error.s │ │ ├── numop.s │ │ ├── proc.s │ │ ├── progedit.s │ │ ├── rtasm.s │ │ ├── rtjmptab.s │ │ ├── rtsubs.s │ │ ├── runtime.s │ │ ├── stack.s │ │ ├── tkasm.s │ │ ├── tkjmptab.s │ │ ├── tksymtab.s │ │ ├── tktyptab.s │ │ ├── tokenise.s │ │ ├── toksubs.s │ │ └── var.s │ ├── file │ │ ├── file.s │ │ ├── loci.i │ │ ├── locisd.s │ │ ├── sdcard.s │ │ └── tape.s │ ├── inc │ │ ├── graph.i │ │ └── includes.i │ ├── io │ │ ├── io.i │ │ └── io.s │ ├── kernel │ │ ├── build.s │ │ ├── irq.s │ │ ├── kernel.s │ │ ├── main.s │ │ ├── osromvec.i │ │ ├── snd-low.s │ │ └── zeropage.i │ ├── keyboard │ │ └── keyboard.s │ ├── make.ps1 │ ├── monitor │ │ └── cmd.s │ ├── rom │ │ ├── ORICD.ROM │ │ ├── dflat.rom │ │ └── dfloci.rom │ ├── sound │ │ └── sound.s │ ├── utils │ │ ├── intmath.s │ │ └── utils.s │ └── vdp │ │ ├── font.s │ │ └── graph.s ├── emulator │ ├── ChangeLog.txt │ ├── ReadMe-LiesMich_DE.txt │ ├── ReadMe.txt │ ├── SDL.dll │ ├── Version.txt │ ├── disks │ │ ├── bddos.dsk │ │ └── sedoric.dsk │ ├── images │ │ ├── avirec.bmp │ │ ├── disk_active.bmp │ │ ├── disk_ejected.bmp │ │ ├── disk_idle.bmp │ │ ├── disk_modactive.bmp │ │ ├── disk_modified.bmp │ │ ├── gfx_atmoskbd.bmp │ │ ├── gfx_atmoskbd.psd │ │ ├── gfx_oric1kbd.bmp │ │ ├── gfx_pravetzkbd.bmp │ │ ├── statusbar.bmp │ │ ├── tape_ejected.bmp │ │ ├── tape_pause.bmp │ │ ├── tape_play.bmp │ │ ├── tape_record.bmp │ │ ├── tape_stop.bmp │ │ └── winicon.bmp │ ├── oricutron-sdl2.exe │ ├── oricutron.cfg │ ├── oricutron.exe │ ├── pravdisks │ │ ├── 100.dsk │ │ ├── 130.dsk │ │ ├── 210.dsk │ │ └── 231.dsk │ ├── printer_out.txt │ ├── roms │ │ ├── 8dos.rom │ │ ├── 8dos.sym │ │ ├── 8dos2.rom │ │ ├── 8dos2.sym │ │ ├── Bas122de.pch │ │ ├── Bas122fr.pch │ │ ├── Bas122uk.pch │ │ ├── MICRODIS.ROM │ │ ├── basic10.pch │ │ ├── basic10.rom │ │ ├── basic10.sym │ │ ├── basic11b.pch │ │ ├── basic11b.rom │ │ ├── basic11b.sym │ │ ├── bd500.rom │ │ ├── bd500.sym │ │ ├── cumana.rom │ │ ├── cumana.sym │ │ ├── dflat.pch │ │ ├── dflat.rom │ │ ├── hyperbas.rom │ │ ├── jasmin.rom │ │ ├── jasmin.sym │ │ ├── microdis.sym │ │ ├── oric11b.rom │ │ ├── pch-template.pch │ │ ├── pravetzt-1.0.pch │ │ ├── pravetzt-1.0.rom │ │ ├── pravetzt-1.0.sym │ │ ├── pravetzt.pch │ │ ├── pravetzt.rom │ │ ├── pravetzt.sym │ │ ├── sedoric.sym │ │ ├── teleass.rom │ │ ├── teleass.sym │ │ ├── telmatic.rom │ │ ├── telmon24.pch │ │ ├── telmon24.rom │ │ └── telmon24.sym │ ├── tapes │ │ └── OricBASIC │ │ │ ├── GCAATTACK.TAP │ │ │ └── GCALIENS.TAP │ └── teledisks │ │ └── stratsed.dsk ├── readme.txt ├── software │ ├── dflat │ │ ├── demos │ │ │ ├── festival │ │ │ │ └── fest2023.tap │ │ │ ├── graphics │ │ │ │ ├── bigspr.tap │ │ │ │ ├── hicol.tap │ │ │ │ ├── line.tap │ │ │ │ ├── mcsprite.tap │ │ │ │ └── sprdemo.tap │ │ │ ├── social │ │ │ │ ├── thanks.tap │ │ │ │ └── xmastwit.tap │ │ │ ├── sound │ │ │ │ ├── pt3 │ │ │ │ │ ├── AhaTake.pt3 │ │ │ │ │ ├── BOOM.pt3 │ │ │ │ │ ├── CLTime.pt3 │ │ │ │ │ ├── Depeche.pt3 │ │ │ │ │ ├── FUN.pt3 │ │ │ │ │ ├── GhostnG.pt3 │ │ │ │ │ ├── Limahl.pt3 │ │ │ │ │ ├── MFrozen.pt3 │ │ │ │ │ ├── NINJA.pt3 │ │ │ │ │ ├── NirvTeen.pt3 │ │ │ │ │ ├── Oxygene4.pt3 │ │ │ │ │ ├── RHCreep.pt3 │ │ │ │ │ ├── RT.pt3 │ │ │ │ │ ├── RWFeel.pt3 │ │ │ │ │ ├── SMario.pt3 │ │ │ │ │ ├── SpaceNY.pt3 │ │ │ │ │ ├── StarWars.pt3 │ │ │ │ │ ├── TELEGA.pt3 │ │ │ │ │ ├── TEST.pt3 │ │ │ │ │ ├── WhiteXms.pt3 │ │ │ │ │ ├── attract.pt3 │ │ │ │ │ ├── popcorn.pt3 │ │ │ │ │ ├── ppt37700.bin │ │ │ │ │ ├── ppt37800.bin │ │ │ │ │ ├── ppt37900.bin │ │ │ │ │ ├── ptdemo.tap │ │ │ │ │ └── win1.pt3 │ │ │ │ └── rttl │ │ │ │ │ └── rttlplay.tap │ │ │ └── space │ │ │ │ ├── 1-small.bin │ │ │ │ ├── 10-small.bin │ │ │ │ ├── 11-small.bin │ │ │ │ ├── 12-small.bin │ │ │ │ ├── 13-small.bin │ │ │ │ ├── 14-small.bin │ │ │ │ ├── 2-small.bin │ │ │ │ ├── 3-small.bin │ │ │ │ ├── 4-small.bin │ │ │ │ ├── 5-small.bin │ │ │ │ ├── 6-small.bin │ │ │ │ ├── 7-small.bin │ │ │ │ ├── 8-small.bin │ │ │ │ ├── 9-small.bin │ │ │ │ └── spacegal.tap │ │ ├── games │ │ │ ├── TETRIS.tap │ │ │ ├── attract.pt3 │ │ │ ├── defender.tap │ │ │ ├── explore7.tap │ │ │ ├── inv256.tap │ │ │ ├── inv3d.tap │ │ │ ├── kong.tap │ │ │ ├── lander.tap │ │ │ ├── pix.tap │ │ │ ├── popcorn.pt3 │ │ │ ├── ppt37900.bin │ │ │ ├── tetris2.tap │ │ │ ├── triangle.tap │ │ │ └── win1.pt3 │ │ └── test │ │ │ ├── line2.tap │ │ │ └── pcwbench.tap │ ├── make.ps1 │ ├── project │ │ ├── images │ │ │ ├── 1.raw │ │ │ ├── 10.raw │ │ │ ├── 11.raw │ │ │ ├── 12.raw │ │ │ ├── 13.raw │ │ │ ├── 14.raw │ │ │ ├── 2.raw │ │ │ ├── 3.raw │ │ │ ├── 4.raw │ │ │ ├── 5.raw │ │ │ ├── 6.raw │ │ │ ├── 7.raw │ │ │ ├── 8.raw │ │ │ └── 9.raw │ │ └── pt3 │ │ │ ├── as65 │ │ │ ├── as65.exe │ │ │ ├── as65.man │ │ │ ├── make.ps1 │ │ │ ├── ppt3.lst │ │ │ ├── ppt3.s │ │ │ ├── ppt37900.bin │ │ │ └── tunes │ │ │ ├── AhaTake.pt3 │ │ │ ├── BOOM.pt3 │ │ │ ├── CLTime.pt3 │ │ │ ├── Depeche.pt3 │ │ │ ├── FUN.pt3 │ │ │ ├── GhostnG.pt3 │ │ │ ├── Limahl.pt3 │ │ │ ├── MFrozen.pt3 │ │ │ ├── NINJA.pt3 │ │ │ ├── NirvTeen.pt3 │ │ │ ├── Oxygene4.pt3 │ │ │ ├── RHCreep.pt3 │ │ │ ├── RT.pt3 │ │ │ ├── RWFeel.pt3 │ │ │ ├── SMario.pt3 │ │ │ ├── SpaceNY.pt3 │ │ │ ├── StarWars.pt3 │ │ │ ├── TELEGA.pt3 │ │ │ ├── TEST.pt3 │ │ │ ├── WhiteXms.pt3 │ │ │ └── popcorn.pt3 │ └── sd-src │ │ ├── demos │ │ ├── festival │ │ │ └── fest2023.prg │ │ ├── graphics │ │ │ ├── bigspr.prg │ │ │ ├── hicol.prg │ │ │ ├── line.prg │ │ │ ├── mcsprite.prg │ │ │ └── sprdemo.prg │ │ ├── social │ │ │ ├── thanks.prg │ │ │ └── xmastwit.prg │ │ ├── sound │ │ │ ├── pt3 │ │ │ │ ├── AhaTake.pt3 │ │ │ │ ├── BOOM.pt3 │ │ │ │ ├── CLTime.pt3 │ │ │ │ ├── Depeche.pt3 │ │ │ │ ├── FUN.pt3 │ │ │ │ ├── GhostnG.pt3 │ │ │ │ ├── Limahl.pt3 │ │ │ │ ├── MFrozen.pt3 │ │ │ │ ├── NINJA.pt3 │ │ │ │ ├── NirvTeen.pt3 │ │ │ │ ├── Oxygene4.pt3 │ │ │ │ ├── RHCreep.pt3 │ │ │ │ ├── RT.pt3 │ │ │ │ ├── RWFeel.pt3 │ │ │ │ ├── SMario.pt3 │ │ │ │ ├── SpaceNY.pt3 │ │ │ │ ├── StarWars.pt3 │ │ │ │ ├── TELEGA.pt3 │ │ │ │ ├── TEST.pt3 │ │ │ │ ├── WhiteXms.pt3 │ │ │ │ ├── attract.pt3 │ │ │ │ ├── popcorn.pt3 │ │ │ │ ├── ppt37700.bin │ │ │ │ ├── ppt37800.bin │ │ │ │ ├── ppt37900.bin │ │ │ │ ├── ptdemo.prg │ │ │ │ └── win1.pt3 │ │ │ └── rttl │ │ │ │ └── rttlplay.prg │ │ └── space │ │ │ ├── 1-small.bin │ │ │ ├── 10-small.bin │ │ │ ├── 11-small.bin │ │ │ ├── 12-small.bin │ │ │ ├── 13-small.bin │ │ │ ├── 14-small.bin │ │ │ ├── 2-small.bin │ │ │ ├── 3-small.bin │ │ │ ├── 4-small.bin │ │ │ ├── 5-small.bin │ │ │ ├── 6-small.bin │ │ │ ├── 7-small.bin │ │ │ ├── 8-small.bin │ │ │ ├── 9-small.bin │ │ │ └── spacegal.prg │ │ ├── games │ │ ├── TETRIS.PRG │ │ ├── attract.pt3 │ │ ├── defender.prg │ │ ├── explore7.prg │ │ ├── inv256.prg │ │ ├── inv3d.prg │ │ ├── kong.prg │ │ ├── lander.prg │ │ ├── pix.prg │ │ ├── popcorn.pt3 │ │ ├── ppt37900.bin │ │ ├── tetris2.PRG │ │ ├── triangle.prg │ │ └── win1.pt3 │ │ └── test │ │ ├── line2.prg │ │ └── pcwbench.prg ├── util │ ├── .gitignore │ ├── bin │ │ ├── dfbin2tap.exe │ │ ├── dftap2txt.exe │ │ ├── dftap2wav.exe │ │ └── dftxt2tap.exe │ ├── dfbin2tap │ │ ├── dfbin2tap.cpp │ │ └── dfbin2tap.h │ ├── dftap2txt │ │ ├── dftap2txt.cpp │ │ └── dftap2txt.h │ ├── dftap2wav │ │ ├── dftap2wav.cpp │ │ └── dftap2wav.h │ ├── dftxt2tap │ │ ├── dftxt2tap.cpp │ │ └── dftxt2tap.h │ └── make.ps1 └── vsc-lang │ ├── dflat_programming_language │ ├── .vscode │ │ └── launch.json │ ├── .vscodeignore │ ├── language-configuration.json │ ├── package.json │ └── syntaxes │ │ └── dflat.tmLanguage.json │ └── e-_programming_language │ ├── .vscode │ └── launch.json │ ├── .vscodeignore │ ├── language-configuration.json │ ├── package.json │ └── syntaxes │ └── e-.tmLanguage.json ├── README.md └── wiki-files ├── hires-line-circle.png ├── plot-scrn.png ├── readme.txt └── sprite-example-1.mp4 /.gitignore: -------------------------------------------------------------------------------- 1 | Oric/emulator/printer_out.txt 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 6502Nerd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Oric/dflat/.vscode/dflat_programming_language/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ] 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /Oric/dflat/.vscode/dflat_programming_language/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .gitignore 4 | vsc-extension-quickstart.md 5 | -------------------------------------------------------------------------------- /Oric/dflat/.vscode/dflat_programming_language/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": "//" 5 | }, 6 | // symbols used as brackets 7 | "brackets": [ 8 | ["(", ")"] 9 | ], 10 | // symbols that are auto closed when typing 11 | "autoClosingPairs": [ 12 | ["(", ")"], 13 | ["\"", "\""], 14 | ["'", "'"] 15 | ], 16 | // symbols that can be used to surround a selection 17 | "surroundingPairs": [ 18 | ["(", ")"], 19 | ["\"", "\""], 20 | ["'", "'"] 21 | ] 22 | } -------------------------------------------------------------------------------- /Oric/dflat/.vscode/dflat_programming_language/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dflat_programming_language", 3 | "displayName": "dflat programming language", 4 | "description": "Syntax highlighting for the dflat programming language", 5 | "version": "0.0.1", 6 | "engines": { 7 | "vscode": "^1.63.0" 8 | }, 9 | "categories": [ 10 | "Programming Languages" 11 | ], 12 | "contributes": { 13 | "languages": [{ 14 | "id": "dflat", 15 | "aliases": ["dflat", "dflat"], 16 | "extensions": [".prg"], 17 | "configuration": "./language-configuration.json" 18 | }], 19 | "grammars": [{ 20 | "language": "dflat", 21 | "scopeName": "source.dflat", 22 | "path": "./syntaxes/dflat.tmLanguage.json" 23 | }] 24 | } 25 | } -------------------------------------------------------------------------------- /Oric/dflat/.vscode/dflat_programming_language/syntaxes/dflat.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", 3 | "name": "dflat", 4 | "patterns": [ 5 | { 6 | "include": "#keywords" 7 | }, 8 | { 9 | "include": "#strings" 10 | }, 11 | { 12 | "include": "#comments" 13 | }, 14 | { 15 | "include": "#numbers" 16 | }, 17 | { 18 | "include": "#types" 19 | }, 20 | { 21 | "include": "#identifiers" 22 | } 23 | ], 24 | "repository": { 25 | "keywords": { 26 | "patterns": [ 27 | { 28 | "name": "comment.line.semicolon.dflat", 29 | "match": ";.*$\\n?" 30 | }, 31 | { 32 | "name": "keyword.control.dflat", 33 | "match": "\\b(if|elif|else|endif|while|wend|return|until|repeat|for|next)\\b" 34 | }, 35 | { 36 | "name": "keyword.dflat", 37 | "match": "\\b(adc|and|cmp|eor|lda|ora|sbc|sta|asl|dec|inc|lsr|rol|ror|bit|brk|clc|cld|cli|clv|sec|sed|sei|cpx|cpy|dex|dey|inx|iny|ldx|ldy|stx|sty|bcc|bcs|beq|bmi|bne|bpl|bvc|bvs|jmp|jsr|nop|pha|php|pla|plp|rti|rts|tax|tay|tsx|txa|txs|tya)\\b" 38 | }, 39 | { 40 | "name": "keyword.dflat", 41 | "match": "\\x2e(org|opt|db|dw|ds)\\b" 42 | }, 43 | { 44 | "name": "keyword.dflat", 45 | "match": "\\b(def_\\w+|enddef|_\\w+)\\b" 46 | }, 47 | { 48 | "name": "keyword.dflat", 49 | "match": "\\b(println|printat|print|def|enddef|return|abort|local|dim|repeat|until|for|next|while|wend|if|else|endif|elif|data|run|list|input|text|plot|cursor|cls|poke|doke|sound|music|play|read|new|wait|reset|hires|point|line|lineto|pixmode|ink|paper|circle|cmd|sprchar|sprpos|sprupd|sprinit|sprmulti|bsave|bload|tload|tsave|del|dir|redim|peek|deek|stick|get|chr|left|right|mid|len|mem|scrn|rnd|elapsed|call|hex|dec|asc|val|pixel|sprhit|sgn|addr)\\b" 50 | }, 51 | { 52 | "name": "keyword.operator.comparison.dflat", 53 | "match": "\\b(<|<=|>|>=|==|<>)\\b" 54 | }, 55 | { 56 | "name": "keyword.operator.assignment.dflat", 57 | "match": "\\b=\\b" 58 | }, 59 | { 60 | "name": "keyword.operator.logical.dflat", 61 | "match": "\\b(&|\\^|\\|)\\b" 62 | }, 63 | { 64 | "name": "keyword.operator.arithmetic.dflat", 65 | "match": "\\b(\\+|-|\\*|\\/|\\\\)\\b" 66 | }, 67 | { 68 | "name": "keyword.operator.bitwise.shift.dflat", 69 | "match": "\\b(<<|>>)\\b" 70 | } 71 | ] 72 | }, 73 | "strings": { 74 | "patterns": [ 75 | { 76 | "name": "string.quoted.double.dflat", 77 | "begin": "\"", 78 | "end": "\"", 79 | "patterns": [ 80 | { 81 | "name": "constant.character.escape.dflat", 82 | "match": "\\\\." 83 | } 84 | ] 85 | }, 86 | { 87 | "name": "string.quoted.single.dflat", 88 | "match": "'.'" 89 | } 90 | ] 91 | }, 92 | "numbers": { 93 | "patterns": [ 94 | { 95 | "match": "0x([a-f]|[0-9])+", 96 | "name": "constant.numeric.hexadecimal.dflat" 97 | }, 98 | { 99 | "match": "0b[0-1]+", 100 | "name": "constant.numeric.binary.dflat" 101 | }, 102 | { 103 | "match": "-?[0-9]+", 104 | "name": "constant.numeric.decimal.dflat" 105 | } 106 | ] 107 | }, 108 | "types": { 109 | }, 110 | "identifiers": { 111 | "patterns": [ 112 | { 113 | "match": "([a-z]|[A-Z])([a-z]|[A-Z]|[0-9])*(?=\\()", 114 | "name": "entity.name.function.dflat" 115 | }, 116 | { 117 | "match": "([a-z]|[A-Z])([a-z]|[A-Z]|[0-9])*\\$?", 118 | "name": "variable.other.dflat" 119 | } 120 | ] 121 | } 122 | }, 123 | "scopeName": "source.dflat" 124 | } 125 | -------------------------------------------------------------------------------- /Oric/dflat/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cmake.configureOnOpen": false 3 | } -------------------------------------------------------------------------------- /Oric/dflat/as65: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/dflat/as65 -------------------------------------------------------------------------------- /Oric/dflat/as65.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/dflat/as65.exe -------------------------------------------------------------------------------- /Oric/dflat/bank/bank0.s: -------------------------------------------------------------------------------- 1 | org 0xc000 2 | mod_sz_bios_s 3 | include "kernel/kernel.s" 4 | 5 | ; Bank specific code goes here 6 | include "cia/cia.s" 7 | include "file/file.s" 8 | include "file/tape.s" 9 | include "file/sdcard.s" 10 | include "file/locisd.s" 11 | include "keyboard/keyboard.s" 12 | include "vdp/graph.s" 13 | include "monitor/cmd.s" 14 | include "sound/sound.s" 15 | mod_sz_bios_e 16 | mod_sz_language_s 17 | include "utils/intmath.s" 18 | include "dflat/dflat.s" 19 | include "dflat/error.s" 20 | include "dflat/asm.s" 21 | mod_sz_language_e 22 | ; End of Code 23 | _code_end 24 | -------------------------------------------------------------------------------- /Oric/dflat/cia/cia.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* CIA.S 10 | ;* Code to initialise and utilise the 6522, which is used 11 | ;* for various functions on the Oric including; 12 | ;* Port A: 13 | ;* [7..0] Printer data bits 14 | ;* [7..0] Interface to AY-3-8912 15 | ;* Port B: 16 | ;* [2..0] Keyboard matrix row selector 17 | ;* [7] Tape output 18 | ;* [6] Tape player motor signal 19 | ;* [4] Printer strobe 20 | ;* CA1: Printer ACK 21 | ;* CB1: Tape input 22 | ;* CA2,CB2: Selecting the AY-3-8912 23 | ;* 24 | ;* This file is called cia.s because code was originally 25 | ;* for a MOS 6526 from a CMB64, but didn't get around to 26 | ;* renaming this file ;-) 27 | ;* 28 | ;********************************************************** 29 | 30 | 31 | ; ROM code 32 | code 33 | 34 | mod_sz_cia_s 35 | 36 | 37 | ;**************************************** 38 | ;* init_via0 39 | ;* Initialise cia 0 40 | ;* Input : None 41 | ;* Output : None 42 | ;* Regs affected : A 43 | ;**************************************** 44 | init_via0_tape ; initialisation bytes for tape 45 | ldy #init_tape_tab-init_via0_tab 46 | db 0x2c ; Ignore next two bytes 47 | init_via0 48 | ldy #0 ; Standard initialisation of VIA 49 | init_via0_loop 50 | lda init_via0_tab,y 51 | bmi init_via0_done 52 | tax 53 | iny 54 | lda init_via0_tab,y 55 | sta IO_0,x 56 | iny 57 | bne init_via0_loop 58 | 59 | init_via0_done 60 | rts ; return from sub 61 | 62 | init_via0_tab 63 | db IER, 0x7f 64 | db DDRA, 0xff ; Port A output by default 65 | db DDRB, 0xf7 ; Tape motor + KB select 66 | db PRB, KB_PRB+7 ; Port B default (cassette motor off) 67 | db PCR, SND_DESELECT ; Ensure AY is not selected (CA2=low, CB2=low) + CB1 high 68 | db T1CL, lo(TIMER1_RATE) ; 50Hz 69 | db T1LL, lo(TIMER1_RATE) ; 50Hz 70 | db T1CH, hi(TIMER1_RATE) ; 50Hz 71 | db T1LH, hi(TIMER1_RATE) ; 50Hz 72 | db ACR, 0x40 ; Timer 1 continuous 73 | db IER, 0xc0 ; Timer 1 interrupt enabled 74 | db -1 75 | init_tape_tab 76 | db IER, 0x7f ; Disable all interrupts 77 | db T2CL, 0xf4 ; Timer 2 used for measuring CB1 time 78 | db PCR, 0x10 ; Interrupt on CB1 positive edge 79 | db ACR, 0xc0 ; T1 continuous and toggle PB7 80 | db T1CL, lo(TAPE_RATE*2) ; Tape rate /2 = 0 81 | db T1CH, hi(TAPE_RATE*2) ; Tape rate /2 = 0 82 | db PRB, KB_PRB+0x40 ; Tape motor ON 83 | db -1 84 | 85 | ;**************************************** 86 | ;* via_strobe_init 87 | ;* set strobe low & port A pin directions 88 | ;**************************************** 89 | via_strobe_init 90 | sta IO_0+DDRA 91 | 92 | ;set strobe low 93 | lda IO_0+PRB 94 | and #0b11101111 95 | sta IO_0+PRB 96 | 97 | rts 98 | 99 | ;**************************************** 100 | ;* via_strobe_off 101 | ;* deselect printer port devices 102 | ;**************************************** 103 | via_strobe_off 104 | pha 105 | 106 | ;set strobe high 107 | lda IO_0+PRB 108 | ora #0b00010000 109 | sta IO_0+PRB 110 | 111 | ;set all bits of porta except kb sense to output 112 | lda #0xf7 113 | sta IO_0+DDRA 114 | 115 | pla 116 | rts 117 | 118 | 119 | mod_sz_cia_e 120 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/asm.i: -------------------------------------------------------------------------------- 1 | ;* Addressing modes - 15 in total, 16 with directives 2 | ;* 0 Nothing 3 | ;* 1 Absolute XXX 4 | ;* 2 Absolute,X XXX ,x 5 | ;* 3 Absolute,Y XXX ,y 6 | ;* 4 Zeropage XXX 7 | ;* 5 Zeropage,X XXX ,x 8 | ;* 6 Zeropage,Y XXX ,y 9 | ;* 7 Indirect XXX () 10 | ;* 8 Indirect,X XXX (,x) 11 | ;* 9 Indirect,Y XXX (),y 12 | ;* A Absolute indirect XXX () 13 | ;* B Absolute indirect,x XXX (,x) 14 | ;* C Immediate XXX # 15 | ;* D Accumulator XXX (same as implied) 16 | ;* E Implied XXX 17 | ;* F Relative XXX 18 | ;* 10 Assembler directive XXX ....... 19 | 20 | AM_NONE = 0 21 | AM_ABS = 1 22 | AM_ABSX = 2 23 | AM_ABSY = 3 24 | AM_ZP = 4 25 | AM_ZPX = 5 26 | AM_ZPY = 6 27 | AM_ZPIND = 7 28 | AM_ZPINDX = 8 29 | AM_ZPINDY = 9 30 | AM_ABSIND = 10 31 | AM_ABSINDX = 11 32 | AM_IMM = 12 33 | AM_ACC = 13 34 | AM_IMP = AM_ACC 35 | AM_REL = 15 36 | AM_DIR = 16 37 | 38 | 39 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/asm.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* ASM.S 10 | ;* This is the main controller code file for the assembler 11 | ;* This file includes all the required source files needed 12 | ;* in addition to dflat.s 13 | ;* 14 | ;********************************************************** 15 | 16 | ; ROM code 17 | code 18 | 19 | mod_sz_asm_s 20 | 21 | ; dflat.s is already included, so just the additionals 22 | include "dflat/asm.i" 23 | include "dflat/tkasm.s" 24 | include "dflat/rtasm.s" 25 | include "dflat/asmsymtab.s" 26 | include "dflat/asmjmptab.s" 27 | 28 | ;**************************************** 29 | ;* as_init 30 | ;* Initialise assembler settings 31 | ;**************************************** 32 | asm_init 33 | ; Zero the PC 34 | lda #0 35 | sta df_asmpc 36 | sta df_asmpc+1 37 | ; Zero the option 38 | sta df_asmopt 39 | rts 40 | 41 | mod_sz_asm_e 42 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/asmjmptab.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* ASMJUMPTAB.S 10 | ;* Runtime token jump table for assembler. 11 | ;* dflat uses four key tables to tokenise and run programs: 12 | ;* - df_tokensyms - table of token symbols 13 | ;* - df_tk_tokentype - table of token types 14 | ;* - df_tk_tokenjmp - table of tokenising routines 15 | ;* - df_rt_tokenjmp - table of runtime routines 16 | ;* The key is the token symbols. When a line is entered 17 | ;* in to the raw (untokenised) buffer, df_tokensyms is 18 | ;* used to identify tokens. The position of the found 19 | ;* token is used to then look up type and jump vectors 20 | ;* in the other tables. 21 | ;* 22 | ;********************************************************** 23 | 24 | ; ROM code 25 | code 26 | 27 | ; Tokeniser jump table 28 | ; Only directives needed as all opcodes are handled 29 | ; through a single routine 30 | df_tk_asm_tokenjmp 31 | dw df_tk_asm_org 32 | dw df_tk_asm_opt 33 | dw df_tk_asm_db 34 | dw df_tk_asm_dw 35 | dw df_tk_asm_ds 36 | 37 | df_rt_asm_tokenjmp 38 | dw df_rt_asm_org 39 | dw df_rt_asm_opt 40 | dw df_rt_asm_db 41 | dw df_rt_asm_dw 42 | dw df_rt_asm_ds 43 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/dflat.i: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* DFLAT.I 10 | ;* This is the main definitions file for dflat. The key 11 | ;* definitions are in here to access the data structures 12 | ;* used by dflat. 13 | ;* 14 | ;********************************************************** 15 | 16 | ;* Start dflat program memory 17 | DF_PROGSTART= mem_start 18 | ;* This is the top of usable dflat memory plus 1 19 | DF_MEMTOP = 0x9800 20 | 21 | ;* Offset in to tokenised line of length and line number 22 | DFTK_LINLEN = 0x00 23 | DFTK_LINNUM = 0x01 24 | 25 | ;* Flags for token, escape value for data types and line end 26 | DFTK_TOKEN = 0x80 27 | DFTK_ESCVAL = 0x20 28 | DFTK_EOL = 0x00 29 | 30 | ;* Numeric constants are encoded based on size and original 31 | ;* user representation. 32 | ;* For example the decimal value 16 will be encoded as 33 | ;* DFTK_INTDEC followed by the bytes 0 and 16 to form the word 34 | ;* The same value in binary will be encoded as DFTK_INTBIN 35 | ;* followed by the same 0 and 16 bytes. This is to allow the 36 | ;* tokenised value to be displayed in original representation. 37 | ;* So in the two examples, they will be shown as '16' and 38 | ;* '0x0010' respectively. 39 | DFTK_CHR = 0x00 40 | DFTK_RESV1 = 0x01 41 | DFTK_RESV2 = 0x02 42 | DFTK_RESV3 = 0x03 43 | DFTK_RESV4 = 0x04 44 | DFTK_BYTDEC = 0x05 45 | DFTK_BYTHEX = 0x06 46 | DFTK_BYTBIN = 0x07 47 | DFTK_RESV8 = 0x08 48 | DFTK_INTDEC = 0x09 49 | DFTK_INTHEX = 0x0a 50 | DFTK_INTBIN = 0x0b 51 | DFTK_RESVC = 0x0c 52 | DFTK_RESVD = 0x0d 53 | DFTK_RESVE = 0x0e 54 | DFTK_RESVF = 0x0f 55 | 56 | ;* String constant, variable and procedure tokens 57 | DFTK_STRLIT = 0x10 58 | DFTK_VAR = 0x11 59 | DFTK_PROC = 0x12 60 | DFTK_STEND = 0x1f 61 | 62 | ;* Qualifier for non-local parameters passed to a proc 63 | DFTK_VARPARM= '&' 64 | 65 | ;* Variable Value Table (VVT) definitions 66 | ;* The VVT records the values of variables defined in 67 | ;* the Variable Name Table (VNT). When a variable is 68 | ;* used, it is added to the VNT, and the position in 69 | ;* VNT is used as an index in to the VVT. 70 | ;* Every VVT entry is 8 bytes - so the VNT index is 71 | ;* shifted left 3 bits to get the VVT offset. 72 | ;* The VNT grows from top of memory down, the VVT 73 | ;* grows from start of VNT down. 74 | 75 | ;* Index in to each entry of the VVT 76 | DFVVT_TYPE = 0x00 77 | DFVVT_LO = 0x01 78 | DFVVT_HI = 0x02 79 | DFVVT_DIM1 = 0x03 80 | DFVVT_DIM2 = 0x04 81 | DFVVT_SZ = 0x08 ;VVT is aligned to 8 byte blocks 82 | 83 | ;* The meaning of the DFVVT_TYPE entry 84 | DFVVT_INT = 0x01 85 | DFVVT_BYT = 0x02 86 | DFVVT_STR = 0x04 87 | DFVVT_FLT = 0x08 88 | DFVVT_PROC = 0x40 89 | DFVVT_PTR = 0x80 90 | 91 | ;* Flags indicating the meaning of a token 92 | ;* A token has the top bit set (0x80), then the 93 | ;* remaining bits indicate what it represents. 94 | DFTK_KW = 0x01 95 | DFTK_FN = 0x02 96 | DFTK_STROP = 0x04 97 | DFTK_OP = 0x08 98 | DFTK_INT = 0x10 99 | DFTK_BYT = 0x20 100 | DFTK_STR = 0x40 101 | DFTK_FLT = 0x80 102 | DFTK_OPMSK = 0x07 103 | DFTK_RTMSK = 0xf8 104 | 105 | ;* Defines what type of value is on the parameter stack 106 | ;* All numerics are stored as INT, all STR 107 | ;* are pointers to the actual string, thus 108 | ;* all entries in the parmeter stack are 3 bytes 109 | DFST_INT = DFVVT_INT|DFVVT_BYT 110 | DFST_STR = DFVVT_STR 111 | DFST_PTR = 0xff 112 | 113 | ;* Token values of specific commands, used during 114 | ;* command processing. 115 | ;* ANY CHANGE TO THE ORDER OF KEYWORDS NEEDS TO REFLECT HERE! 116 | DFRT_DEF = 0x86 117 | DFRT_ENDDEF = 0x87 118 | DFRT_RETURN = 0x88 119 | DFRT_ABORT = 0x89 120 | DFRT_REPEAT = 0x8c 121 | DFRT_FOR = 0x8e 122 | DFRT_NEXT = 0x8f 123 | DFRT_WHILE = 0x90 124 | DFRT_WEND = 0x91 125 | DFRT_IF = 0x92 126 | DFRT_ELSE = 0x93 127 | DFRT_ENDIF = 0x94 128 | DFRT_ELSEIF = 0x95 129 | DFRT_DATA = 0x96 130 | DFRT_ASM = 0x97 131 | 132 | _PushTrueJmp macro 133 | ldx #0xff 134 | txa 135 | jmp df_st_pushInt 136 | endm 137 | 138 | _PushFalseJmp macro 139 | ldx #0x00 140 | txa 141 | jmp df_st_pushInt 142 | endm 143 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/dflat.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* DFLAT.S 10 | ;* This is the main controller code file for dflat. 11 | ;* This file includes all the required dflat source files 12 | ;* needed: 13 | ;* - error.s is the error handling module 14 | ;* - var.s is the variable handling module 15 | ;* - tokenise.s is the tokenisation module 16 | ;* - progedit.s is the program editing module 17 | ;* - runtime.s is the runtime module 18 | ;* - stack.s is the stack handling module 19 | ;* The above modules include further source files as 20 | ;* needed. 21 | ;* 22 | ;********************************************************** 23 | 24 | ; ROM code 25 | code 26 | 27 | mod_sz_dflat_s 28 | 29 | ; include "dflat/error.s" ** included in the main bank 30 | include "dflat/var.s" 31 | include "dflat/tokenise.s" 32 | include "dflat/progedit.s" 33 | include "dflat/runtime.s" 34 | include "dflat/stack.s" 35 | 36 | ;**************************************** 37 | ;* df_init 38 | ;* Initialise dflat language settings 39 | ;**************************************** 40 | df_init 41 | ; Initialise top of memory to default 42 | ; This can be overridden by himem command 43 | lda #lo(DF_MEMTOP) 44 | sta df_memtop 45 | lda #hi(DF_MEMTOP) 46 | sta df_memtop+1 47 | 48 | ; Init program space 49 | jmp df_clear 50 | 51 | ; Initialise assembler 52 | ; jsr asm_init 53 | 54 | ; rts 55 | 56 | 57 | ;**************************************** 58 | ;* df_clear 59 | ;* Initialise program space 60 | ;**************************************** 61 | df_clear 62 | ; Start of program space 63 | lda #lo(DF_PROGSTART) 64 | sta df_prgstrt 65 | sta df_prgend 66 | lda #hi(DF_PROGSTART) 67 | sta df_prgstrt+1 68 | sta df_prgend+1 69 | ; Terminal value in prog space 70 | lda #0 71 | tay 72 | sta (df_prgstrt),y 73 | ; No variables - zero the count 74 | sta df_varcnt 75 | 76 | ; Variable value table 77 | ; Grows down from mem top 78 | lda df_memtop 79 | sta df_vvtstrt 80 | sta df_vvtend 81 | lda df_memtop+1 82 | sta df_vvtstrt+1 83 | sta df_vvtend+1 84 | 85 | ; Variable name table 86 | ; Grows down from mem top 87 | lda df_vvtstrt 88 | sta df_vntstrt 89 | sta df_vntend 90 | lda df_vvtstrt+1 91 | sta df_vntstrt+1 92 | sta df_vntend+1 93 | 94 | ; String accumulator 95 | lda #lo(scratch) 96 | sta df_sevalptr 97 | lda #hi(scratch) 98 | sta df_sevalptr+1 99 | 100 | rts 101 | 102 | mod_sz_dflat_e 103 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/error.i: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* ERROR.I 10 | ;* Error definitions file. 11 | ;* The macro to throw an error is elswhere, but basically 12 | ;* It issues a 6502 BRK commmand with the next byte being 13 | ;* the error code. The BRK handler then picks up the 14 | ;* code and shows the appropriate message plus any line 15 | ;* number if a program was running. 16 | ;* 17 | ;********************************************************** 18 | 19 | ; ROM code 20 | code 21 | 22 | ; Error message numbers 23 | DFERR_OK = 0 24 | DFERR_SYNTAX = 1 25 | DFERR_TYPEMISM = 2 26 | DFERR_DIM = 3 27 | DFERR_UNTIL = 4 28 | DFERR_NOPROC = 5 29 | DFERR_PROCPARM = 6 30 | DFERR_IMMEDIATE = 7 31 | DFERR_UNCLOSEDIF= 8 32 | DFERR_NOIF = 9 33 | DFERR_NEXTFOR = 10 34 | DFERR_FNAME = 11 35 | DFERR_STRLONG = 12 36 | DFERR_BREAK = 13 37 | DFERR_NODATA = 14 38 | DFERR_WEND = 15 39 | DFERR_NOLINE = 16 40 | DFERR_RETURN = 17 41 | DFERR_ABORT = 18 42 | DFERR_QUANTITY = 19 43 | DFERR_NOORG = 20 44 | 45 | 46 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/error.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* ERROR.S 10 | ;* Error handling module. 11 | ;* Whan an error is thrown using BRK, this module handles 12 | ;* displaying the error plus any associated line number 13 | ;* if it was running a program. It then resets necessary 14 | ;* settings and takes the system back to program edit 15 | ;* mode. The message uses the general IO handler, thus 16 | ;* output must be set to the right place else for example 17 | ;* the error message will be written to tape! 18 | ;* 19 | ;********************************************************** 20 | 21 | ; ROM code 22 | code 23 | include "dflat/error.i" 24 | 25 | 26 | ; Error message table, each msg null terminated 27 | df_tk_errortab 28 | db "Ok", 0 29 | db "Syntax", 0 30 | db "Type", 0 31 | db "Dim", 0 32 | db "No repeat", 0 33 | db "No defn", 0 34 | db "Parm", 0 35 | db "Ended", 0 36 | db "No endif", 0 37 | db "No if", 0 38 | db "No for", 0 39 | db "Not found", 0 40 | db "Too long", 0 41 | db "Break", 0 42 | db "No data", 0 43 | db "No while", 0 44 | db "No line", 0 45 | db "No return ", 0 46 | db "Aborted", 0 47 | db "Bounds", 0 48 | db "No org", 0 49 | db 0 50 | 51 | df_tk_error_inline 52 | db " in line ", 0 53 | df_tk_error_atpos 54 | db " pos ", 0 55 | df_tk_error_error 56 | db " error", 0 57 | 58 | ;**************************************** 59 | ;* df_trap_error 60 | ;* Show an error message 61 | ;* errno is error number 62 | ;* currlin = Line number 63 | ;* exeoff = offset 64 | ;* at the end jump to program editor 65 | ;**************************************** 66 | df_trap_error 67 | ; set IO back to normal 68 | jsr init_via0 69 | jsr io_set_default 70 | cli 71 | 72 | lda #lo(df_tk_errortab) 73 | sta df_tmpptra 74 | lda #hi(df_tk_errortab) 75 | sta df_tmpptra+1 76 | ldx errno ; 0 or >=128 goes to monitor 77 | beq df_trap_go_monitor 78 | bpl df_trap_normal 79 | df_trap_go_monitor 80 | jmp df_trap_monitor 81 | df_trap_normal 82 | ldy #0 83 | df_show_err_find 84 | ; If on a zero, then error table exhausted 85 | ; so drop in to the monitor 86 | lda (df_tmpptra),y 87 | beq df_trap_monitor 88 | ; Skip over this error text including zero terminator 89 | df_show_err_skip 90 | _incZPWord df_tmpptra 91 | lda (df_tmpptra),y 92 | bne df_show_err_skip 93 | _incZPWord df_tmpptra 94 | dex 95 | bne df_show_err_find 96 | ; Error message found 97 | ldx df_tmpptra 98 | lda df_tmpptra+1 99 | jsr io_print_line 100 | ldx #lo(df_tk_error_error) 101 | lda #hi(df_tk_error_error) 102 | jsr io_print_line 103 | ; if line number <> 0 then print it 104 | ldy #DFTK_LINNUM 105 | lda (df_currlin),y 106 | tax 107 | iny 108 | lda (df_currlin),y 109 | bne df_show_err_linnum 110 | cpx #0x00 111 | beq df_show_err_fin 112 | df_show_err_linnum 113 | _println df_tk_error_inline 114 | clc 115 | jsr print_a_to_d 116 | df_show_err_fin 117 | ldy df_exeoff 118 | beq df_show_err_done 119 | _println df_tk_error_atpos 120 | tya 121 | tax 122 | lda #0 123 | clc 124 | jsr print_a_to_d 125 | df_show_err_done 126 | jsr utilPrintCRLF 127 | clc 128 | ; back to editor 129 | jmp df_pg_dflat 130 | 131 | 132 | ; For unknown errors, jump to monitor 133 | df_trap_monitor 134 | ; Print PC 135 | _println_low df_msg_pc 136 | lda df_brkpc+1 137 | jsr utilPrintA 138 | lda df_brkpc 139 | jsr utilPrintA 140 | jsr utilPrintSPC 141 | 142 | ; Print A 143 | _println_low df_msg_acc 144 | lda num_a 145 | jsr utilPrintA 146 | jsr utilPrintSPC 147 | 148 | ; Print X 149 | _println_low df_msg_xreg 150 | lda num_a+1 151 | jsr utilPrintA 152 | jsr utilPrintSPC 153 | 154 | ; Print Y 155 | _println_low df_msg_yreg 156 | lda num_a+2 157 | jsr utilPrintA 158 | jsr utilPrintCRLF 159 | 160 | jsr df_rt_monitor 161 | ; back to editor 162 | jmp df_pg_dflat 163 | 164 | df_msg_pc 165 | db "PC:\x0" 166 | df_msg_acc 167 | db "A:\x0" 168 | df_msg_xreg 169 | db "X:\x0" 170 | df_msg_yreg 171 | db "Y:\x0" 172 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/rtjmptab.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* RTJUMPTAB.S 10 | ;* Runtime token jump table. 11 | ;* dflat uses four key tables to tokenise and run programs: 12 | ;* - df_tokensyms - table of token symbols 13 | ;* - df_tk_tokentype - table of token types 14 | ;* - df_tk_tokenjmp - table of tokenising routines 15 | ;* - df_rt_tokenjmp - table of runtime token and escape routines 16 | ;* The key is the token symbols. When a line is entered 17 | ;* in to the raw (untokenised) buffer, df_tokensyms is 18 | ;* used to identify tokens. The position of the found 19 | ;* token is used to then look up type and jump vectors 20 | ;* in the other tables. 21 | ;* 22 | ;********************************************************** 23 | 24 | ; ROM code 25 | code 26 | 27 | ; Tokeniser jump table 28 | ; In token order of df_tokensyms 29 | df_rt_tokenjmp 30 | dw df_rt_assign 31 | dw df_rt_proc 32 | dw df_rt_comment 33 | dw df_rt_println 34 | dw df_rt_printat 35 | dw df_rt_print 36 | dw df_rt_def ; 0x86 37 | dw df_rt_enddef ; 0x87 38 | dw df_rt_return ; 0x88 39 | dw df_rt_abort ; 0x89 40 | dw df_rt_local 41 | dw df_rt_dim 42 | dw df_rt_repeat ; 0x8c 43 | dw df_rt_until 44 | dw df_rt_for ; 0x8e 45 | dw df_rt_next ; 0x8f 46 | dw df_rt_while ; 0x90 47 | dw df_rt_wend ; 0x81 48 | dw df_rt_if ; 0x92 49 | dw df_rt_else ; 0x93 50 | dw df_rt_endif ; 0x94 51 | dw df_rt_elseif ; 0x95 52 | dw df_rt_data ; 0x96 53 | dw df_rt_asm_assemble ; 0x97 df_rt_asm_assemble 54 | dw df_rt_run 55 | dw df_rt_list 56 | dw df_rt_input 57 | dw df_rt_text 58 | dw df_rt_plot 59 | dw df_rt_cursor 60 | dw df_rt_cls 61 | dw df_rt_poke 62 | dw df_rt_doke 63 | dw df_rt_sound 64 | dw df_rt_music 65 | dw df_rt_play 66 | dw df_rt_read 67 | dw df_rt_new 68 | ; dw df_rt_renum 69 | dw df_rt_wait 70 | dw df_rt_reset 71 | dw df_rt_hires 72 | dw df_rt_point 73 | dw df_rt_line 74 | dw df_rt_lineto 75 | dw df_rt_pixmode 76 | dw df_rt_ink 77 | dw df_rt_paper 78 | dw df_rt_circle 79 | ; dw df_rt_himem 80 | dw df_rt_monitor 81 | dw df_rt_sprchar 82 | dw df_rt_sprpos 83 | dw df_rt_sprupd 84 | dw df_rt_sprinit 85 | dw df_rt_sprmulti 86 | ; dw df_rt_save 87 | ; dw df_rt_load 88 | dw df_rt_bsave 89 | dw df_rt_bload 90 | dw df_rt_tsave 91 | dw df_rt_tload 92 | dw df_rt_delete 93 | dw df_rt_dir 94 | dw df_rt_redim 95 | 96 | dw df_rt_peek 97 | dw df_rt_deek 98 | dw df_rt_stick 99 | dw df_rt_get 100 | dw df_rt_chr 101 | dw df_rt_left 102 | dw df_rt_right 103 | dw df_rt_mid 104 | dw df_rt_len 105 | dw df_rt_mem 106 | dw df_rt_scrn 107 | dw df_rt_rnd 108 | dw df_rt_elapsed 109 | dw df_rt_call 110 | dw df_rt_hex 111 | dw df_rt_dec 112 | dw df_rt_asc 113 | dw df_rt_val 114 | dw df_rt_pixel 115 | dw df_rt_sprhit 116 | dw df_rt_sgn 117 | dw df_rt_addr 118 | 119 | dw df_rt_mult 120 | dw df_rt_div 121 | dw df_rt_mod 122 | dw df_rt_asl 123 | dw df_rt_lsr 124 | dw df_rt_add 125 | dw df_rt_sub 126 | 127 | dw df_rt_and 128 | dw df_rt_or 129 | dw df_rt_eor 130 | dw df_rt_comlte 131 | dw df_rt_comgte 132 | dw df_rt_comne 133 | dw df_rt_comlt 134 | dw df_rt_comgt 135 | dw df_rt_comeq 136 | 137 | 138 | ; escape sequence handlers 139 | ; to do the reverse of tokenising during the listing 140 | ; command which is also used to save to disk. 141 | df_rt_escjmp 142 | dw df_rt_lst_chr 143 | dw df_rt_lst_reserved 144 | dw df_rt_lst_reserved 145 | dw df_rt_lst_reserved 146 | dw df_rt_lst_reserved 147 | dw df_rt_lst_reserved ; no such thing as bytdec 148 | dw df_rt_lst_bythex 149 | dw df_rt_lst_bytbin 150 | dw df_rt_lst_reserved 151 | dw df_rt_lst_intdec 152 | dw df_rt_lst_inthex 153 | dw df_rt_lst_intbin 154 | dw df_rt_lst_reserved 155 | dw df_rt_lst_reserved 156 | dw df_rt_lst_reserved 157 | dw df_rt_lst_reserved 158 | dw df_rt_lst_strlit 159 | dw df_rt_lst_var 160 | dw df_rt_lst_proc 161 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/tkjmptab.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* TKJUMPTAB.S 10 | ;* Runtime token jump table. 11 | ;* dflat uses four key tables to tokenise and run programs: 12 | ;* - df_tokensyms - table of token symbols 13 | ;* - df_tk_tokentype - table of token types 14 | ;* - df_tk_tokenjmp - table of tokenising routines 15 | ;* - df_rt_tokenjmp - table of runtime routines 16 | ;* The key is the token symbols. When a line is entered 17 | ;* in to the raw (untokenised) buffer, df_tokensyms is 18 | ;* used to identify tokens. The position of the found 19 | ;* token is used to then look up type and jump vectors 20 | ;* in the other tables. 21 | ;* 22 | ;********************************************************** 23 | 24 | ; ROM code 25 | code 26 | 27 | ; Tokeniser jump table 28 | ; In token order of df_tokensyms 29 | df_tk_tokenjmp 30 | dw df_tk_assign 31 | dw df_tk_callproc 32 | dw df_tk_comment 33 | dw df_tk_println 34 | dw df_tk_printat 35 | dw df_tk_print 36 | dw df_tk_def 37 | dw df_tk_enddef 38 | dw df_tk_return 39 | dw df_tk_abort 40 | dw df_tk_local 41 | dw df_tk_dim 42 | dw df_tk_repeat 43 | dw df_tk_until 44 | dw df_tk_for 45 | dw df_tk_next 46 | dw df_tk_while 47 | dw df_tk_wend 48 | dw df_tk_if 49 | dw df_tk_else 50 | dw df_tk_endif 51 | dw df_tk_elseif 52 | dw df_tk_data 53 | dw df_trap_monitor 54 | dw df_tk_run 55 | dw df_tk_list 56 | dw df_tk_input 57 | dw df_tk_text 58 | dw df_tk_plot 59 | dw df_tk_cursor 60 | dw df_tk_cls 61 | dw df_tk_poke 62 | dw df_tk_doke 63 | dw df_tk_sound 64 | dw df_tk_music 65 | dw df_tk_play 66 | dw df_tk_read 67 | dw df_tk_new 68 | ; dw df_tk_renum 69 | dw df_tk_wait 70 | dw df_tk_reset 71 | dw df_tk_hires 72 | dw df_tk_point 73 | dw df_tk_line 74 | dw df_tk_lineto 75 | dw df_tk_pixmode 76 | dw df_tk_ink 77 | dw df_tk_paper 78 | dw df_tk_circle 79 | ; dw df_tk_himem 80 | dw df_tk_monitor 81 | dw df_tk_sprchar 82 | dw df_tk_sprpos 83 | dw df_tk_sprupd 84 | dw df_tk_sprinit 85 | dw df_tk_sprmulti 86 | ; dw df_tk_save 87 | ; dw df_tk_load 88 | dw df_tk_bsave 89 | dw df_tk_bload 90 | dw df_tk_tsave 91 | dw df_tk_tload 92 | dw df_tk_delete 93 | dw df_tk_dir 94 | dw df_tk_redim 95 | 96 | dw df_tk_peek 97 | dw df_tk_deek 98 | dw df_tk_stick 99 | dw df_tk_get 100 | dw df_tk_chr 101 | dw df_tk_left 102 | dw df_tk_right 103 | dw df_tk_mid 104 | dw df_tk_len 105 | dw df_tk_mem 106 | dw df_tk_scrn 107 | dw df_tk_rnd 108 | dw df_tk_elapsed 109 | dw df_tk_call 110 | dw df_tk_hex 111 | dw df_tk_dec 112 | dw df_tk_asc 113 | dw df_tk_val 114 | dw df_tk_pixel 115 | dw df_tk_sprhit 116 | dw df_tk_sgn 117 | dw df_tk_addr 118 | 119 | dw df_tk_mult 120 | dw df_tk_div 121 | dw df_tk_mod 122 | dw df_tk_asl 123 | dw df_tk_lsr 124 | dw df_tk_add 125 | dw df_tk_sub 126 | 127 | dw df_tk_and 128 | dw df_tk_or 129 | dw df_tk_eor 130 | dw df_tk_lte 131 | dw df_tk_gte 132 | dw df_tk_ne 133 | dw df_tk_lt 134 | dw df_tk_gt 135 | dw df_tk_eq 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /Oric/dflat/dflat/tktyptab.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* RTJUMPTAB.S 10 | ;* Runtime token jump table. 11 | ;* dflat uses four key tables to tokenise and run programs: 12 | ;* - df_tokensyms - table of token symbols 13 | ;* - df_tk_tokentype - table of token types 14 | ;* - df_tk_tokenjmp - table of tokenising routines 15 | ;* - df_rt_tokenjmp - table of runtime routines 16 | ;* The key is the token symbols. When a line is entered 17 | ;* in to the raw (untokenised) buffer, df_tokensyms is 18 | ;* used to identify tokens. The position of the found 19 | ;* token is used to then look up type and jump vectors 20 | ;* in the other tables. 21 | ;* 22 | ;********************************************************** 23 | 24 | ; ROM code 25 | code 26 | 27 | ; Tokeniser type table (is it a keyword, function, operator) 28 | ; In token order of df_tokensyms 29 | df_tk_tokentype 30 | db DFTK_KW 31 | db DFTK_KW 32 | db DFTK_KW 33 | db DFTK_KW 34 | db DFTK_KW 35 | db DFTK_KW 36 | db DFTK_KW 37 | db DFTK_KW 38 | db DFTK_KW 39 | db DFTK_KW 40 | db DFTK_KW 41 | db DFTK_KW 42 | db DFTK_KW 43 | db DFTK_KW 44 | db DFTK_KW 45 | db DFTK_KW 46 | db DFTK_KW 47 | db DFTK_KW 48 | db DFTK_KW 49 | db DFTK_KW 50 | db DFTK_KW 51 | db DFTK_KW 52 | db DFTK_KW 53 | db DFTK_KW 54 | db DFTK_KW 55 | db DFTK_KW 56 | db DFTK_KW 57 | db DFTK_KW 58 | db DFTK_KW 59 | db DFTK_KW 60 | db DFTK_KW 61 | db DFTK_KW 62 | db DFTK_KW 63 | db DFTK_KW 64 | db DFTK_KW 65 | db DFTK_KW 66 | db DFTK_KW 67 | db DFTK_KW 68 | ; db DFTK_KW 69 | db DFTK_KW 70 | db DFTK_KW 71 | db DFTK_KW 72 | db DFTK_KW 73 | db DFTK_KW 74 | db DFTK_KW 75 | db DFTK_KW 76 | db DFTK_KW 77 | db DFTK_KW 78 | db DFTK_KW 79 | ; db DFTK_KW 80 | db DFTK_KW 81 | db DFTK_KW 82 | db DFTK_KW 83 | db DFTK_KW 84 | db DFTK_KW 85 | db DFTK_KW 86 | ; db DFTK_KW 87 | ; db DFTK_KW 88 | db DFTK_KW 89 | db DFTK_KW 90 | db DFTK_KW 91 | db DFTK_KW 92 | db DFTK_KW 93 | db DFTK_KW 94 | db DFTK_KW 95 | 96 | db DFTK_FN | DFTK_INT | DFTK_BYT 97 | db DFTK_FN | DFTK_INT | DFTK_BYT 98 | db DFTK_FN | DFTK_INT | DFTK_BYT 99 | db DFTK_FN | DFTK_INT | DFTK_BYT 100 | db DFTK_FN | DFTK_STR 101 | db DFTK_FN | DFTK_STR 102 | db DFTK_FN | DFTK_STR 103 | db DFTK_FN | DFTK_STR 104 | db DFTK_FN | DFTK_INT | DFTK_BYT 105 | db DFTK_FN | DFTK_INT | DFTK_BYT 106 | db DFTK_FN | DFTK_INT | DFTK_BYT 107 | db DFTK_FN | DFTK_INT | DFTK_BYT 108 | db DFTK_FN | DFTK_INT | DFTK_BYT 109 | db DFTK_FN | DFTK_INT | DFTK_BYT 110 | db DFTK_FN | DFTK_STR 111 | db DFTK_FN | DFTK_STR 112 | db DFTK_FN | DFTK_INT | DFTK_BYT 113 | db DFTK_FN | DFTK_INT | DFTK_BYT 114 | db DFTK_FN | DFTK_INT | DFTK_BYT 115 | db DFTK_FN | DFTK_INT | DFTK_BYT 116 | db DFTK_FN | DFTK_INT | DFTK_BYT 117 | db DFTK_FN | DFTK_INT | DFTK_BYT 118 | ;* Operators add the order of precedence (0=high, 7=low) 119 | db DFTK_OP | DFTK_INT | DFTK_BYT + 0 120 | db DFTK_OP | DFTK_INT | DFTK_BYT + 0 121 | db DFTK_OP | DFTK_INT | DFTK_BYT + 0 122 | db DFTK_OP | DFTK_INT | DFTK_BYT + 1 123 | db DFTK_OP | DFTK_INT | DFTK_BYT + 1 124 | db DFTK_OP | DFTK_STROP | DFTK_INT | DFTK_BYT + 2 ; Add works for strings too 125 | db DFTK_OP | DFTK_INT | DFTK_BYT + 2 126 | 127 | db DFTK_OP | DFTK_INT | DFTK_BYT + 5 128 | db DFTK_OP | DFTK_INT | DFTK_BYT + 5 129 | db DFTK_OP | DFTK_INT | DFTK_BYT + 5 130 | db DFTK_OP | DFTK_INT | DFTK_BYT + 4 131 | db DFTK_OP | DFTK_INT | DFTK_BYT + 4 132 | db DFTK_OP | DFTK_INT | DFTK_BYT + 4 133 | db DFTK_OP | DFTK_INT | DFTK_BYT + 4 134 | db DFTK_OP | DFTK_INT | DFTK_BYT + 4 135 | db DFTK_OP | DFTK_INT | DFTK_BYT + 7 136 | 137 | 138 | 139 | 140 | 141 | 142 | -------------------------------------------------------------------------------- /Oric/dflat/inc/graph.i: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* GRAPH.I 10 | ;* This is the definition file for graphics, specifically 11 | ;* The graphics screen handling module. It is just a 12 | ;* structure definition - but this structure is used to 13 | ;* record the important attributes of a text screen. 14 | ;* This was needed in the previous code due to 32 and 40 15 | ;* byte width screens, but Oric only has 40, so probably 16 | ;* could be optimised a little. 17 | ;* 18 | ;********************************************************** 19 | 20 | ; Important screen addresses for the Oric ULA 21 | TEXTSCRN = 0xbb80 22 | TEXTCHAR = 0xb400 23 | HISCRN = 0xa000 24 | HICHAR = 0x9800 25 | HITEXT = 0xbf68 26 | 27 | struct gr_screen 28 | db gr_mode ; Text or Hires mode 29 | dw gr_hi_start ; Address fo hires screen 30 | dw gr_char ; Start address of charset 31 | dw gr_text_start ; Start of text memory 32 | db gr_geom_fill1 ; (Not used, maintained for alignment) 33 | db gr_text_w ; Number of columns 34 | db gr_text_h ; Number of rows 35 | db gr_cur_x ; Current X position of cursor 36 | db gr_cur_y ; Current Y position of cursor 37 | dw gr_cur_ptr ; VDP address of cursor 38 | db gr_pixmode ; Pixel plot mode (0=Erase, 1=Plot, -1=XOR) 39 | db gr_pitch ; Pixel pitch for char plotting 40 | db gr_hires_x ; X pos of hires cursor 41 | db gr_hires_y ; Y pos of hires cursor 42 | db gr_ink ; Ink colour 43 | db gr_paper ; Paper colour 44 | db gr_margin ; Left margin 45 | dw gr_geom_tmp ; One word of temp storage for local use 46 | db gr_geom_tmp2 ; One byte of temp storage for local use 47 | end struct 48 | 49 | ; Sprite data stored in free 256 in font space 50 | spr_curX = TEXTCHAR ; Sprite current X pos 51 | spr_newX = TEXTCHAR+32 ; Sprite new X pos 52 | spr_curY = TEXTCHAR+64 ; Sprite current Y pos 53 | spr_newY = TEXTCHAR+96 ; Sprite new Y pos 54 | spr_chr = TEXTCHAR+128 ; Sprite character 55 | spr_bgnd = TEXTCHAR+160 ; Background character under sprite 56 | spr_baseadrl= TEXTCHAR+192 ; Y low address of sprite screen (with X=0) 57 | spr_baseadrh= TEXTCHAR+224 ; Y high address of sprite screen (with X=0) 58 | 59 | ; Tables stored in alternate character set area 60 | ; only used for high-resolution screen handling 61 | hires_row_low = HICHAR+0x400 ; Low byte of row pointer 62 | hires_row_hi = hires_row_low+200 ; High byte of row pointer 63 | hires_col = hires_row_hi+200 ; Pixel to byte column to mapping 64 | hires_mask = hires_col+240 ; Pixel column to pixel mask mapping 65 | 66 | -------------------------------------------------------------------------------- /Oric/dflat/io/io.i: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* IO.I 10 | ;* Definitions file for the IO module. The key structure 11 | ;* used by the IO system is defined here. 12 | ;* Some over-engineering here for future possibilities.. 13 | ;* 14 | ;********************************************************** 15 | 16 | ;* General IO structure allows the system to swap in 17 | ;* different IO devices by using indirect calls to 18 | ;* the appropriate routines. 19 | struct io_struct 20 | ds io_get_byte, 2 ;* Address of get byte 21 | ds io_put_byte, 2 ;* Address of put byte 22 | ds io_open_r, 2 ;* Address of open file for read 23 | ds io_open_w, 2 ;* Address of open file for write 24 | ds io_close_f, 2 ;* Address of close file 25 | ds io_del_f, 2 ;* Address of delete file 26 | ds io_ext1, 2 ;* Address of extended function 1 27 | ds io_ext2, 2 ;* Address of extended function 2 28 | end struct 29 | 30 | ;* Structure storage device specific vectors 31 | struct f_storage_table 32 | ds f_init_vec, 2 33 | ds f_read_byte_vec, 2 34 | ds f_write_byte_vec, 2 35 | ds f_put_delay_vec, 2 36 | ds f_block_gap_vec, 2 37 | ds f_release_vec, 2 38 | end struct 39 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/build.s: -------------------------------------------------------------------------------- 1 | db "Oric dflat\r" 2 | db "By @6502Nerd\r" 3 | if DFLATLOCI 4 | db "Build 0.43 [IJK-LOCI]\r" 5 | else 6 | db "Build 0.43 [IJK-TPSD]\r" 7 | endif 8 | db "(c) 2025\r\r",0 9 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/irq.s: -------------------------------------------------------------------------------- 1 | 2 | ;********************************************************** 3 | ;* 4 | ;* ORIC DFLAT 5 | ;* Dolo Miah (@6502Nerd) 6 | ;* Copyright (c) 2020 7 | ;* Free to use for any non-commercial purpose subject to 8 | ;* credit of original my authorship please! 9 | ;* 10 | ;* IRQ.S 11 | ;* This is the IRQ handler 12 | ;* There is only one regular interrupt source which is T1 13 | ;* T1 timeout on a 50Hz cycle, whose main job is to 14 | ;* flash the cursor and decrement some timers. 15 | ;* But there are handlers for BRK, user and VIA sources. 16 | ;* By default the user and VIA do nothing, but can be 17 | ;* redirected to user routines. 18 | ;* 19 | ;********************************************************** 20 | 21 | ;* Obviously this can only be done with 22 | ;* interrupts disabled! 23 | init_irq 24 | ; Core IRQ handler 25 | lda #lo(irq) 26 | sta vec_irq 27 | lda #hi(irq) 28 | sta vec_irq+1 29 | 30 | ; Core BRK handler 31 | lda #lo(irq_brk) 32 | sta vec_brk 33 | lda #hi(irq_brk) 34 | sta vec_brk+1 35 | 36 | ; User handlers VIA0 interrupts 37 | lda #lo(null_handler) 38 | sta vec_user_irq 39 | lda #hi(null_handler) 40 | sta vec_user_irq+1 41 | 42 | rts 43 | 44 | 45 | ;* Calls the master IRQ handler - from the ROM 46 | call_irq_master 47 | jmp (vec_irq) 48 | 49 | ;* Calls the BRK handler 50 | call_irq_brk 51 | jmp (vec_brk) 52 | 53 | ;* null interrupt 54 | null_irq 55 | rti 56 | 57 | ;* null handler 58 | null_handler 59 | rts 60 | 61 | 62 | ;* Master IRQ handler 63 | irq 64 | ; Don't use _pushAXY as it uses a temp location! 65 | pha 66 | txa 67 | pha 68 | tya 69 | pha 70 | 71 | cld ; Just in case! 72 | clc ; Standard behaviour 73 | 74 | ; Check if IRQ or BRK 75 | ; load P from stack in to A 76 | tsx 77 | lda 0x104,x 78 | ; BRK bit set? 79 | and #0x10 80 | bne call_irq_brk 81 | 82 | ;* Primary interrupt is timer 1 83 | lda IO_0 + IFR 84 | and #0x40 ; Bit 6 = Timer 1 interrupt 85 | beq irq_fin ; If nothing then end 86 | 87 | ; Service the timer 1 interrupt 88 | sta IO_0 + IFR ; Clear the interrupt 89 | jsr int_vdp_handler ; VDP timer updates plus calls user irq 90 | 91 | irq_fin 92 | _pullAXY 93 | rti 94 | 95 | ;* Handle BRK 96 | irq_brk 97 | ; Handle BRK 98 | ; Get PCL,H minus 2 gives the BRK instruction address 99 | sec 100 | lda 0x0105,x 101 | sbc #2 102 | sta df_brkpc 103 | lda 0x0106,x 104 | sbc #0 105 | sta df_brkpc+1 106 | ; Get the byte pointed to by old PC 107 | ; which is 1 on from the BRK 108 | ldy #1 109 | lda (df_brkpc),y 110 | sta df_brkval 111 | sta errno 112 | ; now update the return address 113 | lda df_pc 114 | sta 0x105,x 115 | lda df_pc+1 116 | sta 0x106,x 117 | 118 | _pullAXY 119 | ; Save the registers in temp area 120 | sta num_a 121 | stx num_a+1 122 | sty num_a+2 123 | ; when RTI occurs: 124 | ; will return to error handler 125 | ; df_brkval will contain signature 126 | rti 127 | 128 | 129 | ;**************************************** 130 | ;* int_vdp_handler 131 | ;* VDP interrupt handler 132 | ;**************************************** 133 | int_vdp_handler 134 | jsr update_timers ; If it is then update system timers (kernel routine) 135 | lda vdp_curoff ; Is cursor enabled? 136 | bne int_vdp_fin ; Skip if disabled 137 | 138 | dec vdp_curcnt ; Decrement countdown 139 | bne int_vdp_fin ; If not expired, do nothing 140 | lda vdp_curtim ; Reset cursor countdown 141 | sta vdp_curcnt 142 | lda vdp_curstat ; Get the flash status 143 | eor #0x80 ; Invert top bit 144 | sta vdp_curstat 145 | eor vdp_curval ; EOR with whats under cursor 146 | ; Use cursor address, write to screen 147 | ; ptr is base, offset with X coord in Y register 148 | ldy gr_scrngeom+gr_cur_x 149 | sta (gr_scrngeom+gr_cur_ptr),y 150 | 151 | int_vdp_fin 152 | jmp (vec_user_irq) 153 | 154 | ;**************************************** 155 | ;* update_timers 156 | ;* Update 24 bit timer and debounce counters 157 | ;**************************************** 158 | update_timers 159 | inc vdp_cnt 160 | bne inc_kb_timers 161 | inc vdp_cnt_hi 162 | bne inc_kb_timers 163 | inc vdp_cnt_hi2 164 | inc_kb_timers 165 | ldx kb_deb ; Is debounce 0? 166 | beq skip_kb_deb 167 | dec kb_deb 168 | skip_kb_deb 169 | ldx kb_rep ; Is repeat timer 0? 170 | beq skip_kb_rep 171 | dec kb_rep 172 | skip_kb_rep 173 | rts 174 | 175 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/kernel.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* KERNEL.S 10 | ;* Lol, I thought this would become more sophisticated 11 | ;* hence the name 'kernel'. But no, it just initialises 12 | ;* memory, VIA, sound and screen, before passing control 13 | ;* to main. 14 | ;* References to banks etc. are from ported code which 15 | ;* did do more stuff, namely helping with ROM banking. 16 | ;* 17 | ;********************************************************** 18 | 19 | ;* Include all definition and code files in the right order 20 | include "inc/includes.i" 21 | include "inc/graph.i" 22 | include "io/io.i" 23 | include "dflat/dflat.i" 24 | include "kernel/zeropage.i" 25 | include "dflat/dflat.i" 26 | include "dflat/error.i" 27 | 28 | 29 | ;**************************************** 30 | ;* Set 6502 default vectors * 31 | ;**************************************** 32 | data ; Set vectors 33 | org 0xfffa ; Vectors are at these addresses 34 | fcw nmi ; 0xfffa : NMI Vector 35 | fcw init ; 0xfffc : Reset Vector 36 | fcw call_irq_master ; 0xfffe : IRQ Vector 37 | 38 | ; ROM code 39 | code ; 40 | org 0xc000 ; Start of ROM 41 | 42 | _code_start 43 | ; Restore current bank always at address c001 * not used for Oric * 44 | mod_sz_kernel_s 45 | ; include OS ROM calls - must be from 0xc000 46 | include "kernel/osromvec.i" 47 | 48 | ;* Include all core code in the right order 49 | include "kernel/snd-low.s" 50 | include "kernel/main.s" 51 | include "kernel/irq.s" 52 | include "utils/utils.s" 53 | include "io/io.s" 54 | 55 | ;* Reset vector points here - 6502 starts here 56 | init 57 | ; jmp init_test 58 | ; First clear ram 59 | sei ; Need this for MOS 6502 60 | cld ; Need this for MOS 6502 61 | jmp init_ram ; jmp not jsr to ram initialiser 62 | init_2 ; init_ram will jump back to here 63 | ldx #0xff ; Initialise stack pointer 64 | txs 65 | 66 | jsr kernel_init 67 | 68 | jmp main 69 | 70 | kernel_init 71 | jsr init_irq ; Initialise IRQ handling 72 | 73 | jsr init_via0 ; initialise cia 0 - tape inactive 74 | ; jsr tp_init ; Initialise tape handling 75 | 76 | jsr init_snd ; initialise the sound chip 77 | 78 | jsr gr_init ; Initialise graphics, default is text mode 79 | 80 | jsr init_keyboard ; initialise keyboard timer settings 81 | jsr io_init ; Set default input/output device 82 | 83 | lda #0 84 | sta vdp_cnt 85 | 86 | jsr df_init ; Initialise interpreter 87 | 88 | cli ; irq interrupts enable 89 | 90 | ;kernel_test 91 | ; jsr kb_read_raw 92 | ; jsr utilPrintA 93 | ; jsr utilPrintCRLF 94 | ; jmp kernel_test 95 | 96 | rts 97 | 98 | 99 | ;* Initialises RAM, skipping page 3 which is for IO 100 | ;* Zeroes all addressable RAM in the default bank i.e. up to 0xc000 101 | init_ram 102 | lda #0 ; Normal RAM filled with zero 103 | ldy #0x02 ; But Y initially at 2 to not overwrite pointer 104 | tax ; Page counter starts at zero 105 | stx 0x00 ; Start at page 0 106 | stx 0x01 107 | init_ram_1 108 | cpx #3 ; Ignore page 3 (IO page) 109 | beq init_ram_skip 110 | init_ram_fill 111 | sta (0x00),y ; Write byte to RAM (zero or copy of ROM) 112 | iny 113 | bne init_ram_1 ; Do a whole page 114 | init_ram_skip 115 | inc 0x01 ; Increase page pointer 116 | inx ; Reduce page count 117 | cpx #0xc0 ; Do all pages until page until we get to page C0 118 | bne init_ram_1 119 | 120 | beq init_2 ; Carry on initialisation 121 | 122 | ; 6502 Non-maskable interrupt come here 123 | nmi 124 | rti 125 | 126 | mod_sz_kernel_e 127 | 128 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/main.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* MAIN.S 10 | ;* This is where the main user program is executed by 11 | ;* the 'kernel' once the system is initialised and ready. 12 | ;* Today, main does very little - first shows the system 13 | ;* boot up message, and then passes control to dflat. 14 | ;* 15 | ;********************************************************** 16 | 17 | ; ROM code 18 | code 19 | 20 | main 21 | ldx #lo(msg_hello_world) 22 | lda #hi(msg_hello_world) 23 | jsr io_print_line 24 | 25 | infinity 26 | 27 | jmp df_pg_dflat 28 | 29 | msg_hello_world 30 | ;* build.s is generate by the assemble.bat file 31 | ;* all it does is echo an assembler line to 32 | ;* including the build date in the message. 33 | include "kernel/build.s" 34 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/osromvec.i: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2021 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* OSROMVEC.I 10 | ;* This include file sets up the OS ROM vectors which can 11 | ;* be invoked by user programs to access ROM functions and 12 | ;* will be maintained across versions of dflat to support 13 | ;* backward and forward compatibility. 14 | ;* Make sure these vectors are set up from 0xc000 as this 15 | ;* what user programs will rely on! 16 | ;* 17 | ;********************************************************** 18 | 19 | ; Common OS ROM calls - user programs should JMP or JSR 20 | ; through these routines where possible to maintain 21 | ; compatibility with ROM changes as these calls will 22 | ; always be in the same position 23 | _rom_vec_00 jmp gr_init_screen_txt ; Go in to text mode 24 | _rom_vec_01 jmp gr_cls ; Clear text screen 25 | _rom_vec_02 jmp gr_set_cur ; Set text cursor position 26 | _rom_vec_03 jmp gr_init_hires ; Go in to hires mode 27 | _rom_vec_04 jmp (io_block+io_get_byte) ; Get byte 28 | _rom_vec_05 jmp (io_block+io_put_byte) ; Put byte 29 | _rom_vec_06 jmp io_read_line ; Read a line 30 | _rom_vec_07 jmp io_print_line ; Print a line 31 | _rom_vec_08 jmp snd_set ; Set sound register 32 | _rom_vec_09 jmp kb_stick ; Get joystick status 33 | _rom_vec_0a jmp gr_plot ; Plot a lores character 34 | _rom_vec_0b jmp gr_hchar ; Plot a hires character 35 | _rom_vec_0c jmp gr_point_setup ; Get address, offset, mask for hires coords 36 | _rom_vec_0d jmp gr_point ; Plot a hires pixel 37 | _rom_vec_0e jmp df_rt_sprupd ; Refresh sprites in lores mode 38 | _rom_vec_0f jmp gr_getXY_base ; Get row address of text screen 39 | _rom_vec_10 jmp gr_pixel ; Get a pixel value from hires screen 40 | _rom_vec_11 jmp gr_get ; Get screen at coords 41 | _rom_vec_12 jmp io_active_device ; Set the active device 42 | _rom_vec_13 jmp (io_block+io_open_r) ; Open file for read 43 | _rom_vec_14 jmp (io_block+io_open_w) ; Open file for write 44 | _rom_vec_15 jmp (io_block+io_close_f) ; Close file 45 | _rom_vec_16 jmp (io_block+io_del_f) ; Delete file 46 | _rom_vec_17 jmp (io_block+io_ext1) ; Extended op1 (open file for binary read) 47 | _rom_vec_18 jmp (io_block+io_ext2) ; Extended op2 (open file for binary write) 48 | _rom_vec_19 jmp snd_get_note ; Get for an octave,note (X,Y) get pitch lo,hi (X,A) 49 | -------------------------------------------------------------------------------- /Oric/dflat/kernel/snd-low.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* SND-LOW.S 10 | ;* Routines to access the AY-3-8912, which is done through 11 | ;* lines of the VIA - CB2 and CA2 for chip select, and 12 | ;* Port A for data interface. This makes accessing the 13 | ;* 8912 a bit slow.. 14 | ;* 15 | ;* CB2 CA2 Function CB2=BDIR, CA2=BC1 16 | ;* 0 0 Not selected 17 | ;* 0 1 Read register in to Port A 18 | ;* 1 0 Write register from Port A 19 | ;* 1 1 Select register # from Port A 20 | ;********************************************************** 21 | 22 | ;**************************************** 23 | ;* snd_sel_reg 24 | ;* Select AY register from A 25 | ;* Input : A = Value 26 | ;* Output : None 27 | ;* Regs affected : None 28 | ;**************************************** 29 | snd_sel_reg 30 | pha 31 | sta SND_ADBUS ; Put reg # on Port A (sound bus) 32 | 33 | lda #SND_SELSETADDR ; Get ready to select the reg 34 | sta SND_MODE ; Latch the reg # on Port A 35 | 36 | lda #SND_DESELECT ; Deselect AY 37 | sta SND_MODE 38 | 39 | pla 40 | rts 41 | 42 | ;**************************************** 43 | ;* snd_set_reg 44 | ;* Set previosuly selected AY register 45 | ;* Input : A = Value to set 46 | ;* Output : None 47 | ;* Regs affected : None 48 | ;**************************************** 49 | snd_set_reg 50 | pha 51 | 52 | sta SND_ADBUS ; Put reg value on Port A (sound bus) 53 | lda #SND_SELWRITE ; Select mode for writing data 54 | sta SND_MODE ; Latch reg value on Port A 55 | lda #SND_DESELECT ; Deselect AY 56 | sta SND_MODE 57 | 58 | pla 59 | rts 60 | 61 | ;**************************************** 62 | ;* snd_set 63 | ;* Set reg X to value A 64 | ;* Input : X=Reg, A = Value to set 65 | ;* Output : None 66 | ;* Regs affected : None 67 | ;**************************************** 68 | snd_set 69 | pha 70 | txa 71 | jsr snd_sel_reg 72 | pla 73 | jmp snd_set_reg 74 | 75 | 76 | ;**************************************** 77 | ;* snd_get 78 | ;* Get AY register X value 79 | ;* Input : X = Reg no 80 | ;* Output : A = Value 81 | ;* Regs affected : None 82 | ;**************************************** 83 | ;snd_get 84 | ; 85 | ; lda #0xff ; Set Port A to output 86 | ; sta IO_0+DDRA 87 | ; 88 | ; stx SND_ADBUS ; Put X on the sound bus (X = reg address) 89 | ; 90 | ; lda #SND_SELSETADDR ; Get ready to select the reg 91 | ; sta SND_MODE ; Latch the reg # on Port A 92 | ; 93 | ; lda #SND_DESELECT ; Deselect AY 94 | ; sta SND_MODE 95 | ; 96 | ; lda #0x00 ; Set Port A to input 97 | ; sta IO_0+DDRA 98 | ; 99 | ; lda #SND_SELREAD ; Select mode for reading data 100 | ; sta SND_MODE ; Set read mode on AY 101 | ; 102 | ; lda SND_ADBUS ; Get value in to Y from Port A 103 | ; pha ; Save it to stack 104 | ; 105 | ; lda #SND_DESELECT ; Deselect AY 106 | ; sta SND_MODE 107 | ; 108 | ; lda #0xff ; Set Port A back to output 109 | ; sta IO_0+DDRA 110 | ; 111 | ; pla ; Get the value off stack 112 | ; 113 | ; rts 114 | 115 | -------------------------------------------------------------------------------- /Oric/dflat/make.ps1: -------------------------------------------------------------------------------- 1 | # Script to build dflat for Oric 2 | try { 3 | 4 | $start = (Get-Date) 5 | 6 | # Build dflat LOCI ROM 7 | Write-Output "Building LOCI ROM" 8 | ./as65 "-n" "-c" "-l" "-t" "-dBANK0" "-dDFLATLOCI" "-orom/dfloci.rom" bank/bank0.s 9 | if ($LASTEXITCODE -gt 0) { throw } 10 | Write-Output (Select-String -Path "bank/bank0.lst" -Pattern "mod_sz_bios_e :" -SimpleMatch).Line 11 | Write-Output (Select-String -Path "bank/bank0.lst" -Pattern "mod_sz_language_e :" -SimpleMatch).Line 12 | 13 | # Build dflat standard ROM 14 | Write-Output "Building standard ROM" 15 | ./as65 "-n" "-c" "-l" "-t" "-dBANK0" "-orom/dflat.rom" bank/bank0.s 16 | if ($LASTEXITCODE -gt 0) { throw } 17 | 18 | #if errorlevel 1 goto errors 19 | # copy bank\bank0.lst bank\bank0.sym 20 | 21 | # Combine individual banks in to one 64K binary for EEPROM programming 22 | Get-Content -Encoding Byte rom/dflat.rom, rom/dflat.rom, rom/dflat.rom, rom/dflat.rom | Set-Content -Encoding Byte rom/ORICD.ROM 23 | 24 | # Copy bank 0 to Oricutron folder as dflat.rom 25 | Copy-Item rom/dflat.rom -Destination ../emulator/roms/dflat.rom 26 | 27 | # Copy tt_ and fd_ symbols to the Oricutron rom file 28 | Set-Content -Value "tt_readbyte_setcarry = no" -Path ../emulator/roms/dflat.pch 29 | $symbols = (Select-String -Path "bank/bank0.lst" -Pattern "tt_" -SimpleMatch).Line.TrimStart(" ") 30 | foreach ($symbol in $symbols) { 31 | $items = $symbol.Split(" ") 32 | if ($items[0].StartsWith("tt_")) { 33 | Add-Content -Value ($items[0]+" = "+$items[2]) -Path ../emulator/roms/dflat.pch 34 | } 35 | } 36 | $symbols = (Select-String -Path "bank/bank0.lst" -Pattern "fd_" -SimpleMatch).Line.TrimStart(" ") 37 | foreach ($symbol in $symbols) { 38 | $items = $symbol.Split(" ") 39 | if ($items[0].StartsWith("fd_")) { 40 | Add-Content -Value ($items[0]+" = "+$items[2]) -Path ../emulator/roms/dflat.pch 41 | } 42 | } 43 | 44 | Write-Output (Select-String -Path "bank/bank0.lst" -Pattern "mod_sz_bios_e :" -SimpleMatch).Line 45 | Write-Output (Select-String -Path "bank/bank0.lst" -Pattern "mod_sz_language_e :" -SimpleMatch).Line 46 | 47 | Write-Output ("Build completed in :"+((Get-Date)-$start)+" seconds") 48 | 49 | } 50 | catch { 51 | Write-Output "COMPILATION ERRORS" 52 | } 53 | 54 | -------------------------------------------------------------------------------- /Oric/dflat/rom/ORICD.ROM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/dflat/rom/ORICD.ROM -------------------------------------------------------------------------------- /Oric/dflat/rom/dflat.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/dflat/rom/dflat.rom -------------------------------------------------------------------------------- /Oric/dflat/rom/dfloci.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/dflat/rom/dfloci.rom -------------------------------------------------------------------------------- /Oric/dflat/sound/sound.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* SOUND.S 10 | ;* Sound driver module - routines to access the AY-3-8912 11 | ;* This sound chip was found in a number of popular micros 12 | ;* in the early to mid 80s, including my first computer, 13 | ;* the Oric-1, as well as the MSX range. 14 | ;* 15 | ;********************************************************** 16 | 17 | 18 | ; ROM code 19 | code 20 | 21 | mod_sz_sound_s 22 | 23 | 24 | ;**************************************** 25 | ;* snd_get_note 26 | ;* Get a note from the music scale table 27 | ;* Input : Octave in X, note in Y 28 | ;* Octave between 1 and 6 29 | ;* Output : A,X = Value hi,lo 30 | ;* Regs affected : X 31 | ;**************************************** 32 | snd_get_note 33 | tya 34 | asl a 35 | tay 36 | ; Get note for octave 1 37 | lda snd_music_tab,y 38 | sta tmp_alo 39 | lda snd_music_tab+1,y 40 | 41 | snd_get_note_oct 42 | dex 43 | beq snd_note_done 44 | ; Divide freq by 2 each octave 45 | lsr a 46 | ror tmp_alo 47 | jmp snd_get_note_oct 48 | snd_note_done 49 | ldx tmp_alo 50 | rts 51 | 52 | 53 | ;**************************************** 54 | ;* init_snd 55 | ;* Initialise sound - after cia 1 has been initialised 56 | ;* Input : None 57 | ;* Output : None 58 | ;* Regs affected : All 59 | ;**************************************** 60 | init_snd 61 | ldx #15 62 | init_snd_regs 63 | lda snd_init_tab,x 64 | jsr snd_set ; Set X to A 65 | dex 66 | bpl init_snd_regs ; 16 regs 67 | 68 | rts ; return from sub 69 | 70 | ; Register array initialisation values 71 | ; Assuming 1Mhz input clock 72 | snd_init_tab 73 | db 0x40 ; R0 = Channel A Tone Low 74 | db 0x00 ; R1 = Channel A Tone High 75 | db 0x00 ; R2 = Channel B Tone Low 76 | db 0x01 ; R3 = Channel B Tone High 77 | db 0x00 ; R4 = Channel C Tone Low 78 | db 0x02 ; R5 = Channel C Tone High 79 | db 0x00 ; R6 = Noise period 80 | db 0b01111110 ; R7 = Control : IOB input, IOA output, No Noise, only A enabled 81 | db 0x1f ; R8 = Channel A Vol 82 | db 0x1f ; R9 = Channel B Vol 83 | db 0x1f ; R10 = Channel C Vol 84 | db 0x00 ; R11 = Envelope Period Low 85 | db 0x03 ; R12 = Envelope Period High 86 | db 0b00000000 ; R13 = Envelope Shape : 0000 87 | db 0xff ; R14 = IO Port A - KB lines disabled 88 | db 0x00 ; R15 = IO Port B ; Initialise to 0 (doesn't exist) 89 | 90 | snd_music_tab 91 | dw 3058 ; C 0 (Octave 1 3058Hz) 92 | dw 2886 ; C# 1 93 | dw 2724 ; D 2 94 | dw 2571 ; D# 3 95 | dw 2427 ; E 4 96 | dw 2291 ; F 5 97 | dw 2162 ; F# 6 98 | dw 2041 ; G 7 99 | dw 1926 ; G# 8 100 | dw 1818 ; A 9 101 | dw 1716 ; A# 10 102 | dw 1620 ; B 11 103 | dw 0 ; Null 12 104 | 105 | mod_sz_sound_e 106 | -------------------------------------------------------------------------------- /Oric/dflat/utils/intmath.s: -------------------------------------------------------------------------------- 1 | ;********************************************************** 2 | ;* 3 | ;* ORIC DFLAT 4 | ;* Dolo Miah (@6502Nerd) 5 | ;* Copyright (c) 2020 6 | ;* Free to use for any non-commercial purpose subject to 7 | ;* credit of original my authorship please! 8 | ;* 9 | ;* INTMATH.S 10 | ;* Core module for integer maths supported by dflat 11 | ;* Now supports signed integers in 2s complement form 12 | ;* Uses the intmath registers: num_a, num_b, num_x, num_tmp 13 | ;* Most inputs are through num_a and num_b, with result in 14 | ;* num_a 15 | ;* Operations: add, sub, swap, 8 bit mult, mult, divide 16 | ;* 17 | ;********************************************************** 18 | 19 | ; ROM code 20 | code 21 | 22 | ;**************************************** 23 | ;* Add : A + B result in A 24 | ;**************************************** 25 | ;int_add 26 | ; clc 27 | ; lda num_a 28 | ; adc num_b 29 | ; sta num_a 30 | ; lda num_a+1 31 | ; adc num_b+1 32 | ; sta num_a+1 33 | ; rts 34 | 35 | ;**************************************** 36 | ;* Sub : A - B result in A 37 | ;**************************************** 38 | ;int_sub 39 | ; sec 40 | ; lda num_a 41 | ; sbc num_b 42 | ; sta num_a 43 | ; lda num_a+1 44 | ; sbc num_b+1 45 | ; sta num_a+1 46 | ; rts 47 | 48 | ;**************************************** 49 | ;* Swp : A <-> B 50 | ;**************************************** 51 | ;int_swp 52 | ; lda num_a 53 | ; ldx num_b 54 | ; sta num_b 55 | ; stx num_a 56 | ; lda num_a+1 57 | ; ldx num_b+1 58 | ; sta num_b+1 59 | ; stx num_a+1 60 | ; rts 61 | 62 | ;**************************************** 63 | ;* Mult : A * B result in A 64 | ;* B assumed to be an 8 bit quantity 65 | ;**************************************** 66 | int_fast_mult 67 | _cpyZPWord num_a,num_tmp 68 | lda #0 69 | sta num_a 70 | sta num_a+1 71 | ldy #8 72 | int_fast_mult_cycle 73 | lsr num_b 74 | bcc int_fast_mult_next 75 | clc 76 | lda num_a 77 | adc num_tmp 78 | sta num_a 79 | lda num_a+1 80 | adc num_tmp+1 81 | sta num_a+1 82 | int_fast_mult_next 83 | asl num_tmp 84 | rol num_tmp+1 85 | dey 86 | bne int_fast_mult_cycle 87 | rts 88 | 89 | ;**************************************** 90 | ;* Mult : A * B result in A 91 | ;**************************************** 92 | int_mult 93 | _cpyZPWord num_a,num_tmp 94 | lda #0 95 | sta num_a 96 | sta num_a+1 97 | ldy #16 98 | int_mult_cycle 99 | lsr num_b+1 100 | ror num_b 101 | bcc int_mult_next 102 | clc 103 | lda num_a 104 | adc num_tmp 105 | sta num_a 106 | lda num_a+1 107 | adc num_tmp+1 108 | sta num_a+1 109 | int_mult_next 110 | asl num_tmp 111 | rol num_tmp+1 112 | dey 113 | bne int_mult_cycle 114 | rts 115 | 116 | ;**************************************** 117 | ;* Div : A / B result in A, remainder X 118 | ;**************************************** 119 | int_div 120 | ; adjust signs 121 | lda #0 122 | sta num_tmp ; Assume all +ve 123 | lda num_a+1 ; Check A hi 124 | bpl int_div_skip_negA 125 | inc num_tmp ; Record sign flip 126 | sec ; 2's complement A 127 | lda #0 ; by 0-A 128 | sbc num_a ; A is now +ve 129 | sta num_a 130 | lda #0 131 | sbc num_a+1 132 | sta num_a+1 133 | int_div_skip_negA 134 | lda num_b+1 ; Check B hi 135 | bpl int_div_skip_negB 136 | inc num_tmp ; Record sign flip 137 | sec ; 2's complement B 138 | lda #0 ; by 0-B 139 | sbc num_b ; B is now +ve 140 | sta num_b 141 | lda #0 142 | sbc num_b+1 143 | sta num_b+1 144 | int_div_skip_negB ; num_tmp bit 0=1 for result flip 145 | ; x is the remainder 146 | lda #0 147 | sta num_x 148 | sta num_x+1 149 | ; 16 bit division 150 | ldy #16 151 | int_div_cycle 152 | ; shift a left 1 bit 153 | asl num_a 154 | rol num_a+1 155 | ; shift in to remainder 156 | rol num_x 157 | rol num_x+1 158 | ; try and subtract b from remainder 159 | sec 160 | lda num_x 161 | sbc num_b 162 | tax 163 | lda num_x+1 164 | sbc num_b+1 165 | bcc int_div_skip 166 | ; so b did fit in to remainder, save it 167 | stx num_x 168 | sta num_x+1 169 | inc num_a 170 | int_div_skip 171 | ; carry on for 16 bits 172 | dey 173 | bne int_div_cycle 174 | ; result in a, remainder in x 175 | ; check num_tmp bit 0 176 | lda num_tmp 177 | and #1 178 | beq int_div_noflip 179 | sec ; 2's complement A 180 | lda #0 ; by 0-A 181 | sbc num_a ; A is now +ve 182 | sta num_a 183 | lda #0 184 | sbc num_a+1 185 | sta num_a+1 186 | int_div_noflip 187 | rts 188 | 189 | -------------------------------------------------------------------------------- /Oric/emulator/SDL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/SDL.dll -------------------------------------------------------------------------------- /Oric/emulator/Version.txt: -------------------------------------------------------------------------------- 1 | ____ _ __ 2 | / __ \____(_)_____ __/ /________ ___ 3 | / /_/ / __/ / __/ // / __/ __/ _ \/ _ \ 4 | \____/_/ /_/\__/\_,_/\__/_/ \___/_//_/ 5 | _______________________________________ 6 | ======================================= 7 | for developers: v.1.2.4-20210214 8 | -------------------------------------------------------------------------------- /Oric/emulator/disks/bddos.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/disks/bddos.dsk -------------------------------------------------------------------------------- /Oric/emulator/disks/sedoric.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/disks/sedoric.dsk -------------------------------------------------------------------------------- /Oric/emulator/images/avirec.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/avirec.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/disk_active.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/disk_active.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/disk_ejected.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/disk_ejected.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/disk_idle.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/disk_idle.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/disk_modactive.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/disk_modactive.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/disk_modified.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/disk_modified.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/gfx_atmoskbd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/gfx_atmoskbd.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/gfx_atmoskbd.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/gfx_atmoskbd.psd -------------------------------------------------------------------------------- /Oric/emulator/images/gfx_oric1kbd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/gfx_oric1kbd.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/gfx_pravetzkbd.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/gfx_pravetzkbd.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/statusbar.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/statusbar.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/tape_ejected.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/tape_ejected.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/tape_pause.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/tape_pause.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/tape_play.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/tape_play.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/tape_record.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/tape_record.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/tape_stop.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/tape_stop.bmp -------------------------------------------------------------------------------- /Oric/emulator/images/winicon.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/images/winicon.bmp -------------------------------------------------------------------------------- /Oric/emulator/oricutron-sdl2.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/oricutron-sdl2.exe -------------------------------------------------------------------------------- /Oric/emulator/oricutron.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/oricutron.exe -------------------------------------------------------------------------------- /Oric/emulator/pravdisks/100.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/pravdisks/100.dsk -------------------------------------------------------------------------------- /Oric/emulator/pravdisks/130.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/pravdisks/130.dsk -------------------------------------------------------------------------------- /Oric/emulator/pravdisks/210.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/pravdisks/210.dsk -------------------------------------------------------------------------------- /Oric/emulator/pravdisks/231.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/pravdisks/231.dsk -------------------------------------------------------------------------------- /Oric/emulator/printer_out.txt: -------------------------------------------------------------------------------- 1 | 2 | 0 U=520:W=34:X=20:Y=25:P=X:DIMJ(40):M=123:B=32:A=125:Z=124:O=24:GOSUB7:REPEAT 3 | 1 K=PEEK(U):PLOTX,Y,B:X=X+(K=170ANDX>2):X=X-(K=176ANDX<37):PLOTX,Y,M:PLOTP,Q,B 4 | 2 F=-(K=159ANDQ<2):G=-(F=0):P=P*G+X*F:Q=(Q+(Q>1))*G+(Y-1)*F:V=RND(1)-.3<(L/20) 5 | 3 H=-(Q>1ANDSCRN(P,Q)=A):PLOTP,Q,Z:ONHGOSUB6:IFFTHENPLOT1,O,7:ZAP:PLOT1,O,4 6 | 4 L=L+H:I=-(I=W):J=J(I):PLOTI,J,B:J=(J-V)*-(J1ANDSCRN(I,J)=Z):PLOTI,J,A:ONHGOSUB6:L=L+H:UNTILJ=Y:EXPLODE:END 8 | 6 SHOOT:PLOTP,Q,42:S=S+Q:PLOT18,0,STR$(S):J(P)=1+L/2:WAIT7:PLOTP,Q,B:Q=1:RETURN 9 | 7 INK4:CLS:POKE#26A,10:FORG=0TO26:F=2*-(G>0ANDG<9)-(G>8ANDG<18)*3-(G>17ANDG<=Y) 10 | 8 PLOT0,G,F+16:NEXT:FORG=47064TO47087:READD:POKEG,D:NEXT:PLOT1,1,2:PLOT1,0,7 11 | 9 Q=1:RETURN:DATA0,12,12,45,45,63,63,30,0,8,4,8,4,8,4,0,33,18,30,45,45,63,18,33 12 | 13 | 0 PAPER4:INK6:G=5:REPEAT:CLS:GOSUB9:GOSUB7:FORY=4TOBT:FORX=3TO36 14 | 1 W=4:S=SCRN(X+3,Y):PLOTX,Y,P$:IFS=BTHENEXPLODE:PAPER7:WAIT50:PAPER0:END 15 | 2 IFKEY$<>""ANDBX=0ANDY0THENBY=BY+1:H=SCRN(BX,BY):PLOTBX,OY,32:OY=BY:IFBY>BTTHENBX=0 17 | 4 IFBX<>0THENPLOTBX,BY,63:IFH=BTHENW=1:SC=SC+G:PLOT12,0,STR$(SC) 18 | 5 PLAY-(BX<>0)+2,0,0,0:SOUND1,BY*10+1,10:SOUND2,(X-3)*2+Y*66+1000,10 19 | 6 WAITW:NEXT:PLOTX,Y," ":NEXT:PAPER3:ZAP:ZAP:PAPER4:G=G+1:UNTIL0 20 | 7 PLOT2,0,"LV:"+STR$(G-4)+" SC:"+STR$(SC):BX=0:P$=CHR$(1)+"I\T":B=185 21 | 8 FORP=6TO33:FORQ=26-RND(1)*G*2TO26:PLOTP,Q,B:NEXT:NEXT:RETURN 22 | 9 BT=25:FORA=0TO26:PLOT2,A,9:NEXT:PLOT0,26,18:PLOT1,26,2:RETURN 23 | 24 | 0 INK6:G=5:REPEAT:CLS:GOSUB9:GOSUB7:PLAY3,1,1,1:FORY=4TOBT:FORX=3TO36 25 | 1 W=4:S=SCRN(X+3,Y):PLOTX,Y,P$:IFS=BTHENEXPLODE:PAPER7:WAIT50:PAPER0:END 26 | 2 IFKEY$<>""ANDBX=0ANDY0THENBY=BY+1:H=SCRN(BX,BY):PLOTBX,OY,32:OY=BY:IFBY>BTTHENBX=0 28 | 4 SOUND2,(X-3)*2+Y*66+1000,10:IFBX<>0THENPLOTBX,BY,63 29 | 5 IFH=BTHENW=1:PLAY2,1,1,150:SC=SC+G:PLOT12,0,STR$(SC) 30 | 6 WAITW:NEXT:PLOTX,Y," ":NEXT:PAPER3:ZAP:ZAP:PAPER4:G=G+1:UNTIL0 31 | 7 PLOT2,0,"LV:"+STR$(G-4)+" SC:"+STR$(SC):BX=0:P$=CHR$(1)+"I\T":B=185 32 | 8 FORP=6TO33:FORQ=26-RND(1)*G*2TO26:PLOTP,Q,B:NEXT:NEXT:RETURN 33 | 9 PAPER4:BT=25:FORA=0TO26:PLOT2,A,9:NEXT:PLOT0,26,18:PLOT1,26,2:RETURN 34 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -------------------------------------------------------------------------------- /Oric/emulator/roms/8dos.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/8dos.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/8dos.sym: -------------------------------------------------------------------------------- 1 | 0310 P0OFF 2 | 0311 P0ON 3 | 0312 P1OFF 4 | 0313 P1ON 5 | 0314 P2OFF 6 | 0315 P2ON 7 | 0316 P3OFF 8 | 0317 P3ON 9 | 0318 MOTOFF 10 | 0319 MOTON 11 | 031A DRSEL1 12 | 031B DRSEL2 13 | 031C SHIFTREG 14 | 031D DATAREG 15 | 031E READMODE 16 | 031F WRITEMODE 17 | 0320 8dRomStart 18 | -------------------------------------------------------------------------------- /Oric/emulator/roms/8dos2.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/8dos2.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/8dos2.sym: -------------------------------------------------------------------------------- 1 | 0310 P0OFF 2 | 0311 P0ON 3 | 0312 P1OFF 4 | 0313 P1ON 5 | 0314 P2OFF 6 | 0315 P2ON 7 | 0316 P3OFF 8 | 0317 P3ON 9 | 0318 MOTOFF 10 | 0319 MOTON 11 | 031A DRSEL1 12 | 031B DRSEL2 13 | 031C SHIFTREG 14 | 031D DATAREG 15 | 031E READMODE 16 | 031F WRITEMODE 17 | 0320 8dRomStart 18 | -------------------------------------------------------------------------------- /Oric/emulator/roms/Bas122de.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwertz 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/Bas122fr.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = azerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/Bas122uk.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/MICRODIS.ROM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/MICRODIS.ROM -------------------------------------------------------------------------------- /Oric/emulator/roms/basic10.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4af 21 | fd_csave_getname_pc = $e7ef 22 | ;fd_store_getname_pc = 23 | ;fd_recall_getname_pc = 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $0035 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e696 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e6b9 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e681 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e630 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e65b 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = no 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | ;tt_readbyte_storezero_addr = 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e5c6 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e5f2 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e7fe 67 | 68 | ; Address of the RTS at the end of STORE 69 | ;tt_store_end_pc = 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e6ba 74 | tt_writeleader_end_pc = $e6c9 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/basic10.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/basic10.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/basic10.sym: -------------------------------------------------------------------------------- 1 | c006 JumpTab 2 | c0ea Keywords 3 | c2ac ErrorMsgs 4 | c3ca FindForVar 5 | c3f8 VarAlloc 6 | c448 FreeMemCheck 7 | c47c PrintError 8 | c4b5 BackToBASIC 9 | c4e3 InsDelLine 10 | c4e0 DeleteLine 11 | c524 InsertLine 12 | c56f SetLineLinkPtrs 13 | c5a2 GetLine 14 | c5f8 ReadKey 15 | c60a TokeniseLine 16 | c6a5 EDIT 17 | c6de FindLine 18 | c719 NEW 19 | c738 CLEAR 20 | c773 LIST 21 | c824 LLIST 22 | c832 LPRINT 23 | c841 FOR 24 | c8c1 DoNextLine 25 | c8fe DoStatement 26 | c91f RESTORE 27 | c93f STOP 28 | c941 END 29 | c91e CONT 30 | c98b RUN 31 | c996 GOSUB 32 | c9b3 GOTO 33 | c9e0 RETURN 34 | ca0a DATA 35 | ca1c FindEndOfStatement 36 | ca1f FindEOL 37 | ca3e IF 38 | ca61 REM 39 | ca78 ON 40 | ca98 Txt2Int 41 | cad2 LET 42 | cb61 PRINT 43 | cb9f NewLine 44 | cc59 SetCursor 45 | cbed PrintString 46 | cc0a CLS 47 | cc8c TRON 48 | cc8f TROFF 49 | ccba GET 50 | ccc9 INPUT 51 | ccfd READ 52 | ce0c NEXT 53 | ce77 GetExpr 54 | ce8b EvalExpr 55 | cfac DoOper 56 | cf74 GetItem 57 | d03c NOT 58 | d059 EvalBracket 59 | cff0 GetVarVal 60 | d087 Compare 61 | d0f2 DIM 62 | d0fc GetVarFromText 63 | d361 DimArray 64 | d3eb GetArrayElement 65 | d47e FRE 66 | d4a6 POS 67 | d401 DEF 68 | d593 STR 69 | d5a3 SetupString 70 | d4fa GetString 71 | d595 GarbageCollect 72 | d730 CopyString 73 | d767 StrCat 74 | d816 CHR 75 | d82a LEFT 76 | d856 RIGHT 77 | d861 MID 78 | d8a6 LEN 79 | d8b5 ASC 80 | d80a GetByteExpr 81 | d867 FP2Int 82 | d938 PEEK 83 | d894 POKE 84 | d89d WAIT 85 | d8ac DOKE 86 | d983 DEEK 87 | d993 Byte2Hex 88 | d9b5 HEX 89 | d93d LORES 90 | d965 RowCalc 91 | da3f SCRN 92 | d9c6 PLOT 93 | da16 UNTIL 94 | daab REPEAT 95 | dada KEY 96 | da6b TxtTest 97 | db92 Normalise 98 | dbb9 AddMantissas 99 | dc79 LN 100 | dd4d UnpackFPA 101 | dda3 FPAMult10 102 | ddbf FPADiv10 103 | d0d0 LOG 104 | de77 PI 105 | def4 RoundFPA 106 | df0b FALSE 107 | df0f TRUE 108 | df04 GetSign 109 | df12 SGN 110 | df31 ABS 111 | df4c CompareFPA 112 | df8c FPA2Int 113 | dfa5 INT 114 | dfcf GetNumber 115 | e076 AddToFPA 116 | e0c1 PrintInt 117 | e22a SQR 118 | e27c ExpData 119 | e2a6 EXP 120 | e313 SeriesEval 121 | e34b RND 122 | e387 COS 123 | e38e SIN 124 | e3d7 TAN 125 | e407 TrigData 126 | e43b ATN 127 | e46f ATNData 128 | e4a8 TapeSync 129 | e4f2 VERIFY 130 | e554 IncTapeCount 131 | e57d PrintSearching 132 | e585 PrintSaving 133 | e58c PrintFName 134 | e594 PrintFound 135 | e5a4 PrintLoading 136 | e5ab PrintVerifying 137 | e5b6 PrintMsg 138 | e5ea ClrStatus 139 | e563 ClrTapeStatus 140 | e5c6 PutTapeByte 141 | e630 GetTapeByte 142 | e696 SyncTape 143 | e6ba WriteLeader 144 | e6ca SetupTape 145 | e725 GetTapeParams 146 | e7aa CLOAD 147 | e903 CLEAR 148 | e7db CSAVE 149 | e80d CALL 150 | e987 STORE 151 | e9d1 RECALL 152 | e87d HiresTest 153 | e905 CheckKbd 154 | e965 HIMEM 155 | e974 GRAB 156 | e994 RELEASE 157 | e9a9 TEXT 158 | e9bb HIRES 159 | ec45 POINT 160 | eccc StartBASIC 161 | edc4 CopyMem 162 | ecc7 SetupTimer 163 | ed01 StopTimer 164 | ed09 IRQ 165 | ed70 ResetTimer 166 | ed81 GetTimer 167 | ed8f SetTimer 168 | e0ad Delay 169 | eee8 WritePixel 170 | eef8 DrawLine 171 | ebdf CURSET 172 | ebe2 CURMOV 173 | ebe5 DRAW 174 | ebeb PATTERN 175 | ebee CHAR 176 | ebf4 PAPER 177 | ebf7 INK 178 | ebfa FILL 179 | ebe8 CIRCLE 180 | f43c ReadKbd 181 | f4ef Key2ASCII 182 | f523 FindKey 183 | f561 ReadKbdCol 184 | f535 WriteToAY 185 | f57b PrintChar 186 | f5d3 ControlChr 187 | f71a ClearLine 188 | f73f Char2Scr 189 | f7e4 PrintA 190 | f7e0 AltChars 191 | f82f PrintStatus 192 | f88f Reset 193 | f8af BASICStart 194 | f8b5 BASICRestart 195 | f920 HiresMode 196 | f967 LoresMode 197 | f960 ResetVIA 198 | f9c9 SetupText 199 | fa14 RamTest 200 | fa85 PING 201 | faa7 PingData 202 | fa9b SHOOT 203 | fabd ShootData 204 | fab1 EXPLODE 205 | facb ExplodeData 206 | fac7 ZAP 207 | fb06 ZapData 208 | fafa KeyClickH 209 | fb1c KeyClickHData 210 | fb10 KeyClickL 211 | fb32 KeyClickLData 212 | fb26 SOUND 213 | fbb6 PLAY 214 | fbfe MUSIC 215 | fc5e MusicData 216 | fc78 CharSet 217 | ff78 KeyCodeTab 218 | -------------------------------------------------------------------------------- /Oric/emulator/roms/basic11b.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/basic11b.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/basic11b.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/basic11b.sym: -------------------------------------------------------------------------------- 1 | c006 JumpTab 2 | c0ea Keywords 3 | c2a8 ErrorMsgs 4 | c3c6 FindForVar 5 | c3f4 VarAlloc 6 | c444 FreeMemCheck 7 | c47c PrintError 8 | c4a8 BackToBASIC 9 | c4d3 InsDelLine 10 | c4e0 DeleteLine 11 | c524 InsertLine 12 | c55f SetLineLinkPtrs 13 | c444 FreeMemCheck 14 | c592 GetLine 15 | c5e8 ReadKey 16 | c5fa TokeniseLine 17 | c692 EDIT 18 | c6b3 FindLine 19 | c6ee NEW 20 | c70d CLEAR 21 | c748 LIST 22 | c7fd LLIST 23 | c809 LPRINT 24 | c816 SetPrinter 25 | c82f SetScreen 26 | c855 FOR 27 | c8c1 DoNextLine 28 | c915 DoStatement 29 | c952 RESTORE 30 | c971 STOP 31 | c973 END 32 | c9a0 CONT 33 | c9bd RUN 34 | c9c8 GOSUB 35 | c9e5 GOTO 36 | ca12 RETURN 37 | ca3c DATA 38 | ca4e FindEndOfStatement 39 | ca51 FindEOL 40 | ca70 IF 41 | ca99 REM 42 | cac2 ON 43 | cae2 Txt2Int 44 | cb1c LET 45 | cbab PRINT 46 | cbf0 NewLine 47 | cc59 SetCursor 48 | ccb0 PrintString 49 | ccce CLS 50 | cd16 TRON 51 | cd19 TROFF 52 | cd46 GET 53 | cd55 INPUT 54 | cd89 READ 55 | ce98 NEXT 56 | cf03 GetExpr 57 | cf17 EvalExpr 58 | cfac DoOper 59 | d000 GetItem 60 | d03c NOT 61 | d059 EvalBracket 62 | d07c GetVarVal 63 | d113 Compare 64 | d17e DIM 65 | d188 GetVarFromText 66 | d361 DimArray 67 | d3eb GetArrayElement 68 | d47e FRE 69 | d4a6 POS 70 | d4ba DEF 71 | d593 STR 72 | d5a3 SetupString 73 | d5b5 GetString 74 | d650 GarbageCollect 75 | d730 CopyString 76 | d767 StrCat 77 | d816 CHR 78 | d82a LEFT 79 | d856 RIGHT 80 | d861 MID 81 | d8a6 LEN 82 | d8b5 ASC 83 | d8c5 GetByteExpr 84 | d922 FP2Int 85 | d938 PEEK 86 | d94f POKE 87 | d958 WAIT 88 | d967 DOKE 89 | d983 DEEK 90 | d993 Byte2Hex 91 | d9b5 HEX 92 | d9de LORES 93 | da0c RowCalc 94 | da3f SCRN 95 | da51 PLOT 96 | daa1 UNTIL 97 | daab REPEAT 98 | dada KEY 99 | daf6 TxtTest 100 | db92 Normalise 101 | dbb9 AddMantissas 102 | dcaf LN 103 | dd51 UnpackFPA 104 | dda7 FPAMult10 105 | ddc3 FPADiv10 106 | ddd4 LOG 107 | de77 PI 108 | def4 RoundFPA 109 | df0b FALSE 110 | df0f TRUE 111 | df13 GetSign 112 | df21 SGN 113 | df49 ABS 114 | df4c CompareFPA 115 | df8c FPA2Int 116 | dfbd INT 117 | dfe7 GetNumber 118 | e076 AddToFPA 119 | e0c5 PrintInt 120 | e22e SQR 121 | e27c ExpData 122 | e2aa EXP 123 | e313 SeriesEval 124 | e34f RND 125 | e38b COS 126 | e392 SIN 127 | e3db TAN 128 | e407 TrigData 129 | e43f ATN 130 | e46f ATNData 131 | e4ac TapeSync 132 | e4e0 GetTapeData 133 | e4f2 VERIFY 134 | e56c IncTapeCount 135 | e57d PrintSearching 136 | e585 PrintSaving 137 | e58c PrintFName 138 | e594 PrintFound 139 | e5a4 PrintLoading 140 | e5ab PrintVerifying 141 | e5b6 PrintMsg 142 | e5ea ClrStatus 143 | e5f5 ClrTapeStatus 144 | e607 WriteFileHeader 145 | e65e PutTapeByte 146 | e6c9 GetTapeByte 147 | e735 SyncTape 148 | e75a WriteLeader 149 | e76a SetupTape 150 | e7b2 GetTapeParams 151 | e85b CLOAD 152 | e903 CLEAR 153 | e909 CSAVE 154 | e946 CALL 155 | e987 STORE 156 | e9d1 RECALL 157 | eaf0 HiresTest 158 | eb78 CheckKbd 159 | ebce HIMEM 160 | ebe7 GRAB 161 | ec0c RELEASE 162 | ec21 TEXT 163 | ec33 HIRES 164 | ec45 POINT 165 | eccc StartBASIC 166 | edc4 CopyMem 167 | ede0 SetupTimer 168 | ee1a StopTimer 169 | ee22 IRQ 170 | ee8c ResetTimer 171 | ee1a StopTimer 172 | ee9d GetTimer 173 | eeab SetTimer 174 | eec9 Delay 175 | eee8 WritePixel 176 | eef8 DrawLine 177 | f0c8 CURSET 178 | f0fd CURMOV 179 | f110 DRAW 180 | f11d PATTERN 181 | f12d CHAR 182 | f204 PAPER 183 | f210 INK 184 | f268 FILL 185 | f37f CIRCLE 186 | f495 ReadKbd 187 | f4ef Key2ASCII 188 | f523 FindKey 189 | f561 ReadKbdCol 190 | f590 WriteToAY 191 | f5c1 PrintChar 192 | f602 ControlChr 193 | f71a ClearLine 194 | f77c Char2Scr 195 | f7e4 PrintA 196 | f816 AltChars 197 | f865 PrintStatus 198 | f88f Reset 199 | f8af BASICStart 200 | f8b5 BASICRestart 201 | f920 HiresMode 202 | f967 LoresMode 203 | f9aa ResetVIA 204 | f9c9 SetupText 205 | fa14 RamTest 206 | fa9f PING 207 | faa7 PingData 208 | fab5 SHOOT 209 | fabd ShootData 210 | facb EXPLODE 211 | fad3 ExplodeData 212 | fae1 ZAP 213 | fb06 ZapData 214 | fb14 KeyClickH 215 | fb1c KeyClickHData 216 | fb2a KeyClickL 217 | fb32 KeyClickLData 218 | fb14 KeyClickH 219 | fb40 SOUND 220 | fbd0 PLAY 221 | fc18 MUSIC 222 | fc5e MusicData 223 | fc78 CharSet 224 | ff78 KeyCodeTab 225 | -------------------------------------------------------------------------------- /Oric/emulator/roms/bd500.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/bd500.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/bd500.sym: -------------------------------------------------------------------------------- 1 | 0320 BD_command 2 | 0321 BD_track 3 | 0322 BD_sector 4 | 0323 BD_data 5 | 0310 BD_ovlon 6 | 0312 BD_control 7 | 0313 BD_ovloff 8 | 0317 BD_romoff 9 | -------------------------------------------------------------------------------- /Oric/emulator/roms/cumana.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/cumana.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/cumana.sym: -------------------------------------------------------------------------------- 1 | 0310 Md_FDC_COMMAND 2 | 0311 Md_FDC_TRACK 3 | 0312 Md_FDC_SECTOR 4 | 0313 Md_FDC_DATA 5 | 0314 Md_CONTROL 6 | 0318 Md_DRQ 7 | 046e HANDLER 8 | f800 cmRomStart 9 | f800 cmReset 10 | f84a cmError 11 | f925 cmInsert 12 | f970 cmLoadDos 13 | fa8a cmPrintMsg 14 | faa1 cmMsgs 15 | fbd7 cmRead 16 | fcf9 cmCallRom 17 | fd30 cmNmi 18 | fd68 cmIrq 19 | fffa NMI_VECTOR 20 | fffc RESET_VECTOR 21 | fffe IRQ_VECTOR 22 | -------------------------------------------------------------------------------- /Oric/emulator/roms/dflat.pch: -------------------------------------------------------------------------------- 1 | tt_readbyte_setcarry = no 2 | tt_csave_end_pc = $c619 3 | tt_getsync_end_pc = $c5ff 4 | tt_getsync_loop_pc = $c796 5 | tt_getsync_pc = $c5ff 6 | tt_putbyte_end_pc = $c748 7 | tt_putbyte_pc = $c726 8 | tt_readbyte_end_pc = $c791 9 | tt_readbyte_pc = $c77e 10 | tt_writeleader_end_pc = $c645 11 | tt_writeleader_pc = $c645 12 | fd_cload_getname_pc = $c5c7 13 | fd_csave_getname_pc = $c625 14 | fd_getname_addr = $0400 15 | -------------------------------------------------------------------------------- /Oric/emulator/roms/dflat.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/dflat.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/hyperbas.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/hyperbas.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/jasmin.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/jasmin.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/jasmin.sym: -------------------------------------------------------------------------------- 1 | 03F4 jsm_Command 2 | 03F4 jsm_Status 3 | 03F5 jsm_Track 4 | 03F6 jsm_Sector 5 | 03F7 jsm_Data 6 | 03F8 jsm_Side 7 | 03F9 jsm_FDCReset 8 | 03FA jsm_Overlay 9 | 03FB jsm_ROMDIS 10 | 03FC jsm_DriveA 11 | 03FD jsm_DriveB 12 | 03FE jsm_DriveC 13 | 03FF jsm_DriveD 14 | f800 jsRomStart 15 | fd00 jsEntryPoint 16 | fd51 jsReset 17 | fe71 jsPrintMsg 18 | fec7 jsIrq 19 | fffc RESET_VECTOR 20 | fffe IRQ_VECTOR 21 | -------------------------------------------------------------------------------- /Oric/emulator/roms/microdis.sym: -------------------------------------------------------------------------------- 1 | 0310 Md_FDC_COMMAND 2 | 0311 Md_FDC_TRACK 3 | 0312 Md_FDC_SECTOR 4 | 0313 Md_FDC_DATA 5 | 0314 Md_CONTROL 6 | 0318 Md_DRQ 7 | e000 MdRomStart 8 | e3c0 MdIrq 9 | eb7e MdEntry 10 | eeae MdRamTest 11 | -------------------------------------------------------------------------------- /Oric/emulator/roms/oric11b.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/oric11b.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/pch-template.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt-1.0.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4af 21 | fd_csave_getname_pc = $e7ef 22 | ;fd_store_getname_pc = 23 | ;fd_recall_getname_pc = 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $0035 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e696 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e6b9 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e681 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e630 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e65b 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = no 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | ;tt_readbyte_storezero_addr = 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e5c6 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e5f2 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e7fe 67 | 68 | ; Address of the RTS at the end of STORE 69 | ;tt_store_end_pc = 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e6ba 74 | tt_writeleader_end_pc = $e6c9 75 | -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt-1.0.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/pravetzt-1.0.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt-1.0.sym: -------------------------------------------------------------------------------- 1 | c006 JumpTab 2 | c0ea Keywords 3 | c2ac ErrorMsgs 4 | c3ca FindForVar 5 | c3f8 VarAlloc 6 | c448 FreeMemCheck 7 | c47c PrintError 8 | c4b5 BackToBASIC 9 | c4e3 InsDelLine 10 | c4e0 DeleteLine 11 | c524 InsertLine 12 | c56f SetLineLinkPtrs 13 | c5a2 GetLine 14 | c5f8 ReadKey 15 | c60a TokeniseLine 16 | c6a5 EDIT 17 | c6de FindLine 18 | c719 NEW 19 | c738 CLEAR 20 | c773 LIST 21 | c824 LLIST 22 | c832 LPRINT 23 | c841 FOR 24 | c8c1 DoNextLine 25 | c8fe DoStatement 26 | c91f RESTORE 27 | c93f STOP 28 | c941 END 29 | c91e CONT 30 | c98b RUN 31 | c996 GOSUB 32 | c9b3 GOTO 33 | c9e0 RETURN 34 | ca0a DATA 35 | ca1c FindEndOfStatement 36 | ca1f FindEOL 37 | ca3e IF 38 | ca61 REM 39 | ca78 ON 40 | ca98 Txt2Int 41 | cad2 LET 42 | cb61 PRINT 43 | cb9f NewLine 44 | cc59 SetCursor 45 | cbed PrintString 46 | cc0a CLS 47 | cc8c TRON 48 | cc8f TROFF 49 | ccba GET 50 | ccc9 INPUT 51 | ccfd READ 52 | ce0c NEXT 53 | ce77 GetExpr 54 | ce8b EvalExpr 55 | cfac DoOper 56 | cf74 GetItem 57 | d03c NOT 58 | d059 EvalBracket 59 | cff0 GetVarVal 60 | d087 Compare 61 | d0f2 DIM 62 | d0fc GetVarFromText 63 | d361 DimArray 64 | d3eb GetArrayElement 65 | d47e FRE 66 | d4a6 POS 67 | d401 DEF 68 | d593 STR 69 | d5a3 SetupString 70 | d4fa GetString 71 | d595 GarbageCollect 72 | d730 CopyString 73 | d767 StrCat 74 | d816 CHR 75 | d82a LEFT 76 | d856 RIGHT 77 | d861 MID 78 | d8a6 LEN 79 | d8b5 ASC 80 | d80a GetByteExpr 81 | d867 FP2Int 82 | d938 PEEK 83 | d894 POKE 84 | d89d WAIT 85 | d8ac DOKE 86 | d983 DEEK 87 | d993 Byte2Hex 88 | d9b5 HEX 89 | d93d LORES 90 | d965 RowCalc 91 | da3f SCRN 92 | d9c6 PLOT 93 | da16 UNTIL 94 | daab REPEAT 95 | dada KEY 96 | da6b TxtTest 97 | db92 Normalise 98 | dbb9 AddMantissas 99 | dc79 LN 100 | dd4d UnpackFPA 101 | dda3 FPAMult10 102 | ddbf FPADiv10 103 | d0d0 LOG 104 | de77 PI 105 | def4 RoundFPA 106 | df0b FALSE 107 | df0f TRUE 108 | df04 GetSign 109 | df12 SGN 110 | df31 ABS 111 | df4c CompareFPA 112 | df8c FPA2Int 113 | dfa5 INT 114 | dfcf GetNumber 115 | e076 AddToFPA 116 | e0c1 PrintInt 117 | e22a SQR 118 | e27c ExpData 119 | e2a6 EXP 120 | e313 SeriesEval 121 | e34b RND 122 | e387 COS 123 | e38e SIN 124 | e3d7 TAN 125 | e407 TrigData 126 | e43b ATN 127 | e46f ATNData 128 | e4a8 TapeSync 129 | e4f2 VERIFY 130 | e554 IncTapeCount 131 | e57d PrintSearching 132 | e585 PrintSaving 133 | e58c PrintFName 134 | e594 PrintFound 135 | e5a4 PrintLoading 136 | e5ab PrintVerifying 137 | e5b6 PrintMsg 138 | e5ea ClrStatus 139 | e563 ClrTapeStatus 140 | e5c6 PutTapeByte 141 | e630 GetTapeByte 142 | e696 SyncTape 143 | e6ba WriteLeader 144 | e6ca SetupTape 145 | e725 GetTapeParams 146 | e7aa CLOAD 147 | e903 CLEAR 148 | e7db CSAVE 149 | e80d CALL 150 | e987 STORE 151 | e9d1 RECALL 152 | e87d HiresTest 153 | e905 CheckKbd 154 | e965 HIMEM 155 | e974 GRAB 156 | e994 RELEASE 157 | e9a9 TEXT 158 | e9bb HIRES 159 | ec45 POINT 160 | eccc StartBASIC 161 | edc4 CopyMem 162 | ecc7 SetupTimer 163 | ed01 StopTimer 164 | ed09 IRQ 165 | ed70 ResetTimer 166 | ed81 GetTimer 167 | ed8f SetTimer 168 | e0ad Delay 169 | eee8 WritePixel 170 | eef8 DrawLine 171 | ebdf CURSET 172 | ebe2 CURMOV 173 | ebe5 DRAW 174 | ebeb PATTERN 175 | ebee CHAR 176 | ebf4 PAPER 177 | ebf7 INK 178 | ebfa FILL 179 | ebe8 CIRCLE 180 | f43c ReadKbd 181 | f4ef Key2ASCII 182 | f523 FindKey 183 | f561 ReadKbdCol 184 | f535 WriteToAY 185 | f57b PrintChar 186 | f5d3 ControlChr 187 | f71a ClearLine 188 | f73f Char2Scr 189 | f7e4 PrintA 190 | f7e0 AltChars 191 | f82f PrintStatus 192 | f88f Reset 193 | f8af BASICStart 194 | f8b5 BASICRestart 195 | f920 HiresMode 196 | f967 LoresMode 197 | f960 ResetVIA 198 | f9c9 SetupText 199 | fa14 RamTest 200 | fa85 PING 201 | faa7 PingData 202 | fa9b SHOOT 203 | fabd ShootData 204 | fab1 EXPLODE 205 | facb ExplodeData 206 | fac7 ZAP 207 | fb06 ZapData 208 | fafa KeyClickH 209 | fb1c KeyClickHData 210 | fb10 KeyClickL 211 | fb32 KeyClickLData 212 | fb26 SOUND 213 | fbb6 PLAY 214 | fbfe MUSIC 215 | fc5e MusicData 216 | fc78 CharSet 217 | ff78 KeyCodeTab 218 | -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | ; This file describes how to patch a ROM for things like turbotape, 5 | ; and filename decoding. 6 | ; 7 | 8 | ; ****** ROM INFORMATION ****** 9 | 10 | ; This part isn't actual patches, just information about 11 | ; the hardware the ROM expects to be present. 12 | 13 | ; ROM expects a special keyboard layout? 14 | keymap = qwerty 15 | 16 | ; ****** FILENAME DECODING ******* 17 | 18 | ; When the PC is about to execute this address, we should be at a point 19 | ; in CLOAD/CSAVE/STORE/RECALL where the filename is valid in memory. 20 | fd_cload_getname_pc = $e4ac 21 | fd_csave_getname_pc = $e92c 22 | fd_store_getname_pc = $e98b 23 | fd_recall_getname_pc = $e9d8 24 | 25 | ; The address to read the CLOAD filename 26 | fd_getname_addr = $027f 27 | 28 | 29 | ; ****** TURBOTAPE ****** 30 | 31 | ; Address of the "Cassette Sync" function in ROM 32 | tt_getsync_pc = $e735 33 | 34 | ; Address of the RTS at the end of the cassette sync function (so we can 35 | ; skip the function) 36 | tt_getsync_end_pc = $e759 37 | 38 | ; If turbotape is enabled, but no tape is inserted, the cassette sync 39 | ; function will be executed normally. Here we have an address inside the 40 | ; loop that waits for the cassette sync signal, so that we can break out 41 | ; of it if a tape is inserted. 42 | tt_getsync_loop_pc = $e720 43 | 44 | ; Address of the "Read Byte" function in ROM 45 | tt_readbyte_pc = $e6c9 46 | 47 | ; Address of the RTS at the end of the read byte function 48 | tt_readbyte_end_pc = $e6fb 49 | 50 | ; Set carry at end of readbyte routine? 51 | tt_readbyte_setcarry = yes 52 | 53 | ; In order to simulate the effects of the read byte routine, you can 54 | ; specify an address to write the byte read, and an address to write 55 | ; zero to. 56 | tt_readbyte_storebyte_addr = $002f 57 | tt_readbyte_storezero_addr = $02b1 58 | 59 | ; Address of the "put byte" function in ROM 60 | tt_putbyte_pc = $e65e 61 | 62 | ; Address of the RTS at the end of the put byte function 63 | tt_putbyte_end_pc = $e68a 64 | 65 | ; Address of the RTS at the end of CSAVE 66 | tt_csave_end_pc = $e93c 67 | 68 | ; Address of the RTS at the end of STORE 69 | tt_store_end_pc = $e9d0 70 | 71 | ; Address of the function that writes the tape leader 72 | ; (so we can write a shorter one) 73 | tt_writeleader_pc = $e75a 74 | tt_writeleader_end_pc = $e769 75 | 76 | ; Patch default Pravetz keyboard layout 77 | $3F78:37EAEDEB20F5F938EEF436392CE9E8EC 78 | $3F88:35F2E23B2EEFE730F6E6342D0BF0E52F 79 | $3F98:0000000000000000311BFA00087FE10D 80 | $3FA8:F8F1325C0A5DF37C33E4E327095BF73D 81 | $3FB8:264A4D4B2055592A4E545E283C49484C 82 | $3FC8:2552423A3E4F47295646245F0B50453F 83 | $3FD8:0000000000000000211B5A00087F410D 84 | $3FE8:585140600A7D537E23444322097B572B 85 | -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/pravetzt.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/pravetzt.sym: -------------------------------------------------------------------------------- 1 | c006 JumpTab 2 | c0ea Keywords 3 | c2a8 ErrorMsgs 4 | c3c6 FindForVar 5 | c3f4 VarAlloc 6 | c444 FreeMemCheck 7 | c47c PrintError 8 | c4a8 BackToBASIC 9 | c4d3 InsDelLine 10 | c4e0 DeleteLine 11 | c524 InsertLine 12 | c55f SetLineLinkPtrs 13 | c444 FreeMemCheck 14 | c592 GetLine 15 | c5e8 ReadKey 16 | c5fa TokeniseLine 17 | c692 EDIT 18 | c6b3 FindLine 19 | c6ee NEW 20 | c70d CLEAR 21 | c748 LIST 22 | c7fd LLIST 23 | c809 LPRINT 24 | c816 SetPrinter 25 | c82f SetScreen 26 | c855 FOR 27 | c8c1 DoNextLine 28 | c915 DoStatement 29 | c952 RESTORE 30 | c971 STOP 31 | c973 END 32 | c9a0 CONT 33 | c9bd RUN 34 | c9c8 GOSUB 35 | c9e5 GOTO 36 | ca12 RETURN 37 | ca3c DATA 38 | ca4e FindEndOfStatement 39 | ca51 FindEOL 40 | ca70 IF 41 | ca99 REM 42 | cac2 ON 43 | cae2 Txt2Int 44 | cb1c LET 45 | cbab PRINT 46 | cbf0 NewLine 47 | cc59 SetCursor 48 | ccb0 PrintString 49 | ccce CLS 50 | cd16 TRON 51 | cd19 TROFF 52 | cd46 GET 53 | cd55 INPUT 54 | cd89 READ 55 | ce98 NEXT 56 | cf03 GetExpr 57 | cf17 EvalExpr 58 | cfac DoOper 59 | d000 GetItem 60 | d03c NOT 61 | d059 EvalBracket 62 | d07c GetVarVal 63 | d113 Compare 64 | d17e DIM 65 | d188 GetVarFromText 66 | d361 DimArray 67 | d3eb GetArrayElement 68 | d47e FRE 69 | d4a6 POS 70 | d4ba DEF 71 | d593 STR 72 | d5a3 SetupString 73 | d5b5 GetString 74 | d650 GarbageCollect 75 | d730 CopyString 76 | d767 StrCat 77 | d816 CHR 78 | d82a LEFT 79 | d856 RIGHT 80 | d861 MID 81 | d8a6 LEN 82 | d8b5 ASC 83 | d8c5 GetByteExpr 84 | d922 FP2Int 85 | d938 PEEK 86 | d94f POKE 87 | d958 WAIT 88 | d967 DOKE 89 | d983 DEEK 90 | d993 Byte2Hex 91 | d9b5 HEX 92 | d9de LORES 93 | da0c RowCalc 94 | da3f SCRN 95 | da51 PLOT 96 | daa1 UNTIL 97 | daab REPEAT 98 | dada KEY 99 | daf6 TxtTest 100 | db92 Normalise 101 | dbb9 AddMantissas 102 | dcaf LN 103 | dd51 UnpackFPA 104 | dda7 FPAMult10 105 | ddc3 FPADiv10 106 | ddd4 LOG 107 | de77 PI 108 | def4 RoundFPA 109 | df0b FALSE 110 | df0f TRUE 111 | df13 GetSign 112 | df21 SGN 113 | df49 ABS 114 | df4c CompareFPA 115 | df8c FPA2Int 116 | dfbd INT 117 | dfe7 GetNumber 118 | e076 AddToFPA 119 | e0c5 PrintInt 120 | e22e SQR 121 | e27c ExpData 122 | e2aa EXP 123 | e313 SeriesEval 124 | e34f RND 125 | e38b COS 126 | e392 SIN 127 | e3db TAN 128 | e407 TrigData 129 | e43f ATN 130 | e46f ATNData 131 | e4ac TapeSync 132 | e4e0 GetTapeData 133 | e4f2 VERIFY 134 | e56c IncTapeCount 135 | e57d PrintSearching 136 | e585 PrintSaving 137 | e58c PrintFName 138 | e594 PrintFound 139 | e5a4 PrintLoading 140 | e5ab PrintVerifying 141 | e5b6 PrintMsg 142 | e5ea ClrStatus 143 | e5f5 ClrTapeStatus 144 | e607 WriteFileHeader 145 | e65e PutTapeByte 146 | e6c9 GetTapeByte 147 | e735 SyncTape 148 | e75a WriteLeader 149 | e76a SetupTape 150 | e7b2 GetTapeParams 151 | e85b CLOAD 152 | e903 CLEAR 153 | e909 CSAVE 154 | e946 CALL 155 | e987 STORE 156 | e9d1 RECALL 157 | eaf0 HiresTest 158 | eb78 CheckKbd 159 | ebce HIMEM 160 | ebe7 GRAB 161 | ec0c RELEASE 162 | ec21 TEXT 163 | ec33 HIRES 164 | ec45 POINT 165 | eccc StartBASIC 166 | edc4 CopyMem 167 | ede0 SetupTimer 168 | ee1a StopTimer 169 | ee22 IRQ 170 | ee8c ResetTimer 171 | ee1a StopTimer 172 | ee9d GetTimer 173 | eeab SetTimer 174 | eec9 Delay 175 | eee8 WritePixel 176 | eef8 DrawLine 177 | f0c8 CURSET 178 | f0fd CURMOV 179 | f110 DRAW 180 | f11d PATTERN 181 | f12d CHAR 182 | f204 PAPER 183 | f210 INK 184 | f268 FILL 185 | f37f CIRCLE 186 | f495 ReadKbd 187 | f4ef Key2ASCII 188 | f523 FindKey 189 | f561 ReadKbdCol 190 | f590 WriteToAY 191 | f5c1 PrintChar 192 | f602 ControlChr 193 | f71a ClearLine 194 | f77c Char2Scr 195 | f7e4 PrintA 196 | f816 AltChars 197 | f865 PrintStatus 198 | f88f Reset 199 | f8af BASICStart 200 | f8b5 BASICRestart 201 | f920 HiresMode 202 | f967 LoresMode 203 | f9aa ResetVIA 204 | f9c9 SetupText 205 | fa14 RamTest 206 | fa9f PING 207 | faa7 PingData 208 | fab5 SHOOT 209 | fabd ShootData 210 | facb EXPLODE 211 | fad3 ExplodeData 212 | fae1 ZAP 213 | fb06 ZapData 214 | fb14 KeyClickH 215 | fb1c KeyClickHData 216 | fb2a KeyClickL 217 | fb32 KeyClickLData 218 | fb14 KeyClickH 219 | fb40 SOUND 220 | fbd0 PLAY 221 | fc18 MUSIC 222 | fc5e MusicData 223 | fc78 CharSet 224 | ff78 KeyCodeTab 225 | -------------------------------------------------------------------------------- /Oric/emulator/roms/sedoric.sym: -------------------------------------------------------------------------------- 1 | 0310 Md_FDC_COMMAND 2 | 0311 Md_FDC_TRACK 3 | 0312 Md_FDC_SECTOR 4 | 0313 Md_FDC_DATA 5 | 0314 Md_CONTROL 6 | 0318 Md_DRQ 7 | 0453 DO_EXEVEC 8 | 0477 DO_RAMROM 9 | 0488 SED_IRQ 10 | 04a8 SED_COLDSTART 11 | 04b3 DO_IRQRAM 12 | 04ec EXERAM 13 | 04ef EXEVEC 14 | 04f2 RAMROM 15 | 04f5 IRQRAM 16 | 04f8 NMIRAM 17 | 04fb Md_CONTROL_SHADOW 18 | 04fc FLAGIF 19 | 04fd NOERROR 20 | 04fe NOLIGN 21 | c000 DRIVE 22 | c001 PISTE 23 | c002 SECTEUR 24 | c003 RWBUF 25 | c009 DRVDEF 26 | c00a DRVSYS 27 | c00d EXTER 28 | c00f EXTMS 29 | c015 EXTNB 30 | c024 ATMORI 31 | c100 BUF1 32 | c200 BUF2 33 | c300 BUF3 34 | c400 SEDKERN_START 35 | c574 MSG_DOS_ALTERED 36 | c800 KEYDEF 37 | c880 REDEF 38 | c980 PREDEF 39 | c9de TOKEN_TABLE 40 | cbbb TOKEN_INITIALS_TABLE 41 | cc27 TOKEN_ADDR_TABLE 42 | ccf7 COMMON_EXT_TABLE 43 | cd0c MISC1 44 | cd41 QWAZERTY_CONV 45 | cd4d ACCENTED_FONT 46 | cd83 MISC2 47 | cd94 SYS_VAR_NAMES 48 | cdbf ERROR_MESSAGES 49 | cee7 MESSAGES 50 | cfcd XRWTS 51 | cfe9 XRWTS_INTERNAL 52 | cff3 XRWTS_ONCE 53 | d5d8 XROM 54 | d613 XAFHEX 55 | d62a XAFCAR 56 | d637 XAFSTR 57 | d73e XCURON 58 | d740 XCUROFF 59 | da4c XPMAP 60 | da73 XPRSEC 61 | da82 XSCAT 62 | da8a XSMAP 63 | daa4 XSVSEC 64 | db30 XTVNM 65 | db59 XTRVCA 66 | dbc0 XWDESC 67 | dc6c XLIBSE 68 | dd15 XDETSE 69 | dd2d XCREAY 70 | dd4a CMD_SAVEM 71 | dd4d CMD_SAVEU 72 | dd50 CMD_SAVE 73 | dd53 CMD_SAVEO 74 | ddcd CMD_KEYSAVE 75 | dde0 CMD_ESAVE 76 | de4d CMD_CREATEW 77 | dff7 CMD_LOAD 78 | e0af CMD_OLD 79 | e344 CMD_DIR 80 | e437 CMD_DELBAK 81 | e444 CMD_DESTROY 82 | e446 CMD_DEL 83 | e537 CMD_REN 84 | e5fc CMD_SEARCH 85 | e70b CMD_KEY 86 | e71f CMD_OUT 87 | e740 CMD_WIDTH 88 | e796 CMD_RANDOM 89 | e7b8 CMD_RESET 90 | e7c0 CMD_PR 91 | e7d0 CMD_LDIR 92 | e7d9 CMD_RESTORE 93 | e7f5 CMD_QUIT 94 | e853 CMD_STRUN 95 | e89d CMD_TKEN 96 | e8e1 CMD_UNTKEN 97 | e97f CMD_ERR 98 | e999 CMD_ERRGOTO 99 | e9b0 CMD_ERROR 100 | e9bb CMD_RESUME 101 | e9ed CMD_EXT 102 | e9f0 CMD_VISUHIRES 103 | e9f3 CMD_STATUS 104 | e9f6 CMD_PROT 105 | e9f9 CMD_UNPROT 106 | e9fc CMD_SYSTEM 107 | e9ff CMD_CHKSUM 108 | ea3b CMD_SWAP 109 | ea7f CMD_USER 110 | eb25 CMD_NUM 111 | eb91 CMD_ACCENT 112 | ebde CMD_AZERTY 113 | ebe1 CMD_QWERTY 114 | ebec CMD_LCUR 115 | ebf5 CMD_HCUR 116 | ec04 CMD_LBRACKET 117 | ec2e CMD_INSTR 118 | ec94 CMD_LINPUT 119 | ee99 CMD_USING 120 | f036 CMD_LUSING 121 | f079 CMD_LINE 122 | f0de CMD_BOX 123 | f121 CMD_VUSER 124 | f124 CMD_DKEY 125 | f127 CMD_DSYS 126 | f12a CMD_DNUM 127 | f12d CMD_INIST 128 | f130 CMD_TRACK 129 | f136 CMD_MOVE 130 | f139 CMD_DTRACK 131 | f13c CMD_MERGE 132 | f142 CMD_DELETE 133 | f145 CMD_DNAME 134 | f148 CMD_CHANGE 135 | f14e CMD_RENUM 136 | f151 CMD_BACKUP 137 | f154 CMD_SEEK 138 | f157 CMD_COPY 139 | f15a CMD_SYS 140 | f169 CMD_INIT 141 | f1e5 XDLOAD 142 | f210 CMD_WINDOW 143 | ff43 SEDORIC_VECTORS 144 | ffc7 COPYRIGHT_TEXT 145 | fffa NMI_VECTOR 146 | fffc RESET_VECTOR 147 | fffe IRQ_VECTOR 148 | -------------------------------------------------------------------------------- /Oric/emulator/roms/teleass.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/teleass.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/telmatic.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/telmatic.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/telmon24.pch: -------------------------------------------------------------------------------- 1 | ; 2 | ; ROM patches file 3 | ; 4 | 5 | ; ****** ROM INFORMATION ****** 6 | 7 | ; This part isn't actual patches, just information about 8 | ; the hardware the ROM expects to be present. 9 | 10 | ; ROM expects a special keyboard layout? 11 | keymap = qwerty 12 | -------------------------------------------------------------------------------- /Oric/emulator/roms/telmon24.rom: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/roms/telmon24.rom -------------------------------------------------------------------------------- /Oric/emulator/roms/telmon24.sym: -------------------------------------------------------------------------------- 1 | 020d FLGTEL 2 | 02be IOVECTORS 3 | 02ee FLGRST 4 | c000 tmEntryPoint 5 | c05b tmDiskReset 6 | c05d tmDiskResetLoop 7 | c2a6 tmHWReset 8 | c4d1 tmDiskCmd 9 | c8bf tmSerialIO 10 | d903 tmSetKeyColumn7f 11 | da1a tmAYWrite 12 | da4f tmAYSilent 13 | da72 XLPRBI_ROUTINE 14 | dae4 XLPCRL_ROUTINE 15 | ddd8 XOUPS_ROUTINE 16 | de1e XCOSCR_ROUTINE 17 | de20 XCSSCR_ROUTINE 18 | de54 XSCROH_ROUTINE 19 | de5c XSCROB_ROUTINE 20 | defb XSCRSE_ROUTINE 21 | e1b9 XHCSCR_ROUTINE 22 | e250 XHCHRS_ROUTINE 23 | e537 XEDTIN_ROUTINE 24 | e66c XECRPR_ROUTINE 25 | e680 XSCELG_ROUTINE 26 | e6b0 XINSER_ROUTINE 27 | e749 XDECAY_ROUTINE 28 | e792 XHRSSE_ROUTINE 29 | e7c1 XHRSCB_ROUTINE 30 | e7cd XHRSCH_ROUTINE 31 | e7d9 XHRSCD_ROUTINE 32 | e7e7 XHRSCG_ROUTINE 33 | e819 XBOX_ROUTINE 34 | e82c XABOX_ROUTINE 35 | e866 XDRAWA_ROUTINE 36 | e885 XDRAWR_ROUTINE 37 | e92f XCURSE_ROUTINE 38 | e93c XCURMO_ROUTINE 39 | e95d XPAPER_ROUTINE 40 | e95f XINK_ROUTINE 41 | e9cb XCIRCL_ROUTINE 42 | ea73 XFILL_ROUTINE 43 | ea93 XSCHAR_ROUTINE 44 | eaaf XCHAR_ROUTINE 45 | ed77 XCONSO_ROUTINE 46 | ed9a XSDUMP_ROUTINE 47 | edca XSSAVE_ROUTINE 48 | edd7 XMSAVE_ROUTINE 49 | ede5 XSLOAD_ROUTINE 50 | eea5 XRING_ROUTINE 51 | ef20 XLIGNE_ROUTINE 52 | ef3f XDECON_ROUTINE 53 | efb2 XA1PA2_ROUTINE 54 | f146 XLN_ROUTINE 55 | f18b XA1MA2_ROUTINE 56 | f26f XLOG_ROUTINE 57 | f28a XA2DA1_ROUTINE 58 | f314 XPI_ROUTINE 59 | f323 XAYA1_ROUTINE 60 | f377 XA2A1_ROUTINE 61 | f387 XA1A2_ROUTINE 62 | f396 XAA1_ROUTINE 63 | f3a6 XA1IAY_ROUTINE 64 | f3ed XIYAA1_ROUTINE 65 | f46a XINT_ROUTINE 66 | f49b XA1AFF_ROUTINE 67 | f4a5 XA1DEC_ROUTINE 68 | f610 XSQR_ROUTINE 69 | f61a XA2EA1_ROUTINE 70 | f653 XNA1_ROUTINE 71 | f68c XEXP_ROUTINE 72 | f735 XRND_ROUTINE 73 | f771 XRAND_ROUTINE 74 | f781 XCOS_ROUTINE 75 | f78e XSIN_ROUTINE 76 | f80a XTAN_ROUTINE 77 | f835 XATN_ROUTINE 78 | f8aa XDEG_ROUTINE 79 | f8b6 XRAD_ROUTINE 80 | f8cd XADNXT_ROUTINE 81 | f91e XDECA1_ROUTINE 82 | fa12 XINTEG_ROUTINE 83 | fef7 XSCRNE_ROUTINE 84 | ff31 ZADCHA_ROUTINE 85 | ff4c XGOKBD_ROUTINE 86 | -------------------------------------------------------------------------------- /Oric/emulator/tapes/OricBASIC/GCAATTACK.TAP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/tapes/OricBASIC/GCAATTACK.TAP -------------------------------------------------------------------------------- /Oric/emulator/tapes/OricBASIC/GCALIENS.TAP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/tapes/OricBASIC/GCALIENS.TAP -------------------------------------------------------------------------------- /Oric/emulator/teledisks/stratsed.dsk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/emulator/teledisks/stratsed.dsk -------------------------------------------------------------------------------- /Oric/software/dflat/demos/festival/fest2023.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/festival/fest2023.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/graphics/bigspr.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/graphics/bigspr.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/graphics/hicol.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/graphics/hicol.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/graphics/line.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/graphics/line.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/graphics/mcsprite.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/graphics/mcsprite.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/graphics/sprdemo.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/graphics/sprdemo.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/social/thanks.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/social/thanks.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/social/xmastwit.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/social/xmastwit.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/AhaTake.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/AhaTake.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/BOOM.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/BOOM.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/CLTime.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/CLTime.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/Depeche.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/Depeche.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/FUN.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/FUN.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/GhostnG.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/GhostnG.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/Limahl.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/Limahl.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/MFrozen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/MFrozen.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/NINJA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/NINJA.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/NirvTeen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/NirvTeen.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/Oxygene4.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/Oxygene4.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/RHCreep.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/RHCreep.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/RT.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/RT.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/RWFeel.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/RWFeel.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/SMario.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/SMario.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/SpaceNY.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/SpaceNY.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/StarWars.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/StarWars.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/TELEGA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/TELEGA.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/TEST.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/TEST.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/WhiteXms.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/WhiteXms.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/attract.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/attract.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/popcorn.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/popcorn.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/ppt37700.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/ppt37700.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/ppt37800.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/ppt37800.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/ppt37900.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/ppt37900.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/ptdemo.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/ptdemo.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/pt3/win1.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/pt3/win1.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/demos/sound/rttl/rttlplay.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/sound/rttl/rttlplay.tap -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/1-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/1-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/10-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/10-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/11-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/11-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/12-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/12-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/13-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/13-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/14-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/14-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/2-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/2-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/3-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/3-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/4-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/4-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/5-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/5-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/6-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/6-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/7-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/7-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/8-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/8-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/9-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/9-small.bin -------------------------------------------------------------------------------- /Oric/software/dflat/demos/space/spacegal.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/demos/space/spacegal.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/TETRIS.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/TETRIS.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/attract.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/attract.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/games/defender.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/defender.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/explore7.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/explore7.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/inv256.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/inv256.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/inv3d.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/inv3d.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/kong.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/kong.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/lander.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/lander.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/pix.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/pix.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/popcorn.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/popcorn.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/games/ppt37900.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/ppt37900.bin -------------------------------------------------------------------------------- /Oric/software/dflat/games/tetris2.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/tetris2.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/triangle.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/triangle.tap -------------------------------------------------------------------------------- /Oric/software/dflat/games/win1.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/games/win1.pt3 -------------------------------------------------------------------------------- /Oric/software/dflat/test/line2.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/test/line2.tap -------------------------------------------------------------------------------- /Oric/software/dflat/test/pcwbench.tap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/dflat/test/pcwbench.tap -------------------------------------------------------------------------------- /Oric/software/make.ps1: -------------------------------------------------------------------------------- 1 | # Script to build dflat file 2 | # Source is the PC: 3 | # Source directory must be sd-src 4 | # Target directory must be dflat 5 | # Conversion programs be in the same place as this script 6 | 7 | # Timestamp 8 | $startTime = (Get-Date) 9 | 10 | # Source folder 11 | $source = "sd-src" 12 | 13 | # Destination folder 14 | $destination = "dflat" 15 | 16 | # Source folder is sd-src 17 | Set-Location $source 18 | 19 | # Gets a list of files and folders in the source 20 | $files = Get-ChildItem -Recurse 21 | 22 | # Back to root 23 | Set-Location ../ 24 | # Clean target 25 | Remove-Item -r ($destination+"/*") 26 | 27 | # Initialise counters for metrics 28 | $dircreated = 0 29 | $binconverted = 0 30 | $prgconverted = 0 31 | 32 | # Process the list 33 | Foreach ($file in $files) { 34 | 35 | # Only interested in relative paths after sd-src 36 | $relpathIdx = $file.fullname.IndexOf($source) 37 | $relpath = $destination + $file.fullname.Substring($relpathIdx+6) 38 | 39 | # If current item is a directory then check if it 40 | # exists in the target dflat folder, create if needed 41 | if ($file.attributes -eq "Directory") { 42 | if ((Test-Path -Path $relpath) -eq $false) { 43 | mkdir $relpath | Out-Null 44 | $dircreated++ 45 | } 46 | } else { 47 | # If not a directory then copy across anything not a PRG 48 | # file, else convert PRG to TAP 49 | if ($file.extension -ine ".prg") { 50 | ../util/bin/dfbin2tap $file.fullname $relpath | Out-Null 51 | $binconverted++ 52 | } else { 53 | ../util/bin/dftxt2tap -l $file.fullname ($relpath.Substring(0, $relpath.Length-3)+"tap") | Out-Null 54 | $prgconverted++ 55 | } 56 | } 57 | 58 | } 59 | $endTime = (Get-Date) 60 | Write-Output ("Done : "+(($endTime - $startTime).TotalSeconds)+" second(s) Dirs:"+$dircreated+" Prgs:"+$prgconverted+" Bins:"+$binconverted) 61 | -------------------------------------------------------------------------------- /Oric/software/project/images/1.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/1.raw -------------------------------------------------------------------------------- /Oric/software/project/images/10.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/10.raw -------------------------------------------------------------------------------- /Oric/software/project/images/11.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/11.raw -------------------------------------------------------------------------------- /Oric/software/project/images/12.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/12.raw -------------------------------------------------------------------------------- /Oric/software/project/images/13.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/13.raw -------------------------------------------------------------------------------- /Oric/software/project/images/14.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/14.raw -------------------------------------------------------------------------------- /Oric/software/project/images/2.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/2.raw -------------------------------------------------------------------------------- /Oric/software/project/images/3.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/3.raw -------------------------------------------------------------------------------- /Oric/software/project/images/4.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/4.raw -------------------------------------------------------------------------------- /Oric/software/project/images/5.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/5.raw -------------------------------------------------------------------------------- /Oric/software/project/images/6.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/6.raw -------------------------------------------------------------------------------- /Oric/software/project/images/7.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/7.raw -------------------------------------------------------------------------------- /Oric/software/project/images/8.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/8.raw -------------------------------------------------------------------------------- /Oric/software/project/images/9.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/images/9.raw -------------------------------------------------------------------------------- /Oric/software/project/pt3/as65: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/as65 -------------------------------------------------------------------------------- /Oric/software/project/pt3/as65.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/as65.exe -------------------------------------------------------------------------------- /Oric/software/project/pt3/make.ps1: -------------------------------------------------------------------------------- 1 | # Script to build PT3 player for Oric dflat 2 | # Run this first before the make.ps1 in the 'software' folder 3 | try { 4 | 5 | $start = (Get-Date) 6 | 7 | # Build pt3 player 8 | Write-Output "Building PT3 Player" 9 | ./as65 "-inctl" "-oppt37900.bin" ppt3.s 10 | if ($LASTEXITCODE -gt 0) { throw } 11 | 12 | # Copy files 13 | Copy-Item .\*.bin ..\..\sd-src\demos\sound\pt3 14 | Copy-Item .\tunes\*.* ..\..\sd-src\demos\sound\pt3 15 | Copy-Item .\*.prg ..\..\sd-src\demos\sound\pt3 16 | 17 | Write-Output ("Build completed in :"+((Get-Date)-$start)+" seconds") 18 | 19 | } 20 | catch { 21 | Write-Output "COMPILATION ERRORS" 22 | } 23 | 24 | -------------------------------------------------------------------------------- /Oric/software/project/pt3/ppt37900.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/ppt37900.bin -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/AhaTake.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/AhaTake.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/BOOM.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/BOOM.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/CLTime.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/CLTime.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/Depeche.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/Depeche.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/FUN.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/FUN.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/GhostnG.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/GhostnG.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/Limahl.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/Limahl.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/MFrozen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/MFrozen.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/NINJA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/NINJA.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/NirvTeen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/NirvTeen.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/Oxygene4.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/Oxygene4.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/RHCreep.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/RHCreep.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/RT.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/RT.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/RWFeel.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/RWFeel.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/SMario.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/SMario.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/SpaceNY.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/SpaceNY.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/StarWars.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/StarWars.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/TELEGA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/TELEGA.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/TEST.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/TEST.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/WhiteXms.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/WhiteXms.pt3 -------------------------------------------------------------------------------- /Oric/software/project/pt3/tunes/popcorn.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/project/pt3/tunes/popcorn.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/graphics/hicol.prg: -------------------------------------------------------------------------------- 1 | def_test() 2 | text 3 | _outputText() 4 | _initColours() 5 | enddef 6 | ; 7 | def_outputText() 8 | for i=0,10,1 9 | println "Hello world ",i 10 | next 11 | enddef 12 | ; 13 | def_initColours() 14 | for i=0,127,1 15 | poke 0xa000+40*i,(i\7)+1 16 | poke 0xa001+40*i,26 17 | next 18 | for i=0,15,1 19 | poke 0xbb80+40*i+39,31 20 | next 21 | enddef 22 | ; 23 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/graphics/line.prg: -------------------------------------------------------------------------------- 1 | 10 def_start() 15 reset t:t=rnd(t) 20 hires:pixmode -1 30 x1=0:y1=0:dx1=2:dy1=3 40 x2=120:y2=100:dx2=3:dy2=-2 60 repeat 70 line x1,y1,x2,y2 75 tx1=x1:tx2=x2:ty1=y1:ty2=y2 80 t=x1+dx1 90 if t>239:t=239:dx1=0-(rnd(0)\5+2):endif 100 if t<0:t=0:dx1=(rnd(0)\5+2):endif 110 x1=t 120 t=y1+dy1 130 if t>199:t=199:dy1=0-(rnd(0)\5+2):endif 140 if t<0:t=0:dy1=(rnd(0)\5+2):endif 150 y1=t 160 t=x2+dx2 170 if t>239:t=239:dx2=0-(rnd(0)\5+2):endif 180 if t<0:t=0:dx2=(rnd(0)\5+2):endif 190 x2=t 200 t=y2+dy2 210 if t>199:t=199:dy2=0-(rnd(0)\5+2):endif 220 if t<0:t=0:dy2=(rnd(0)\5+2):endif 230 y2=t 235 line tx1,ty1,tx2,ty2 240 until 0 250 endif -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/graphics/mcsprite.prg: -------------------------------------------------------------------------------- 1 | ; Sprites and machine code demo 2 | ; Uses dflat software sprite 3 | ; system. Also inline assembler 4 | ; to speed up calculating 5 | ; sprite coords. 6 | ; _test(max,d) 7 | ; max=max # of sprites 1-32 8 | ; d=delay (50ms ticks) 9 | def_test(max,d) 10 | dim x[32],y[32],dx[32],dy[32] 11 | dim code[250] 12 | dim a$[100] 13 | text:cursor 1:_initGfx() 14 | _asmAll() 15 | _plotMsg(15,11,"dflat software sprites:") 16 | _plotMsg(16,12,"Up to 32 sprites using") 17 | _plotMsg(16,13,"dflat commands only.") 18 | _plotMsg(16,14,"inline assembler for") 19 | _plotMsg(16,15,"sprite positions only") 20 | _plotMsg(16,16,"in this example") 21 | reset t:t=rnd(t) 22 | for i=1,32,1 23 | x[i]=-1:y[i]=0 24 | sprchar i-1,33 25 | next 26 | for i=1,max,1 27 | x[i]=rnd(0)\34+4 28 | y[i]=rnd(0)\24+2 29 | t=rnd(0)\2:if t==0:t=-1:endif 30 | dx[i]=t 31 | t=rnd(0)\2:if t==0:t=-1:endif 32 | dy[i]=t 33 | next 34 | repeat 35 | t=call(code,max-1,0,0) 36 | sprmulti x,y 37 | sprupd 38 | wait d 39 | until 0 40 | enddef 41 | ; 42 | def_plotMsg(p,q,a$) 43 | local i 44 | i=1 45 | repeat 46 | plot p,q,asc(mid(a$,i,1))+128 47 | p=p+1 48 | i=i+1 49 | until i>len(a$) 50 | enddef 51 | ; 52 | def_initGfx() 53 | local d 54 | ; Read character data and poke 55 | ; in to char 33. Std char set 56 | ; in text mode is 0xb400. Note 57 | ; that the if the decimal 58 | ; value of 46080 was used, the 59 | ; tokeniser would show this as 60 | ; -19456 hence best to show 61 | ; use hex number format even 62 | ; though it would work fine. 63 | for a=0,7,1 64 | read d 65 | poke 0xb400+33*8+a,d 66 | next 67 | enddef 68 | ; 69 | ; Alien bitmap definition 70 | data 0b00100001 71 | data 0b00010010 72 | data 0b00011110 73 | data 0b00101101 74 | data 0b00111111 75 | data 0b00100001 76 | data 0b00011110 77 | data 0b00100001 78 | ; 79 | ; Need to make 3 passes of asm code 80 | def_asmAll() 81 | _asmMain(0):_asmMain(0) 82 | _asmMain(3) 83 | enddef 84 | ; 85 | ; The asm code 86 | def_asmMain(o) 87 | .opt o 88 | ; Assemble in to array code 89 | .org code 90 | ; asmStart label is start of 91 | ; code could also use array 92 | ; code. 93 | ; On entry, A=highest sprite 94 | ; number to process. 95 | .asmStart 96 | ; 2 bytes per array element 97 | asl 98 | ; Using X as index in to sprite 99 | ; x,y array. Notice that the 100 | ; asm can refer to arrary vars 101 | ; x[] and y[] - the base 102 | ; address of the arrays are 103 | ; used similar to C 104 | tax 105 | .loop 106 | ; x[X]=x[X]+dx[X] 107 | clc 108 | lda x,x 109 | adc dx,x 110 | sta x,x 111 | lda x+1,x 112 | adc dx+1,x 113 | sta x+1,x 114 | ; y[X]=y[X]+dy[X] 115 | clc 116 | lda y,x 117 | adc dy,x 118 | sta y,x 119 | lda y+1,x 120 | adc dy+1,x 121 | sta y+1,x 122 | ; if x[X] is 2 or 39 123 | ; then dx[X]=0-dx[x] 124 | lda x,x 125 | cmp #2 126 | beq negDX 127 | cmp #39 128 | bne skipDX 129 | .negDX 130 | sec 131 | lda #0 132 | sbc dx,x 133 | sta dx,x 134 | lda #0 135 | sbc dx+1,x 136 | sta dx+1,x 137 | .skipDX 138 | ; if y[X] is 0 or 27 139 | ; then dy[X]=0-dy[x] 140 | lda y,x 141 | cmp #0 142 | beq negDY 143 | cmp #27 144 | bne skipDY 145 | .negDY 146 | lda #0 147 | sbc dy,x 148 | sta dy,x 149 | lda #0 150 | sbc dy+1,x 151 | sta dy+1,x 152 | .skipDY 153 | ; X=X-2 154 | ; (2 bytes per array element) 155 | dex 156 | dex 157 | bpl loop 158 | ; back to dflat 159 | rts 160 | println "_test(max,d) : max sprites & d delay" 161 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/graphics/sprdemo.prg: -------------------------------------------------------------------------------- 1 | def_start(max) 2 | text 3 | reset a:a=rnd(a) 4 | dim x[32],y[32] 5 | dim dx[32],dy[32] 6 | for a=1,99,1 7 | plot rnd(0)\38+2,rnd(0)\28,42 8 | next 9 | for a=1,32,1 10 | x[a]=-1:x[a]=-1 11 | next 12 | for a=1,max,1 13 | x[a]=rnd(0)\30+5 14 | y[a]=rnd(0)\20+4 15 | dx[a]=1-2*(rnd(0)\2) 16 | dy[a]=1-2*(rnd(0)\2) 17 | sprchar a-1,47+a+128 18 | next 19 | sprmulti x,y:sprupd 20 | repeat 21 | for a=1,max,1 22 | x[a]=x[a]+dx[a] 23 | if(x[a]<3)|(x[a]>38) 24 | dx[a]=0-dx[a] 25 | endif 26 | y[a]=y[a]+dy[a] 27 | if(y[a]<1)|(y[a]>26) 28 | dy[a]=0-dy[a] 29 | endif 30 | next 31 | sprmulti x,y:sprupd 32 | until 0 33 | enddef 34 | println "_start(max) max=# of sprites 1..32" 35 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/social/thanks.prg: -------------------------------------------------------------------------------- 1 | def_start(delay) 2 | _init() 3 | x=9:y=9:dx=1:dy=1:m=1 4 | reset msgTimer:reset plotTimer 5 | repeat 6 | if elapsed(plotTimer)>(delay*2) 7 | reset plotTimer 8 | _plot(x,y) 9 | x=x+dx:if (x<3)|(x>21):dx=0-dx:endif 10 | y=y+dy:if (y<2)|(y>17):dy=0-dy:endif 11 | endif 12 | if elapsed(msgTimer)>delay 13 | reset msgTimer 14 | _message():m=m+1:if m>length:m=1:endif 15 | endif 16 | until 0 17 | enddef 18 | ; 19 | def_init() 20 | ink 7:paper 0:cls 21 | dim a$[18,8],m$[255],t$[255] 22 | m$="" 23 | for i=1,8,1 24 | read a$[i] 25 | next 26 | for i=1,7,1 27 | read t$:m$=m$+t$ 28 | next 29 | length=len(m$)-37 30 | for i=0,27,1:plot 1,i,(i\6)+1:next 31 | plot 0,26,10:plot 0,27,10:plot 1,26,2:plot 1,27,3 32 | enddef 33 | ; 34 | def_plot(x,y) 35 | for i=1,8,1 36 | plot x,y+i-1,a$[i] 37 | next 38 | enddef 39 | ; 40 | def_message() 41 | t$=mid(m$,m,37):plot 2,26,t$:plot 2,27,t$ 42 | enddef 43 | ; 44 | data " " 45 | data " ** * * * " 46 | data " * * * * * ** " 47 | data " * * * * * * " 48 | data " * * * * * * " 49 | data " * * * * * * " 50 | data " ** * * *** " 51 | data " " 52 | data " " 53 | data "Dear Twitter.. Never thought that I " 54 | data "would ever reach 3000+ follows, but" 55 | data " thanks to each and every one for yo" 56 | data "ur support in making this the best n" 57 | data "erdy place to be! From @6502Nerd :-)" 58 | data " " 59 | _start(2) 60 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/AhaTake.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/AhaTake.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/BOOM.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/BOOM.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/CLTime.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/CLTime.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/Depeche.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/Depeche.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/FUN.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/FUN.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/GhostnG.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/GhostnG.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/Limahl.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/Limahl.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/MFrozen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/MFrozen.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/NINJA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/NINJA.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/NirvTeen.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/NirvTeen.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/Oxygene4.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/Oxygene4.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/RHCreep.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/RHCreep.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/RT.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/RT.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/RWFeel.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/RWFeel.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/SMario.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/SMario.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/SpaceNY.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/SpaceNY.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/StarWars.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/StarWars.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/TELEGA.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/TELEGA.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/TEST.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/TEST.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/WhiteXms.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/WhiteXms.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/attract.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/attract.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/popcorn.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/popcorn.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/ppt37700.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/ppt37700.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/ppt37800.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/ppt37800.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/ppt37900.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/ppt37900.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/ptdemo.prg: -------------------------------------------------------------------------------- 1 | ; PT3 player in dflat! 2 | ; 2025 3 | def_start() 4 | dim code[100] 5 | println "Loading ppt3.bin to 0x8000" 6 | bload 0x8000,"ppt3.bin" 7 | println "Ensure PT3 tune is loaded somewhere" 8 | _asm(0):_asm(0):_asm(2) 9 | println "t=call(start,songLo,songHi,0)" 10 | println "t=call(mute, 0,0,0)" 11 | println "t=call(stop, 0,0,0)" 12 | enddef 13 | ; 14 | ; 15 | def_asm(o) 16 | .opt o 17 | .org code 18 | userIrq=0x06 19 | pt3init=0x8000 20 | pt3play=pt3init+7 21 | pt3mute=pt3init+10 22 | .oldIrq 23 | .ds 2 24 | ; Initialise player to run on irq 25 | .start 26 | php:sei 27 | ; A,X provides song address 28 | ; Initialise the pt3 player 29 | jsr pt3init 30 | ; Remember previous user irq 31 | lda userIrq:sta oldIrq 32 | lda userIrq+1:sta oldIrq+1 33 | ; Instate PT3 irq 34 | lda #pt3Irq&0xff:sta userIrq 35 | lda #pt3Irq>>8:sta userIrq+1 36 | ; Restore P (enables interrupts) 37 | plp 38 | rts 39 | ; Call pt3 player every interrupt 40 | .pt3Irq 41 | ; Simply call the player each tick 42 | jsr pt3play 43 | rts 44 | ; mute player 45 | .mute 46 | jsr pt3mute 47 | rts 48 | ; stop player 49 | .stop 50 | php:sei 51 | ; Restore previous irq 52 | lda oldIrq:sta userIrq 53 | lda oldIrq+1:sta userIrq+1 54 | ; Restore P (enables interrupts) 55 | plp 56 | rts 57 | enddef 58 | ; 59 | println "Check instructions!" 60 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/pt3/win1.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/sound/pt3/win1.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/sound/rttl/rttlplay.prg: -------------------------------------------------------------------------------- 1 | def_start(speed,rep) 2 | println "Parsing RTTL data.." 3 | _initMusic() 4 | musLen=len(musStr$) 5 | println "RTTL length=",musLen 6 | println musStr$ 7 | println "Press any key.." 8 | z=get(1) 9 | repeat 10 | musIdx=1 11 | repeat 12 | println musIdx," ",octave[musIdx]," ",note[musIdx]," ",duration[musIdx] 13 | music 1,octave[musIdx],note[musIdx],0:play 1,0,1,1000 14 | wait duration[musIdx] 15 | musIdx=musIdx+1 16 | until note[musIdx]==-1 17 | println 18 | until rep 19 | println "Done!" 20 | enddef 21 | ; 22 | def_initMusic() 23 | dim musStr$[255],musChar$[2] 24 | ;Popcorn2:d=8,o=6,b=140: 25 | musStr$="c,a#5,c,g5,16d#5,g5,4c5,c,a#5,c,g5,16d#5,g5,4c5,c,d,d#,16d,d#," 26 | musStr$=musStr$+"16d#,c,d,16c,d,16d,a#5,c,16a#5,c,16c,g#5,4c,c,a#5,c,g5,d#5,g5," 27 | musStr$=musStr$+"4c5,c,a#5,c,g5,16d#5,g5,4c5,c,d,d#,16d,d#,16d#,c,d,16c,d,16d," 28 | musStr$=musStr$+"a#5,c,16a#5,c,16c,d,4d#" 29 | musDefOct=6 30 | musBeat=3000/100 31 | musDefDur=32/8 32 | ; 33 | ;TakeOnMe:d=16,o=5,b=100: 34 | ; musStr$="8p,a#,a#,a#,8f#,8d#,8g#,8g#,g#,c6,c6,c#6,d#6,c#6,c#6,c#6," 35 | ; musStr$=musStr$+"8g#,8f#,8a#,8a#,a#,g#,g#,a#,g#,a#,a#,a#,8f#," 36 | ; musStr$=musStr$+"8d#,8g#,8g#,g#,c6,c6,c#6,d#6,c#6,c#6,c#6,8g#,8f#,8a#,8a#" 37 | ; musDefOct=5 38 | ; musBeat=3000/100 39 | ; musDefDur=32/16 40 | ; 41 | dim note[200],octave[200],duration[200] 42 | curIdx=1 43 | musIdx=1 44 | repeat 45 | octave[curIdx]=musDefOct 46 | duration[curIdx]=musDefDur 47 | musChar$=mid(musStr$,musIdx,1) 48 | if (musChar$>"0") & (musChar$<"9") 49 | duration[curIdx]=32/(asc(musChar$)-'0') 50 | if musChar$=="1" 51 | musIdx=musIdx+1 52 | musChar$=mid(musStr$,musIdx,1) 53 | if musChar$=="6" 54 | duration[curIdx]=32/16 55 | else 56 | musIdx=musIdx-1 57 | endif 58 | elif musChar$=="3" 59 | duration[curIdx]=32/32 60 | musIdx=musIdx+1 61 | endif 62 | musIdx=musIdx+1 63 | endif 64 | musChar$=mid(musStr$,musIdx,1) 65 | if (musChar$>="a") & (musChar$<="p") 66 | if musChar$=="c":note[curIdx]=0 67 | elif musChar$=="d":note[curIdx]=2 68 | elif musChar$=="e":note[curIdx]=4 69 | elif musChar$=="f":note[curIdx]=5 70 | elif musChar$=="g":note[curIdx]=7 71 | elif musChar$=="a":note[curIdx]=9 72 | elif musChar$=="b":note[curIdx]=11 73 | else:note[curIdx]=12 74 | endif 75 | musIdx=musIdx+1 76 | musChar$=mid(musStr$,musIdx,1) 77 | if musChar$=="#" 78 | note[curIdx]=note[curIdx]+1 79 | else 80 | musIdx=musIdx-1 81 | endif 82 | musIdx=musIdx+1 83 | endif 84 | musChar$=mid(musStr$,musIdx,1) 85 | if (musChar$>="4") & (musChar$<="7") 86 | octave[curIdx]=asc(musChar$)-'0' 87 | musIdx=musIdx+1 88 | endif 89 | musChar$=mid(musStr$,musIdx,1) 90 | if musChar$=="." 91 | duration[curIdx]=duration[curIdx]+duration[curIdx]/2 92 | musIdx=musIdx+1 93 | endif 94 | musChar$=mid(musStr$,musIdx,1) 95 | if musChar$=="," 96 | musIdx=musIdx+1 97 | endif 98 | duration[curIdx]=duration[curIdx]*musBeat/speed 99 | ; println musIdx," ",curIdx," ",note[curIdx]," ",octave[curIdx]," ",duration[curIdx] 100 | curIdx=curIdx+1 101 | until musIdx>len(musStr$) 102 | note[curIdx]=-1 103 | enddef 104 | println "_start(speed,rep)" 105 | ; 106 | -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/1-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/1-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/10-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/10-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/11-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/11-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/12-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/12-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/13-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/13-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/14-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/14-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/2-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/2-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/3-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/3-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/4-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/4-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/5-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/5-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/6-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/6-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/7-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/7-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/8-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/8-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/9-small.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/demos/space/9-small.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/demos/space/spacegal.prg: -------------------------------------------------------------------------------- 1 | ; Space gallery 2 | ; A simple slide show 3 | ; of files of the form x-small.bin 4 | ; where x = 1..14 5 | def_start() 6 | ink 7:paper 0:hires 7 | a=1 8 | dim a$[20] 9 | repeat 10 | a$=dec(a)+"-small.bin" 11 | bload 0xa000,a$ 12 | i=0:repeat:c=get(0):i=i+1:until (i>1000)|(c<>0) 13 | a=a+1:if a>14:a=1:endif 14 | until c==27 15 | enddef 16 | println "_start() to start slideshow" 17 | -------------------------------------------------------------------------------- /Oric/software/sd-src/games/attract.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/games/attract.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/games/kong.prg: -------------------------------------------------------------------------------- 1 | ; copilot graphics 2 | def_test() 3 | dim r1$[3,2],r2$[3,2] 4 | r1$[1]="ac":r2$[1]="bd" 5 | r1$[2]="eg":r2$[2]="fh" 6 | ink 1:paper 16+9 7 | text 8 | poke 0xbb80,16 9 | println "Donkey Kong" 10 | println 11 | println 12 | println 13 | _udg() 14 | x=2:a=0 15 | repeat 16 | plot x,2," ":plot x,3," " 17 | x=x+1:if x>38:x=2:endif 18 | plot x,2,r1$[a+1]:plot x,3,r2$[a+1] 19 | a=a^1 20 | wait 10 21 | until 0 22 | enddef 23 | ; 24 | ; 25 | def_udg() 26 | repeat 27 | read a 28 | if a>0 29 | i=0xb800+8*a 30 | for i=i,i+7,1 31 | read b 32 | poke i,b 33 | next 34 | endif 35 | until a<=0 36 | enddef 37 | ; 38 | ; Blank 39 | data 32 40 | data 0b000000 41 | data 0b000000 42 | data 0b000000 43 | data 0b000000 44 | data 0b000000 45 | data 0b000000 46 | data 0b000000 47 | data 0b000000 48 | ;Facing right frame 1 49 | data 97 50 | data 0b000111 51 | data 0b001111 52 | data 0b001010 53 | data 0b001010 54 | data 0b000100 55 | data 0b011011 56 | data 0b100000 57 | data 0b101000 58 | ; 59 | data 98 60 | data 0b101000 61 | data 0b101111 62 | data 0b101111 63 | data 0b010001 64 | data 0b001001 65 | data 0b001001 66 | data 0b001000 67 | data 0b001111 68 | ; 69 | data 99 70 | data 0b100000 71 | data 0b111100 72 | data 0b110000 73 | data 0b001000 74 | data 0b010000 75 | data 0b101000 76 | data 0b000100 77 | data 0b010100 78 | ; 79 | data 100 80 | data 0b010100 81 | data 0b110100 82 | data 0b110100 83 | data 0b011000 84 | data 0b010000 85 | data 0b010000 86 | data 0b101000 87 | data 0b111100 88 | ; 89 | ;Facing right frame 2 90 | data 101 91 | data 0b000111 92 | data 0b001111 93 | data 0b001010 94 | data 0b001010 95 | data 0b000100 96 | data 0b011011 97 | data 0b100000 98 | data 0b100100 99 | ; 100 | data 102 101 | data 0b010100 102 | data 0b010011 103 | data 0b001011 104 | data 0b000100 105 | data 0b001001 106 | data 0b010010 107 | data 0b010010 108 | data 0b011111 109 | ; 110 | data 103 111 | data 0b100000 112 | data 0b111100 113 | data 0b110000 114 | data 0b001000 115 | data 0b010000 116 | data 0b101000 117 | data 0b000100 118 | data 0b010100 119 | ; 120 | data 104 121 | data 0b010100 122 | data 0b110100 123 | data 0b111000 124 | data 0b011000 125 | data 0b001000 126 | data 0b101000 127 | data 0b100100 128 | data 0b111110 129 | ; 130 | data -1 131 | 132 | -------------------------------------------------------------------------------- /Oric/software/sd-src/games/pix.prg: -------------------------------------------------------------------------------- 1 | ; * PIX in DFLAT! * 2 | ; * 01/2020 rax * 3 | def_s() 4 | poke 0x5a,0 5 | paper 4: ink 7: hires: cursor(1) 6 | x=120: y=100 7 | dim s$[40] 8 | dim modetxt$[10,5] 9 | modetxt$[0]="none" 10 | modetxt$[1]="point" 11 | modetxt$[2]="circle" 12 | modetxt$[3]="line" 13 | modetxt$[4]="text" 14 | _draw() 15 | enddef 16 | def_draw() 17 | pixmode 1 18 | plot x-2,y-3,43 19 | pixmode -1 20 | type = 1 21 | x0=0:y0=0 22 | _setOldPos() 23 | repeat 24 | st = stick() 25 | c= get(1) 26 | plot x-2,y-3,43 27 | if type >1: _action(type,-1): endif 28 | if (st&1): x=x-1: endif 29 | if (st&2): x=x+1: endif 30 | if (st&4): y=y-1: endif 31 | if (st&8): y=y+1: endif 32 | if (st&16) 33 | _action(type,1) 34 | if type > 1 35 | type = 1 36 | _setOldPos() 37 | endif 38 | endif 39 | if (c=='1'): type=1 : _setOldPos() 40 | elif (c=='2'): type=2 : _setOldPos() 41 | elif (c=='3'): type=3 : _setOldPos() 42 | elif (c=='4'): _printText(): _setOldPos(): type = 1 43 | endif 44 | if type >1: _action(type,-1): endif 45 | plot x-2,y-3,43 46 | until c==27 47 | enddef 48 | def_setOldPos() 49 | cls 50 | print "mode: ":print modetxt$[type] 51 | println 52 | println "1:Point 2:Circle 3:Line 4:Text" 53 | print "PIX | keys: arrows, space, 1, 2, 3, 4" 54 | poke 49080,22 55 | poke 49081,0 56 | x0=x:y0=y 57 | enddef 58 | def_action(type,mode) 59 | if type==1 60 | pixmode mode 61 | point x,y 62 | pixmode -1 63 | elif type==2 64 | l=x-x0 65 | if l<0:l=x0-x:endif 66 | pixmode mode 67 | circle x0,y0,l 68 | pixmode -1 69 | elif type==3 70 | pixmode mode 71 | line x0,y0,x,y 72 | pixmode -1 73 | endif 74 | enddef 75 | def_printText() 76 | cls 77 | cursor(0) 78 | print "Text:" 79 | input s$ 80 | plot x,y,s$ 81 | cursor(1) 82 | enddef 83 | _s() 84 | -------------------------------------------------------------------------------- /Oric/software/sd-src/games/popcorn.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/games/popcorn.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/games/ppt37900.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/games/ppt37900.bin -------------------------------------------------------------------------------- /Oric/software/sd-src/games/triangle.prg: -------------------------------------------------------------------------------- 1 | ; Sierpinksi Triangle generator 2 | ; _start(l,x,y,s) 3 | ; l=depth level 4 | ; x,y=top/left start 5 | ; s=size 6 | ; try _start(5,10,10,180) 7 | def_start(l,x,y,s) 8 | hires 9 | _triangle(l,x,y,s) 10 | enddef 11 | ; 12 | def_triangle(l,x,y,s) 13 | local s2 14 | if l<1:enddef:endif 15 | line x,y,x+s,y 16 | line x,y,x,y+s 17 | line x+s,y,x,y+s 18 | s2=s>>1 19 | _triangle(l-1,x,y,s2) 20 | _triangle(l-1,x+s2,y,s2) 21 | _triangle(l-1,x,y+s2,s2) 22 | enddef 23 | println "Try _start(5,10,10,180)" 24 | -------------------------------------------------------------------------------- /Oric/software/sd-src/games/win1.pt3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/software/sd-src/games/win1.pt3 -------------------------------------------------------------------------------- /Oric/software/sd-src/test/line2.prg: -------------------------------------------------------------------------------- 1 | 10 def_start(max) 2 | 11 dim i1[max],j1[max],i2[max],j2[max] 3 | 15 reset t:t=rnd(t) 4 | 20 hires:pixmode -1 5 | 30 x1=0:y1=0:dx1=2:dy1=3 6 | 40 x2=128:y2=96:dx2=3:dy2=-2 7 | 45 p=1:q=1:d=max-1 8 | 60 repeat 9 | 70 line x1,y1,x2,y2 10 | 71 i1[p]=x1:i2[p]=x2:j1[p]=y1:j2[p]=y2 11 | 72 p=p+1:if p>max:p=1:endif 12 | 75 tx1=x1:tx2=x2:ty1=y1:ty2=y2 13 | 80 t=x1+dx1 14 | 90 if t>239:t=239:dx1=0-(rnd(0)\5+2):endif 15 | 100 if t<0:t=0:dx1=(rnd(0)\5+2):endif 16 | 110 x1=t 17 | 120 t=y1+dy1 18 | 130 if t>199:t=199:dy1=0-(rnd(0)\5+2):endif 19 | 140 if t<0:t=0:dy1=(rnd(0)\5+2):endif 20 | 150 y1=t 21 | 160 t=x2+dx2 22 | 170 if t>239:t=239:dx2=0-(rnd(0)\5+2):endif 23 | 180 if t<0:t=0:dx2=(rnd(0)\5+2):endif 24 | 190 x2=t 25 | 200 t=y2+dy2 26 | 210 if t>199:t=199:dy2=0-(rnd(0)\5+2):endif 27 | 220 if t<0:t=0:dy2=(rnd(0)\5+2):endif 28 | 230 y2=t 29 | 231 if d>0 30 | 232 d=d-1 31 | 233 else 32 | 235 line i1[q],j1[q],i2[q],j2[q] 33 | 236 q=q+1:if q>max:q=1:endif 34 | 237 endif 35 | 240 until 0 36 | 250 endif 37 | 38 | -------------------------------------------------------------------------------- /Oric/software/sd-src/test/pcwbench.prg: -------------------------------------------------------------------------------- 1 | ; Reproducing PCW BASIC 2 | ; Benchmarks from the 80s 3 | ; See this for ref: 4 | ; http://www.cpcwiki.eu/index.php/BASIC_Benchmark 5 | ; Benchmark 8 is missed as 6 | ; dflat does not do fp/trig. 7 | ; Tried to be faitful to 8 | ; these tests without trying 9 | ; to optimise or use dflat 10 | ; speed ups. 11 | ; Despite this, dflat seems 12 | ; to be around 3x faster 13 | ; than the Atmos timings for 14 | ; BM6 and 7! 15 | ;Test 1 16 | def_test1() 17 | println "Start" 18 | for k=1,1000,1 19 | next 20 | println "Stop" 21 | enddef 22 | ; 23 | ;Test 2 24 | def_test2() 25 | println "Start" 26 | k=1 27 | repeat 28 | k=k+1 29 | until k>=1000 30 | println "Stop" 31 | enddef 32 | ; 33 | ;Test 3 34 | def_test3() 35 | println "Start" 36 | k=1 37 | repeat 38 | k=k+1 39 | a=k/k*k+k-k 40 | until k>=1000 41 | println "Stop" 42 | enddef 43 | ; 44 | ;Test 4 45 | def_test4() 46 | println "Start" 47 | k=1 48 | repeat 49 | k=k+1 50 | a=k/2*3+4-5 51 | until k>=1000 52 | println "Stop" 53 | enddef 54 | ; 55 | ;Test 5 56 | def_test5() 57 | println "Start" 58 | k=1 59 | repeat 60 | k=k+1 61 | a=k/2*3+4-5 62 | _sub() 63 | until k>=1000 64 | println "Stop" 65 | enddef 66 | ; 67 | def_sub() 68 | enddef 69 | ; 70 | ;Test 6 71 | def_test6() 72 | dim m[5] 73 | println "Start" 74 | k=1 75 | repeat 76 | k=k+1 77 | a=k/2*3+4-5 78 | _sub() 79 | for l=1,5,1 80 | next 81 | until k>=1000 82 | println "Stop" 83 | enddef 84 | ; 85 | ;Test 7 86 | def_test7() 87 | dim m[5] 88 | println "Start" 89 | k=1 90 | repeat 91 | k=k+1 92 | a=k/2*3+4-5 93 | _sub() 94 | for l=1,5,1 95 | m[l]=a 96 | next 97 | until k>=1000 98 | println "Stop" 99 | enddef 100 | println "_testX() X=1..7 for PCW Benchmark" 101 | -------------------------------------------------------------------------------- /Oric/util/.gitignore: -------------------------------------------------------------------------------- 1 | build/* 2 | -------------------------------------------------------------------------------- /Oric/util/bin/dfbin2tap.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/util/bin/dfbin2tap.exe -------------------------------------------------------------------------------- /Oric/util/bin/dftap2txt.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/util/bin/dftap2txt.exe -------------------------------------------------------------------------------- /Oric/util/bin/dftap2wav.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/util/bin/dftap2wav.exe -------------------------------------------------------------------------------- /Oric/util/bin/dftxt2tap.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/Oric/util/bin/dftxt2tap.exe -------------------------------------------------------------------------------- /Oric/util/dfbin2tap/dfbin2tap.cpp: -------------------------------------------------------------------------------- 1 | /* dfbin2tap converter tool by 6502Nerd */ 2 | /* Converts a raw image file to a format that can */ 3 | /* be loaded using the bload function in Orid dflat.*/ 4 | /* To convert files, use the OSDK pictconv.exe */ 5 | /* utility with option -o2 e.g. */ 6 | /* pictconv -o2 -f6 source.jpg dflatimg.bin */ 7 | /* read the pictconv instructions for more picture */ 8 | /* options, but I like -f6 for static displays */ 9 | /* version 0.1 D. Miah 03/2023 */ 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | #if defined(__linux__) || defined(__APPLE__) 16 | #include 17 | #include 18 | #define pathchr '/' 19 | #define strcpy_s strcpy 20 | #define strcat_s strcat 21 | #define errno_t int 22 | errno_t fopen_s(FILE **f, const char *name, const char *mode) { 23 | errno_t ret = 0; 24 | assert(f); 25 | *f = fopen(name, mode); 26 | /* Can't be sure about 1-to-1 mapping of errno and MS' errno_t */ 27 | if (!*f) 28 | ret = errno; 29 | return ret; 30 | } 31 | } 32 | #else 33 | #define pathchr '\\' 34 | #endif 35 | 36 | FILE *in, *out; 37 | char fname[100], line[200]; 38 | int lineNo=0, blockCount=0, blockNum=0, inSize=0; 39 | 40 | int init(int argc, char *argv[]) 41 | { 42 | size_t i; 43 | 44 | if (argc != 3) return 1; 45 | 46 | printf("Reading %s\n", argv[argc - 2]); 47 | int err = fopen_s(&in, argv[argc - 2], "rb"); 48 | printf("Error = %d\n", err); 49 | if (in == NULL) { 50 | printf("Cannot open %s file\n\n", argv[1]); 51 | return 1; 52 | } 53 | 54 | /* Find the size of the input raw file */ 55 | fseek(in, 0L, SEEK_END); 56 | inSize = ftell(in); 57 | fseek(in, 0L, SEEK_SET); 58 | 59 | /* Get filename portion of destination, must be <16 chars */ 60 | for (i = strlen(argv[argc-1]); (i > 1) && (argv[argc-1][i] != pathchr); i--); 61 | if (argv[argc-1][i] == pathchr) i++; 62 | strcpy_s(fname, &argv[argc-1][i]); 63 | if (strlen(fname) > 15) { 64 | printf("Destination filename too long.\n"); 65 | return 1; 66 | } 67 | 68 | printf("Writing %s\n", argv[argc - 1]); 69 | err = fopen_s(&out, argv[argc - 1], "wb"); 70 | printf("Error = %d\n", err); 71 | if (out == NULL) { 72 | printf("Cannot create %s file\n\n", argv[argc-1]); 73 | return 1; 74 | } 75 | return 0; 76 | } 77 | 78 | 79 | void puttapdata(unsigned char c) { 80 | if (blockCount == 0) { 81 | fputc(blockNum & 0xff, out); /* Low byte of block number */ 82 | fputc(blockNum >> 8, out); /* High byte of block number */ 83 | blockNum++; 84 | } 85 | fputc(c, out); 86 | blockCount++; 87 | if (blockCount > 255) blockCount = 0; /* Block count wraps from 255 to 0 */ 88 | } 89 | 90 | 91 | int main(int argc, char *argv[]) 92 | { 93 | size_t i; 94 | 95 | if (init(argc, argv)) { 96 | printf("Usage: %s \n", argv[0]); 97 | printf("Destination file must have .tap extension\n"); 98 | printf("(v0.1)\n"); 99 | exit(1); 100 | } 101 | 102 | while (!feof(in)) { 103 | unsigned char c; 104 | 105 | /* Put out TAP file header */ 106 | for (i = 0; i <4; i++) fputc(0x16, out); /* 4 bytes of sync char 0x16 */ 107 | fputc(0x24, out); /* '$' for start of fname */ 108 | 109 | for (i = 0; i < 9; i++) fputc(0xff, out); /* 9 byte header - future expansion */ 110 | 111 | fputs(fname, out); /* Copy filename */ 112 | fputc(0, out); /* zero terminator for fname */ 113 | 114 | puttapdata(0x00); /* Destination address 0xa000 low byte*/ 115 | puttapdata(0xa0); /* Destination address 0xa000 high byte*/ 116 | puttapdata(inSize&255); /* Put out low byte of size */ 117 | puttapdata(inSize/256); /* Put out high byte of size */ 118 | /* Put out all text file as TAP body */ 119 | /* in 256 byte blocks, preceeded by block number */ 120 | while (!feof(in)) { 121 | c=fgetc(in); /* Get a byte of raw data */ 122 | puttapdata(c); /* Write the byte out */ 123 | } 124 | while (blockCount != 0) puttapdata(0x00); /* Fill final block with nul */ 125 | } 126 | 127 | fclose(in); 128 | fclose(out); 129 | 130 | printf("dfbin2tap 0.1 (c) 03/2023 --- File converted.\n"); 131 | } 132 | -------------------------------------------------------------------------------- /Oric/util/dfbin2tap/dfbin2tap.h: -------------------------------------------------------------------------------- 1 | // dftxt2tap.h : Include file for standard system include files, 2 | // or project specific include files. 3 | 4 | #pragma once 5 | 6 | // TODO: Reference additional headers your program requires here. 7 | -------------------------------------------------------------------------------- /Oric/util/dftap2txt/dftap2txt.cpp: -------------------------------------------------------------------------------- 1 | /* dftap2txt converter tool by 6502Nerd */ 2 | /* version 0.1 D. Miah 01/2020 */ 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #if defined(__linux__) || defined(__APPLE__) 9 | #include 10 | #include 11 | #define strcpy_s strcpy 12 | #define errno_t int 13 | errno_t fopen_s(FILE **f, const char *name, const char *mode) { 14 | errno_t ret = 0; 15 | assert(f); 16 | *f = fopen(name, mode); 17 | /* Can't be sure about 1-to-1 mapping of errno and MS' errno_t */ 18 | if (!*f) 19 | ret = errno; 20 | return ret; 21 | } 22 | #endif 23 | 24 | FILE *in, *out; 25 | char fname[100]; 26 | int block = 0; /* Count in to the block */ 27 | bool stripLine = false; 28 | 29 | int init(int argc, char *argv[]) 30 | { 31 | if (argc < 3) return 1; 32 | 33 | /* Line numbers to be stripped? */ 34 | if (strcmp(argv[1], "-l") == 0) stripLine = true; 35 | 36 | printf("Reading %s\n", argv[argc - 2]); 37 | int err = fopen_s(&in, argv[argc - 2], "rb"); 38 | printf("Error = %d\n", err); 39 | if (in == NULL) { 40 | printf("Cannot open %s file\n\n", argv[1]); 41 | return 1; 42 | } 43 | 44 | printf("Writing %s\n", argv[argc - 1]); 45 | err = fopen_s(&out, argv[argc - 1], "wb"); 46 | printf("Error = %d\n", err); 47 | if (out == NULL) { 48 | printf("Cannot create %s file\n\n", argv[2]); 49 | return 1; 50 | } 51 | return 0; 52 | } 53 | 54 | unsigned char getdatabyte() 55 | { 56 | unsigned char valin; 57 | 58 | /* At each new block, skip 2 byte block number */ 59 | if (block == 0) { 60 | valin = fgetc(in); 61 | valin = fgetc(in); 62 | } 63 | 64 | valin = fgetc(in); 65 | block++; 66 | if (block > 255) block = 0; 67 | return valin; 68 | } 69 | 70 | 71 | int main(int argc, char *argv[]) 72 | { 73 | int i, s; 74 | unsigned char valin; 75 | char line[200], temp[200]; 76 | 77 | if (init(argc, argv)) { 78 | printf("Usage: %s [-l] \n", argv[0]); 79 | printf("Source file must have .tap extension\n"); 80 | printf("(v0.1)\n"); 81 | exit(1); 82 | } 83 | 84 | if (!feof(in)) { 85 | /* Jump over sync and #$# of TAP file header */ 86 | do { 87 | valin = fgetc(in); 88 | } while (!feof(in) && (valin != 0x24)); 89 | 90 | /* 9 byte header - skip */ 91 | for (i = 0; i < 9; i++) valin = fgetc(in); 92 | 93 | /* Jump over filename and zero terminator */ 94 | do { 95 | valin = fgetc(in); 96 | } while (!feof(in) && (valin != 0)); 97 | 98 | block = 0; 99 | /* Get lines of text from 256 byte blocks, each preceded by block # */ 100 | while (!feof(in)) { 101 | i = 0; /* Count of line characters */ 102 | do { 103 | valin = getdatabyte(); /* Get a data byte */ 104 | line[i++] = valin; /* Add to current line */ 105 | } while (valin != 0x0d); /* Until CR detected */ 106 | line[i] = 0; /* Add zero terminator */ 107 | if ((i > 1) && stripLine) { /* Strip line number from line? */ 108 | /* Skip past the first space */ 109 | for (s = 0; line[s] != ' '; s++); 110 | s++; 111 | strcpy_s(temp, &line[s]); 112 | strcpy_s(line, temp); 113 | i -= s; 114 | } 115 | fputs(line, out); /* Write line */ 116 | if (i == 1) break; /* Empty line means done */ 117 | } 118 | } 119 | fclose(in); 120 | fclose(out); 121 | printf("dftap2txt 0.1 (c) 01/2021 --- File converted.\n"); 122 | } 123 | -------------------------------------------------------------------------------- /Oric/util/dftap2txt/dftap2txt.h: -------------------------------------------------------------------------------- 1 | // dftap2txt.h : Include file for standard system include files, 2 | // or project specific include files. 3 | 4 | #pragma once 5 | // TODO: Reference additional headers your program requires here. 6 | -------------------------------------------------------------------------------- /Oric/util/dftap2wav/dftap2wav.h: -------------------------------------------------------------------------------- 1 | // dftap2wav.h : Include file for standard system include files, 2 | // or project specific include files. 3 | 4 | #pragma once 5 | 6 | 7 | // TODO: Reference additional headers your program requires here. 8 | -------------------------------------------------------------------------------- /Oric/util/dftxt2tap/dftxt2tap.h: -------------------------------------------------------------------------------- 1 | // dftxt2tap.h : Include file for standard system include files, 2 | // or project specific include files. 3 | 4 | #pragma once 5 | 6 | // TODO: Reference additional headers your program requires here. 7 | -------------------------------------------------------------------------------- /Oric/util/make.ps1: -------------------------------------------------------------------------------- 1 | # Script to build dflat utilities 2 | try { 3 | 4 | $start = (Get-Date) 5 | 6 | # Build cpp utilities - put them all in one bin folder 7 | gcc ./dfbin2tap/dfbin2tap.cpp -o ./bin/dfbin2tap 8 | if ($LASTEXITCODE -gt 0) { throw } 9 | gcc ./dftap2txt/dftap2txt.cpp -o ./bin/dftap2txt 10 | if ($LASTEXITCODE -gt 0) { throw } 11 | gcc ./dftap2wav/dftap2wav.cpp -o ./bin/dftap2wav 12 | if ($LASTEXITCODE -gt 0) { throw } 13 | gcc ./dftxt2tap/dftxt2tap.cpp -o ./bin/dftxt2tap 14 | if ($LASTEXITCODE -gt 0) { throw } 15 | 16 | Write-Output ("Build completed in :"+((Get-Date)-$start)+" seconds") 17 | 18 | } catch { 19 | Write-Output "COMPILATION ERRORS" 20 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/dflat_programming_language/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ] 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/dflat_programming_language/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .gitignore 4 | vsc-extension-quickstart.md 5 | -------------------------------------------------------------------------------- /Oric/vsc-lang/dflat_programming_language/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": ";" 5 | }, 6 | // symbols used as brackets 7 | "brackets": [ 8 | ["(", ")", "[", "]"] 9 | ], 10 | // symbols that are auto closed when typing 11 | "autoClosingPairs": [ 12 | ["(", ")"], 13 | ["\"", "\""], 14 | ["'", "'"], 15 | ["[", "]"] 16 | ], 17 | // symbols that can be used to surround a selection 18 | "surroundingPairs": [ 19 | ["(", ")"], 20 | ["\"", "\""], 21 | ["'", "'"], 22 | ["[", "]"] 23 | ] 24 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/dflat_programming_language/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "dflat_programming_language", 3 | "displayName": "dflat programming language", 4 | "description": "Syntax highlighting for the dflat programming language", 5 | "version": "0.0.1", 6 | "engines": { 7 | "vscode": "^1.63.0" 8 | }, 9 | "categories": [ 10 | "Programming Languages" 11 | ], 12 | "contributes": { 13 | "languages": [{ 14 | "id": "dflat", 15 | "aliases": ["dflat", "dflat"], 16 | "extensions": [".prg"], 17 | "configuration": "./language-configuration.json" 18 | }], 19 | "grammars": [{ 20 | "language": "dflat", 21 | "scopeName": "source.prg", 22 | "path": "./syntaxes/dflat.tmLanguage.json" 23 | }] 24 | } 25 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/e-_programming_language/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ] 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/e-_programming_language/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .gitignore 4 | vsc-extension-quickstart.md 5 | -------------------------------------------------------------------------------- /Oric/vsc-lang/e-_programming_language/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": "//" 5 | }, 6 | // symbols used as brackets 7 | "brackets": [ 8 | ["(", ")"] 9 | ], 10 | // symbols that are auto closed when typing 11 | "autoClosingPairs": [ 12 | ["(", ")"], 13 | ["\"", "\""], 14 | ["'", "'"] 15 | ], 16 | // symbols that can be used to surround a selection 17 | "surroundingPairs": [ 18 | ["(", ")"], 19 | ["\"", "\""], 20 | ["'", "'"] 21 | ] 22 | } -------------------------------------------------------------------------------- /Oric/vsc-lang/e-_programming_language/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "e-_programming_language", 3 | "displayName": "e- programming language", 4 | "description": "Syntax highlighting for the e- programming language", 5 | "version": "0.0.1", 6 | "engines": { 7 | "vscode": "^1.63.0" 8 | }, 9 | "categories": [ 10 | "Programming Languages" 11 | ], 12 | "contributes": { 13 | "languages": [{ 14 | "id": "e-", 15 | "aliases": ["e-", "e-"], 16 | "extensions": [".e-"], 17 | "configuration": "./language-configuration.json" 18 | }], 19 | "grammars": [{ 20 | "language": "e-", 21 | "scopeName": "source.e-", 22 | "path": "./syntaxes/e-.tmLanguage.json" 23 | }] 24 | } 25 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About Oric 2 | I've owned the same Oric-1 since 1983 (my first computer!) and thought it was well enough known.. but apparently not! 3 | 4 | So for the unitiated, the Oric-1 was a low cost microcomputer designed and built in the UK as a competitor to the ZX Spectrum. 5 | 6 | For more information please see: https://en.wikipedia.org/wiki/Oric 7 | 8 | 9 | # For the impatient (like me)! 10 | If you want to get dflat running quickly: 11 | * Go to the `Oric/emulator` folder 12 | * `oricutron.exe` 13 | * The emulator will start with Oric dflat as the default 14 | 15 | In dflat, try a game 16 | * Hit F1 on PC and press 'T' 17 | * At the file dialog, navigate to `software/dflat/games` and select any .tap file 18 | * type : `tload "tetris.tap"` 19 | * Oric will load the program and start it automatically 20 | * Turn *off* music by pressing left cursor! 21 | 22 | Keys: 23 | * Space starts the game 24 | * Left and Right cursor moves left and right. 25 | * Down cursor rapidly drops the shape 26 | * Space rotates the shape clockwise 27 | * On highscore table, Up/Down changes the initial, right moves to next, space is done. 28 | 29 | 30 | # Quick start for LOCI users 31 | If you are lucky to have a LOCI device, please follow these instructions to get going quickly: 32 | * copy the `dfloci.rom` file in `Oric/dflat/rom` to your SD card 33 | * copy the `dflat` folder in `Oric/software/` to the root of your SD card 34 | * In LOCI, select the dfloci.rom file on your SD card and reboot 35 | * Now in dflat if you type `dir` you will see folders in the `dflat` folder of your SD card 36 | * Type `tload "file"` to load a file. If the file is directory then dflat changes to that directory 37 | * Only files with extension `.tap` can be loaded with tload - these are dflat programs 38 | * From the root, enter `tload "games"` to change to the games folder 39 | * Now type `tload "tetris.tap"` to load the tetris game - the rest is as above. 40 | 41 | 42 | # Note: Wiki 43 | A friend recommended that I should point out there is a fairly extensive wiki on dflat. 44 | 45 | So after reading this, please have a look through the wiki to really get a feel for this language targeted at constrained 8-bit machinees. 46 | 47 | https://github.com/6502Nerd/dflat/wiki 48 | 49 | 50 | # About dflat 51 | dflat is a BASIC-like language for 8-bit micros and retro computers running on 6502 and 65c02. Key features & highlights; 52 | * Procedure orientated structure (all runnable code within def..enddef blocks) 53 | * Local variables - supports recursion 54 | * Structured programming including if..elif..endif, while..wend, repeat..until 55 | * Line numbers only used for sequencing lines, but cannot be referenced - no goto or gosub! 56 | * Support for sound and graphics 57 | * Inline assembler that can access dflat variables and vice-versa 58 | * Fits in to 16KB ROM (including all low-level BIOS) 59 | * Core language can be ported easily - just needs character put and get routines for input/output 60 | 61 | Here is hello world in dflat: 62 | * `10 def_hello()` 63 | * `20 println "Hello world!"` 64 | * `30 enddef` 65 | * `_hello()` [immediately invokes the procedure called _hello] 66 | 67 | The base version here is targeted for the Oric-1 and Atmos computers from the early 80s and due to being integer only and tokenisation, is much faster than Oric BASIC. 68 | 69 | I am in continual refinement and documentation mode as this is an on-going project for my personal enjoyment. Please see the wiki pages for details of the language. 70 | 71 | The source and binaries are in the Oric folder - the readme.txt provides a guide to try dflat rather wihtout building it from scratch but also describes all folder/contents in this repo. 72 | -------------------------------------------------------------------------------- /wiki-files/hires-line-circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/wiki-files/hires-line-circle.png -------------------------------------------------------------------------------- /wiki-files/plot-scrn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/wiki-files/plot-scrn.png -------------------------------------------------------------------------------- /wiki-files/readme.txt: -------------------------------------------------------------------------------- 1 | Files to support the wiki documentation go here e.g. screenshots. 2 | -------------------------------------------------------------------------------- /wiki-files/sprite-example-1.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/6502Nerd/dflat/a7b520397bcb90f3061f0af3aadefce147c2a003/wiki-files/sprite-example-1.mp4 --------------------------------------------------------------------------------