From af920fb30cd317ba225e0a52d54e8358f8f1bd93 Mon Sep 17 00:00:00 2001 From: Carsten Strotmann Date: Tue, 30 Jun 2020 10:22:57 +0200 Subject: [PATCH] Atari Portfolio Additions --- msdos/AtariPortfolio/README.org | 22 ++++++++++++++++++++++ msdos/AtariPortfolio/kernel.com | Bin 0 -> 15874 bytes msdos/AtariPortfolio/pofo.fb | 1 + msdos/AtariPortfolio/pofo.sys | 1 + msdos/AtariPortfolio/pofo.vid | 1 + msdos/AtariPortfolio/pofo4th.com | Bin 0 -> 25381 bytes 6 files changed, 25 insertions(+) create mode 100644 msdos/AtariPortfolio/README.org create mode 100644 msdos/AtariPortfolio/kernel.com create mode 100644 msdos/AtariPortfolio/pofo.fb create mode 100644 msdos/AtariPortfolio/pofo.sys create mode 100644 msdos/AtariPortfolio/pofo.vid create mode 100644 msdos/AtariPortfolio/pofo4th.com diff --git a/msdos/AtariPortfolio/README.org b/msdos/AtariPortfolio/README.org new file mode 100644 index 0000000..9d0c5ff --- /dev/null +++ b/msdos/AtariPortfolio/README.org @@ -0,0 +1,22 @@ +#+Title: VolksForth MS-DOS for Atari Portfolio + +The Atari Portfolio is a portable, MS-DOS compatible palmtop computer +released by Atari in 1989 +(https://en.wikipedia.org/wiki/Atari_Portfolio). + +The Portfolio uses an Intel 80C88 CPU running at 4.9152 MHz and runs +"DIP Operating System 2.11" (DIP DOS), an operating system mostly +compatible to MS-DOS 2.11, but with some DOS 2.xx functionality +lacking and some internal data structures more compatible with DOS +3.xx. It has 128 KB of RAM and 256 KB of ROM which contains the OS and +built-in applications. The on-board RAM is divided between system +memory and local storage (the C: drive). The LCD is monochrome without +backlight and had 240×64 pixels or 40 characters × 8 lines. + +* Files: + + * =pofo.fb= - Atari Portfolio System Enhancements + * =pofo.vid= - Atari Portfolio Video Driver (for 40x8 line display) + * =pofo.sys= - load file to generate a full VolksForth for the Atari Portfolio + * =kernel.com= - Vanilla VolksForth Kernel + * =pofo4th.com= - VolksForth for Atari Portfolio diff --git a/msdos/AtariPortfolio/kernel.com b/msdos/AtariPortfolio/kernel.com new file mode 100644 index 0000000000000000000000000000000000000000..f6f094f8260a7496cf6276344b682965f21d607e GIT binary patch literal 15874 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 0=EXIT CR ; : WORDS [COMPILE] ASCII CAPITAL >R CONTEXT @ BEGIN @ DUP STOP? 0= AND WHILE ?CR DUP 2+ R@ BL = OVER 1+ C@ R@ = OR IF .name space ELSE DROP THEN REPEAT DROP RDROP ; IMMEDIATE : POFOLOGO PAGE ." volksFORTH-83 3.81" CR ." Atari Portfolio" CR [ errorhandler ] Literal @ errorhandler ! ['] noop Is 'abort end-trace clearstack standardi/o interpret quit ; .( loaded ) CR \ No newline at end of file diff --git a/msdos/AtariPortfolio/pofo.sys b/msdos/AtariPortfolio/pofo.sys new file mode 100644 index 0000000..aa2cc40 --- /dev/null +++ b/msdos/AtariPortfolio/pofo.sys @@ -0,0 +1 @@ +\\ Startup: Load Standard System cas 14nov05 This file contains commands to create an Atari Portfolio adaptedversion of volksFORTH from KERNEL.COM The new system will be saved as "POFO4TH.COM". \ System LOAD-Screen for MS-DOS volksFORTH cas 15nov05 Onlyforth warning off &08 ' c/col >body ! &40 ' c/row >body ! cr .( creating Atari Portfolio System... ) cr include asm.fb include extend.fb include pofo.vid 0 0 AT include pofo.fb +stat include dos.fb \ include tasker.fb \ include timer.fb include tools.fb \ include editor.fb include primed.fb warning on clear status on .status ' pofologo is 'cold savesystem pofo4th.com bell .( new system saved as POFO4TH.COM ) cr \ No newline at end of file diff --git a/msdos/AtariPortfolio/pofo.vid b/msdos/AtariPortfolio/pofo.vid new file mode 100644 index 0000000..78aba4b --- /dev/null +++ b/msdos/AtariPortfolio/pofo.vid @@ -0,0 +1 @@ + This video display interface utilizes the ROM BIOS call $10. The display is fairly fast and should work on most IBM compatible computers \ BIOS display interface cas 15nov05 Onlyforth \needs Assembler 2 loadfrom asm.fb Variable dpage dpage off Variable top top off Variable status status off Code (at ( lin col -- ) A pop R push U push dpage #) R+ mov A- D+ mov 2 # A+ mov $10 int U pop R pop D pop Next end-code Code (at? ( -- lin col ) D push R push U push dpage #) R+ mov 3 # A+ mov $10 int U pop R pop D+ A- mov 0 # A+ mov A+ D+ mov A push Next end-code 1 6 +thru .( BIOS display interface active) cr \ BIOS normal invers blankline cas 15nov05 : full top off ; Variable attribut 7 attribut ! : normal ; : invers ; : underline ; : bright ; Code blankline D push R push U push dpage #) R+ mov attribut #) R- mov 3 # A+ mov $10 int ' c/row >body #) C mov D- C- sub bl # A- mov 9 # A+ mov $10 int U pop R pop D pop Next end-code | : lineerase 0 (at blankline ; \\ curshape setpage curat? cas 14nov05 Code curshape ( top bot -- ) D C mov D pop D- C+ mov 1 # A+ mov $10 int D pop Next end-code Code setpage ( n -- ) $503 # A mov D- A- and $10 int D pop Next end-code ' (at? Alias curat? \ BIOS (type (emit cas 14nov05 Code (type ( addr len -- ) W pop R push U push D U mov dpage #) R+ mov attribut #) R- mov 3 # A+ mov $10 int U inc C push $E0E # C mov 1 # A+ mov $10 int 1 # C mov [[ U dec 0= not ?[[ D- inc ' c/row >body #) D- cmp 0= not ?[[ W ) A- mov W inc 9 # A+ mov $10 int 2 # A+ mov $10 int ]]? ]? C pop 1 # A+ mov $10 int U pop R pop D pop ' pause #) jmp end-code : (emit ( char -- ) sp@ 1 (type drop ; \ BIOS (del scroll (cr (page cas 15nov05 : (del (at? ?dup IF 1- 2dup (at bl (emit (at exit THEN drop ; Code scroll D push R push U push attribut #) R+ mov top #) C+ mov 0 # C- mov ' c/row >body #) D- mov D- dec ' c/col >body #) D+ mov D+ dec status #) D+ add $601 # A mov $10 int U pop R pop D pop Next end-code : (cr (at? drop 1+ dup 2+ c/col status @ 1+ + u> IF scroll drop c/col 1- status @ + THEN lineerase ; : (page top @ c/col 2- DO I lineerase -1 +LOOP ; \ BIOS status display cas 15nov05 ' (emit ' display 2 + ! ' (cr ' display 4 + ! ' (type ' display 6 + ! ' (del ' display 8 + ! ' (page ' display &10 + ! ' (at ' display &12 + ! ' (at? ' display &14 + ! ' (at? alias curat? : .sp ( n -- ) ." s" depth swap 1+ - 2 .r ; : .base base @ decimal dup 2 .r base ! ; : (.drv ( n -- ) Ascii A + emit ." : " ; : .dr ." " drv (.drv ; : .scr blk @ IF ." Blk" blk ELSE ." Scr" scr THEN @ 5 .r ; : .space ." D" s0 @ here $100 + - 6 u.r ; \ statuszeile cas 15nov05 | : fstat ( n -- ) .base .sp .space .scr .dr file? ; : .stat output @ (at? c/col 1- 0 (at status @ IF 3 fstat THEN over c/col 1- < IF blankline THEN (at output ! ; : +stat ['] .stat Is .status .status ; : -stat ['] noop Is .status ; \ No newline at end of file diff --git a/msdos/AtariPortfolio/pofo4th.com b/msdos/AtariPortfolio/pofo4th.com new file mode 100644 index 0000000000000000000000000000000000000000..244939dd79673c62d6de2b6482cac6bb71efde17 GIT binary patch literal 25381 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