From e18014a8a756a3a4034994229153d0161b277f86 Mon Sep 17 00:00:00 2001 From: Wayne Warthen Date: Sat, 10 Feb 2024 13:11:09 -0800 Subject: [PATCH] Added Cowgol Disk Image - Credit and thanks to Ladislau Szilagyi. Co-Authored-By: ladislau szilagyi <87603175+laci1953@users.noreply.github.com> --- Doc/ChangeLog.txt | 1 + Doc/RomWBW Applications.pdf | Bin 239632 -> 239633 bytes Doc/RomWBW Disk Catalog.pdf | Bin 123540 -> 123541 bytes Doc/RomWBW Errata.pdf | Bin 28721 -> 28692 bytes Doc/RomWBW ROM Applications.pdf | Bin 155018 -> 155018 bytes Doc/RomWBW System Guide.pdf | Bin 567579 -> 567580 bytes Doc/RomWBW User Guide.pdf | Bin 777821 -> 778055 bytes ReadMe.md | 8 +- ReadMe.txt | 8 +- Source/Doc/ReadMe.md | 6 + Source/Doc/UserGuide.md | 6 + Source/Images/Build.cmd | 4 + Source/Images/Makefile | 9 +- Source/Images/d_cowgol/Readme.txt | 45 +++++ Source/Images/d_cowgol/u0/$EXEC.COM | Bin 0 -> 1152 bytes Source/Images/d_cowgol/u0/ARGV.COH | 48 +++++ Source/Images/d_cowgol/u0/CGEN.COM | Bin 0 -> 44288 bytes Source/Images/d_cowgol/u0/COMMFILE.COH | 27 +++ Source/Images/d_cowgol/u0/COMMON.COH | 150 ++++++++++++++++ Source/Images/d_cowgol/u0/COWBE.COM | Bin 0 -> 30336 bytes Source/Images/d_cowgol/u0/COWFE.COM | Bin 0 -> 36096 bytes Source/Images/d_cowgol/u0/COWFIX.COM | Bin 0 -> 11776 bytes Source/Images/d_cowgol/u0/COWGOL.COH | 52 ++++++ Source/Images/d_cowgol/u0/COWGOL.COM | Bin 0 -> 19840 bytes Source/Images/d_cowgol/u0/COWGOL.COO | Bin 0 -> 8396 bytes Source/Images/d_cowgol/u0/COWGOLC.COH | 52 ++++++ Source/Images/d_cowgol/u0/COWLINK.COM | Bin 0 -> 7808 bytes Source/Images/d_cowgol/u0/CPP.COM | Bin 0 -> 28544 bytes Source/Images/d_cowgol/u0/DYNMSORT.COW | 78 ++++++++ Source/Images/d_cowgol/u0/DYNMSORT.SUB | 2 + Source/Images/d_cowgol/u0/FILE.COH | 200 +++++++++++++++++++++ Source/Images/d_cowgol/u0/FILEIO.COH | 121 +++++++++++++ Source/Images/d_cowgol/u0/HEXDUMP.COW | 115 ++++++++++++ Source/Images/d_cowgol/u0/HEXDUMP.SUB | 2 + Source/Images/d_cowgol/u0/LIBC.LIB | Bin 0 -> 82816 bytes Source/Images/d_cowgol/u0/LINK.COM | Bin 0 -> 30080 bytes Source/Images/d_cowgol/u0/MALLOC.COH | 237 +++++++++++++++++++++++++ Source/Images/d_cowgol/u0/MERGES.C | 78 ++++++++ Source/Images/d_cowgol/u0/OPTIM.COM | Bin 0 -> 28160 bytes Source/Images/d_cowgol/u0/P1.COM | Bin 0 -> 39936 bytes Source/Images/d_cowgol/u0/RAND.AS | 52 ++++++ Source/Images/d_cowgol/u0/STDCOW.COH | 91 ++++++++++ Source/Images/d_cowgol/u0/STRINGS.COH | 63 +++++++ Source/Images/d_cowgol/u0/Z80AS.COM | Bin 0 -> 25856 bytes Source/ver.inc | 2 +- Source/ver.lib | 2 +- 46 files changed, 1451 insertions(+), 8 deletions(-) create mode 100644 Source/Images/d_cowgol/Readme.txt create mode 100644 Source/Images/d_cowgol/u0/$EXEC.COM create mode 100644 Source/Images/d_cowgol/u0/ARGV.COH create mode 100644 Source/Images/d_cowgol/u0/CGEN.COM create mode 100644 Source/Images/d_cowgol/u0/COMMFILE.COH create mode 100644 Source/Images/d_cowgol/u0/COMMON.COH create mode 100644 Source/Images/d_cowgol/u0/COWBE.COM create mode 100644 Source/Images/d_cowgol/u0/COWFE.COM create mode 100644 Source/Images/d_cowgol/u0/COWFIX.COM create mode 100644 Source/Images/d_cowgol/u0/COWGOL.COH create mode 100644 Source/Images/d_cowgol/u0/COWGOL.COM create mode 100644 Source/Images/d_cowgol/u0/COWGOL.COO create mode 100644 Source/Images/d_cowgol/u0/COWGOLC.COH create mode 100644 Source/Images/d_cowgol/u0/COWLINK.COM create mode 100644 Source/Images/d_cowgol/u0/CPP.COM create mode 100644 Source/Images/d_cowgol/u0/DYNMSORT.COW create mode 100644 Source/Images/d_cowgol/u0/DYNMSORT.SUB create mode 100644 Source/Images/d_cowgol/u0/FILE.COH create mode 100644 Source/Images/d_cowgol/u0/FILEIO.COH create mode 100644 Source/Images/d_cowgol/u0/HEXDUMP.COW create mode 100644 Source/Images/d_cowgol/u0/HEXDUMP.SUB create mode 100644 Source/Images/d_cowgol/u0/LIBC.LIB create mode 100644 Source/Images/d_cowgol/u0/LINK.COM create mode 100644 Source/Images/d_cowgol/u0/MALLOC.COH create mode 100644 Source/Images/d_cowgol/u0/MERGES.C create mode 100644 Source/Images/d_cowgol/u0/OPTIM.COM create mode 100644 Source/Images/d_cowgol/u0/P1.COM create mode 100644 Source/Images/d_cowgol/u0/RAND.AS create mode 100644 Source/Images/d_cowgol/u0/STDCOW.COH create mode 100644 Source/Images/d_cowgol/u0/STRINGS.COH create mode 100644 Source/Images/d_cowgol/u0/Z80AS.COM diff --git a/Doc/ChangeLog.txt b/Doc/ChangeLog.txt index 7ecfa285..9c2c3b26 100644 --- a/Doc/ChangeLog.txt +++ b/Doc/ChangeLog.txt @@ -9,6 +9,7 @@ Version 3.5 - WBW: Added console takeover at boot loader prompt - L?N: Fixed Propeller font vertical line character to align properly - L?S: EF9345 video display controller driver +- WBW: Added Cowgol disk image based on the work of Ladislau Szilagyi Version 3.4 ----------- diff --git a/Doc/RomWBW Applications.pdf b/Doc/RomWBW Applications.pdf index 06ed5b7916a78b3eaa828a9cfa649c3dc7da74cd..fc9dc2871c082bc7e8892999075a7680a5e9210e 100644 GIT binary patch delta 12555 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 BS^NM1 delta 14745 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 delta 4745 zcmai1duY~W6z-ez(pM@|!!nIEwa6~M_xHS_v$lO&(nX;}=t72<$`W1El9FFxf~!y` z&W}=r;lxsljC7e%32IiP^ER4>8Dc0itt~GkUCy^}-|ZZs{k5IFmvf%?d7g8A^}Bnn z+}(5e>=-0>HpFhId-IOygN~2CIXU;O->>b}x7$-w4vs8}b)R3?ulSEX{dZn@?(!{r z8_F9#tLdnoGPG^ak(0G2F5A&<$Cmc#eW7{hzVGME8#`n9*@;Etrv8g zL)7ic3p=*OKVQ9Z>jc}}G`RMS16z76Ti9pW+3KZVPrmNg`g1?*YHXRgxYo9Axwpr* z#&v5~oa@)N_wjyZe#KwsLF??{+D^X4JXXmRUt()^Gpt@{F?0jjuhi z@RZM)_O!O@FZBu`73Vua8$8|8d~< z$@>@dU2yTwnX48b+&}Zw#rEa{(~it4K6q!c{pd>3BoniiKJfFQ9Z#Ph*}CcPAb^pmdzjeTMyT}vGUm4hll!Co38(Aa>I867L^n=l@!HZ z-`7ic8HBVZ`EGOU=GlQ#!je-ua6VE*Kh)#5#+ppUnS!NJ$dAv+u5~@%&<7m7seuSTPqtNvML>?BXC@4uvRfoXUcwdRIX)xU?2biW(J5xuAm4 zG^SOMEEcJdvBC@rNd5p+V(58+R;Q8F6fLc#%vF~zPNN~Qb=K(=XHxiQE*9E*W~~~Z ziSh%52$T!jyFk|&;TZ}>psC~(k=CC^Gox7>^wGS9ojOJ5Vp233xWj43DmDTXMb+pC z#hA+`eTkPmYsZ_Y(Sec6U<0H)vgix+>8$7?A=aOT-+09`v?zDJSu?w}$}r=yN-@b| zG9ka|(1Niz#fC1VL+&H7sV>Xkvqic*Ovg%EV$9%g;LXP8Ncr@9C6a zBt%1ZESVs?=71;%zmtLK9S@|ooN5uwf-yZdWI3am-kp+#GEU)-ZB|kLcG$64b;b!w zF6WVj1Zo`2=m>{*cs77IuOyrQFzES#TGN=v;f%h!!vT;=76r?^ADtqDLT>(ZAuz&u zWm$C|nNGdJ3&|Q5?&V1vAOuGIy>ZOpaNuHDVrG(J>OHn6I{)E; z3|1e2@xuqlRFZOU$|D>ht`ZAbugJ`Qs0Th+_<*;N>HwXKZ~+y;rHELuLNG>cIl|4r zAOxYAF90?U;sLnVvjGIxG0uQ+v~A;Fhr?}h(eYSG#2634(-w>yY@qVP@s9Nh5Fx+A zrMwFF8fHwmE~L@TGa-z%cm*$QF_{ zA>0hqIwewpl2HnzGE)KCGeHK|X)05U(PSbdh+$JM&Vj7!As5tDqW}N^ diff --git a/Doc/RomWBW Errata.pdf b/Doc/RomWBW Errata.pdf index 2fbfbd0e4538f41229fd13650e86f78e235ad9a5..739800441a9f8a2971ddf6216e897eea3809a2a3 100644 GIT binary patch delta 8973 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 diff --git a/Doc/RomWBW ROM Applications.pdf b/Doc/RomWBW ROM Applications.pdf index a94bdee89d254cd43277c092208127de2e00c428..6d8aef71bf24cac1e367aef55203e4fdb0718613 100644 GIT binary patch delta 536 zcmeC$&Dph^b3$9aum52Kp1t40pYZGa(3YPTpn8g}NqU9(5zfxJYApZ%H*8*#Yo-`g znJ0Ao{m+}s}5;d zf73lTcFVk-wr029TN8eBeoxue?0h13|LlxQNYj^)<*wdR{rTkHyG->3EZ3TE?ydD_ z5b2h`|NQx^u0`yR8fvwIJ|21_aiCzA&w*`6E#7%tDbwgV@~qipvsP;Uv@AZ)x;F1%q+R!PV!=GeyfZcd*UO;eg?QhUou?WX1}Jt>Y?Y)vnOqyDt| zWm!cUb6iNjTXHF?`AOgIXUV3L?t16e;^y^8O4!@ybETqEy)fs^&7qM}b7xk~ zJU{hWP%f+H)M>|VMu{sfYm(%ed}YajYpi!~gzvm|;-%43%b;^Q+DqprKmPXX#zmFO z+Ll`k&+IZ&_37^2XtLbn{^i|C`q$sQp7Q7X?$oDmUtKv7_mA;t+sR{Yll?2RGcupm zO3oI!(Pn%?iG4X+*Hx>7Ra1`2KYJ)%mVUveS%#@yhKX^z3=`8YYYsyLLt_IAV}r>X zn8kUFObm=*0^1$!m|n;^yO>#+89Es|xf;3{n3_8pySN${xSALlfH)Q|78Z62HiVQ+ J&xvJ{0{}4L?2!Nf delta 536 zcmeC$&Dph^b3$9axBp=So_*iLpYZGanA)xy(z&Ve0oyCyLZ_tVoCp8gKhVjX?b{JH z@AZ-X^Yd*B+}Yn1HfZ;Ly!*1@cUh;eW z!=v|}W^GToTbjANaz~}ds|eeI1uveRH*J`?H=#u5&BaI0CRgufeNfM_hJAAN?|BRw zVz&FvpEnhC=2-WGhkLpjiTp@GnBzDq}TP1);dWT^Zki@lpG zWm42#pS}aa#!L6DW2n6PV#OEsU1IyBIeojMx*{%p$>g4qvOQyYhHJofr4GA=KjS|v zIX0QMnW6StulibBk9QlgH(qBdtM9&?bn$M-1qaWV+N96gR{9Q4@)Z=Tx9Oc;U>xlK zdFSPrU29#vmZuh^y>>bx>8arnw3z9(NQra&%P8CBr>CU*TP|KRp{|ej_UmN!$vx|z zT)1ZN+G>h{uF)~0IZn0w@45EIEM6b|$^PB6soO8CY~1^Yxl4EQ+FrH!pUf^8o%y{@ zQgegua??969$e{4n%cKv->F6XpFeO<@VwyJEW^|;!^F5=bMW LDVd%V%OnQ?%**So diff --git a/Doc/RomWBW System Guide.pdf b/Doc/RomWBW System Guide.pdf index b6feccba1bd750599cb54800d74cea08759520c4..af776ef22449aecbfe6b585f115d5366d62fce02 100644 GIT binary patch delta 20220 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 diff --git a/ReadMe.md b/ReadMe.md index b9519a38..a643c2fb 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -3,7 +3,7 @@ **RomWBW ReadMe** \ Version 3.5 \ Wayne Warthen ([wwarthen@gmail.com](mailto:wwarthen@gmail.com)) \ -07 Feb 2024 +10 Feb 2024 # Overview @@ -223,6 +223,12 @@ let me know if I missed you! - Bill Shen has contributed boot loaders for several of his systems. +- Laszlo Szolnoki has contributed an EF9345 video display controller + driver. + +- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol + that leverages RomWBW memory banking. + Contributions of all kinds to RomWBW are very welcome. # Licensing diff --git a/ReadMe.txt b/ReadMe.txt index 3348ae59..bf941f96 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -1,6 +1,6 @@ RomWBW ReadMe Wayne Warthen (wwarthen@gmail.com) -07 Feb 2024 +10 Feb 2024 @@ -224,6 +224,12 @@ let me know if I missed you! - Bill Shen has contributed boot loaders for several of his systems. +- Laszlo Szolnoki has contributed an EF9345 video display controller + driver. + +- Ladislau Szilagyi has contributed an enhanced version of CP/M Cowgol + that leverages RomWBW memory banking. + Contributions of all kinds to RomWBW are very welcome. diff --git a/Source/Doc/ReadMe.md b/Source/Doc/ReadMe.md index 4565bb8a..81a18cf7 100644 --- a/Source/Doc/ReadMe.md +++ b/Source/Doc/ReadMe.md @@ -214,6 +214,12 @@ please let me know if I missed you! * Bill Shen has contributed boot loaders for several of his systems. +* Laszlo Szolnoki has contributed an EF9345 video display + controller driver. + +* Ladislau Szilagyi has contributed an enhanced version of + CP/M Cowgol that leverages RomWBW memory banking. + Contributions of all kinds to RomWBW are very welcome. # Licensing diff --git a/Source/Doc/UserGuide.md b/Source/Doc/UserGuide.md index ce441935..bb8a2cfa 100644 --- a/Source/Doc/UserGuide.md +++ b/Source/Doc/UserGuide.md @@ -4017,6 +4017,12 @@ please let me know if I missed you! * Bill Shen has contributed boot loaders for several of his systems. +* Laszlo Szolnoki has contributed an EF9345 video display + controller driver. + +* Ladislau Szilagyi has contributed an enhanced version of + CP/M Cowgol that leverages RomWBW memory banking. + Contributions of all kinds to RomWBW are very welcome. # Licensing diff --git a/Source/Images/Build.cmd b/Source/Images/Build.cmd index d7776994..c19abf07 100644 --- a/Source/Images/Build.cmd +++ b/Source/Images/Build.cmd @@ -22,6 +22,8 @@ call BuildDisk.cmd tpascal hd wbw_fd144 || exit /b call BuildDisk.cmd bascomp hd wbw_fd144 || exit /b call BuildDisk.cmd fortran hd wbw_fd144 || exit /b call BuildDisk.cmd games hd wbw_fd144 || exit /b +call BuildDisk.cmd cowgol hd wbw_fd144 || exit /b + echo. echo Building Hard Disk Images (512 directory entry format)... @@ -42,6 +44,7 @@ call BuildDisk.cmd tpascal hd wbw_hd512 || exit /b call BuildDisk.cmd bascomp hd wbw_hd512 || exit /b call BuildDisk.cmd fortran hd wbw_hd512 || exit /b call BuildDisk.cmd games hd wbw_hd512 || exit /b +call BuildDisk.cmd cowgol hd wbw_hd512 || exit /b echo. echo Building Combo Disk (512 directory entry format) Image... @@ -65,6 +68,7 @@ call BuildDisk.cmd tpascal hd wbw_hd1k || exit /b call BuildDisk.cmd bascomp hd wbw_hd1k || exit /b call BuildDisk.cmd fortran hd wbw_hd1k || exit /b call BuildDisk.cmd games hd wbw_hd1k || exit /b +call BuildDisk.cmd cowgol hd wbw_hd1k || exit /b if exist ..\BPBIOS\bp*.rel call BuildDisk.cmd bp hd wbw_hd1k ..\zsdos\zsys_wbw.sys || exit /b diff --git a/Source/Images/Makefile b/Source/Images/Makefile index 1a9cf1ba..45425599 100644 --- a/Source/Images/Makefile +++ b/Source/Images/Makefile @@ -7,18 +7,19 @@ FDIMGS = fd144_cpm22.img fd144_zsdos.img fd144_nzcom.img \ fd144_cpm3.img fd144_zpm3.img fd144_ws4.img fd144_qpm.img \ fd144_z80asm.img fd144_aztecc.img fd144_hitechc.img \ fd144_bascomp.img fd144_fortran.img fd144_games.img \ - fd144_tpascal.img + fd144_tpascal.img fd144_cowgol.img HD512IMGS = hd512_cpm22.img hd512_zsdos.img hd512_nzcom.img \ hd512_cpm3.img hd512_zpm3.img hd512_ws4.img HD512XIMGS = hd512_z80asm.img hd512_aztecc.img hd512_hitechc.img \ hd512_bascomp.img hd512_fortran.img hd512_games.img \ - hd512_tpascal.img hd512_dos65.img hd512_qpm.img hd512_blank.img -# HDIMGS += hd512_bp.img + hd512_tpascal.img hd512_dos65.img hd512_qpm.img \ + hd512_cowgol.img hd512_blank.img HD1KIMGS = hd1k_cpm22.img hd1k_zsdos.img hd1k_nzcom.img \ hd1k_cpm3.img hd1k_zpm3.img hd1k_ws4.img HD1KXIMGS = hd1k_z80asm.img hd1k_aztecc.img hd1k_hitechc.img \ hd1k_bascomp.img hd1k_fortran.img hd1k_games.img \ - hd1k_tpascal.img hd1k_qpm.img hd1k_blank.img + hd1k_tpascal.img hd1k_qpm.img \ + hd1k_cowgol.img hd1k_blank.img HD1KXIMGS += hd1k_bp.img HD512PREFIX = diff --git a/Source/Images/d_cowgol/Readme.txt b/Source/Images/d_cowgol/Readme.txt new file mode 100644 index 00000000..9ca93a51 --- /dev/null +++ b/Source/Images/d_cowgol/Readme.txt @@ -0,0 +1,45 @@ +===== Cowgol 2.0 for CP/M ===== + +This disk contains the Cowgol 2.0 compiler and related tools. +These files were provided by Ladislau Szilagyi and were sourced +from his GitHub repository at https://github.com/Laci1953/Cowgol_on_CP_M. + +The COWFE program included here is the RomWBW-specific version that +is tailored to RomWBW memory management. + +The primary distribution site for Cowgol 2.0 is at +https://github.com/davidgiven/cowgol. + +The Hi-Tech C compiler components were sourced from the updated +version by Tony Nicholson at https://github.com/agn453/HI-TECH-Z80-C. +However, the CPP.COM component was sourced from Ladislau Szilagyi's +enhanced Hi-Tech C at https://github.com/Laci1953/HiTech-C-compiler-enhanced. + +Note that only the minimum required Hi-Tech C compiler components +are provided. Additional components from Hi-Tech C may be required +depending on your needs. + +There are two example Cowgol applications included: + +- HEXDUMP is a simple hex dump utility and is purely a Cowgol + application (no assembler or C components). The command + line to build the application is: + + COWGOL HEXDUMP.COW + +- DYNMSORT demonstrates a sort algorithm and is composed of + Cowgol, C, and assembler components. The command line to + build the application is: + + COWGOL -LC DYNMSORT.COW MERGES.C RAND.AS + +There are also SUBMIT files provided to build the example +applications which can be used as follows: + + SUBMIT HEXDUMP + SUBMIT DYNMSORT + +-- WBW 12:38 PM 2/10/2024 + + + diff --git a/Source/Images/d_cowgol/u0/$EXEC.COM b/Source/Images/d_cowgol/u0/$EXEC.COM new file mode 100644 index 0000000000000000000000000000000000000000..a6ae8f5114e29c25985bd95706879aafb3809b22 GIT binary patch literal 1152 zcmd5)Ux-X$6#vdSpV{5ZUUOSCgYwZ{36z$s+})z;6NyNhgA1NnKLpX zIG7E;`jgGz6oX@^W=5o}RlkAy*z{gY0EbeR|Esgg6p*qw&T^&2k28YL|0!1Pf!Atv z{2wa{QZOacpL zK^4pc85)Tan literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/ARGV.COH b/Source/Images/d_cowgol/u0/ARGV.COH new file mode 100644 index 00000000..64429e99 --- /dev/null +++ b/Source/Images/d_cowgol/u0/ARGV.COH @@ -0,0 +1,48 @@ +var argv_pointer: [uint8]; + +sub ArgvInit() is + argv_pointer := 0x81 as [uint8]; + [argv_pointer + [0x80 as [uint8]] as intptr] := 0; +end sub; + +# Returns null is there's no next argument. +sub ArgvNext(): (arg: [uint8]) is + # No more arguments? + + if argv_pointer == (0 as [uint8]) then + arg := argv_pointer; + return; + end if; + + # Skip leading whitespace. + + var c: uint8; + loop + c := [argv_pointer]; + if c != ' ' then + break; + end if; + argv_pointer := argv_pointer + 1; + end loop; + + arg := argv_pointer; + + # Skip to end of word and terminate. + + loop + c := [argv_pointer]; + if (c == ' ') or (c == '\n') or (c == 0) then + break; + end if; + argv_pointer := argv_pointer + 1; + end loop; + [argv_pointer] := 0; + + if c == ' ' then + argv_pointer := argv_pointer + 1; + else + argv_pointer := 0 as [uint8]; + end if; +end sub; + + diff --git a/Source/Images/d_cowgol/u0/CGEN.COM b/Source/Images/d_cowgol/u0/CGEN.COM new file mode 100644 index 0000000000000000000000000000000000000000..fb2e377727cadb1178996a2589964ba35c1821f1 GIT binary patch literal 44288 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 literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/COMMFILE.COH b/Source/Images/d_cowgol/u0/COMMFILE.COH new file mode 100644 index 00000000..1293f598 --- /dev/null +++ b/Source/Images/d_cowgol/u0/COMMFILE.COH @@ -0,0 +1,27 @@ +sub FCBPutString(fcb: [FCB], s: [uint8]) is + loop + var c := [s]; + if c == 0 then + break; + end if; + FCBPutChar(fcb, c); + s := @next s; + end loop; +end sub; + +sub FCBGetBlock(fcb: [FCB], buffer: [uint8], length: intptr) is + while length != 0 loop; + [buffer] := FCBGetChar(fcb); + buffer := buffer + 1; + length := length - 1; + end loop; +end sub; + +sub FCBPutBlock(fcb: [FCB], buffer: [uint8], length: intptr) is + while length != 0 loop; + FCBPutChar(fcb, [buffer]); + buffer := buffer + 1; + length := length - 1; + end loop; +end sub; + diff --git a/Source/Images/d_cowgol/u0/COMMON.COH b/Source/Images/d_cowgol/u0/COMMON.COH new file mode 100644 index 00000000..a13a313e --- /dev/null +++ b/Source/Images/d_cowgol/u0/COMMON.COH @@ -0,0 +1,150 @@ +sub print(ptr: [uint8]) is + loop + var c := [ptr]; + if c == 0 then + return; + end if; + print_char(c); + ptr := ptr + 1; + end loop; +end sub; + +sub print_nl() is + print_char('\n'); +end sub; + +sub UIToA(value: uint32, base: uint8, buffer: [uint8]): (ptr: [uint8]) is + ptr := buffer; + loop + var rem := value % (base as uint32); + value := value / (base as uint32); + if rem < 10 then + rem := rem + '0'; + else + rem := rem + ('a' - 10); + end if; + [ptr] := rem as uint8; + ptr := @next ptr; + + if value == 0 then + break; + end if; + end loop; + + var s1 := buffer; + var s2 := @prev ptr; + while s2 > s1 loop + var c := [s1]; + [s1] := [s2]; + [s2] := c; + s1 := @next s1; + s2 := @prev s2; + end loop; + + [ptr] := 0; +end sub; + +sub IToA(value: int32, base: uint8, buffer: [uint8]): (ptr: [uint8]) is + if value < 0 then + [buffer] := '-'; + buffer := @next buffer; + value := -value; + end if; + ptr := UIToA(value as uint32, base, buffer); +end sub; + +sub print_i32(value: uint32) is + var buffer: uint8[12]; + var pe := UIToA(value, 10, &buffer[0]); + print(&buffer[0]); +end sub; + +sub print_i16(value: uint16) is + print_i32(value as uint32); +end sub; + +sub print_i8(value: uint8) is + print_i32(value as uint32); +end sub; + +sub print_hex_i8(value: uint8) is + var i: uint8 := 2; + loop + var digit := value >> 4; + if digit < 10 then + digit := digit + '0'; + else + digit := digit + ('a' - 10); + end if; + print_char(digit); + value := value << 4; + i := i - 1; + if i == 0 then + break; + end if; + end loop; +end sub; + +sub print_hex_i16(value: uint16) is + print_hex_i8((value >> 8) as uint8); + print_hex_i8(value as uint8); +end sub; + +sub print_hex_i32(value: uint32) is + print_hex_i8((value >> 24) as uint8); + print_hex_i8((value >> 16) as uint8); + print_hex_i8((value >> 8) as uint8); + print_hex_i8(value as uint8); +end sub; + +sub AToI(buffer: [uint8]): (result: int32, ptr: [uint8]) is + var negative: uint8 := 0; + var base: uint8 := 10; + ptr := buffer; + result := 0; + + var c := [ptr]; + if (c == '-') then + negative := 1; + ptr := ptr + 1; + c := [ptr]; + end if; + if (c == '0') then + case [ptr+1] is + when 'x': base := 16; + when 'o': base := 8; + when 'b': base := 2; + when 'd': base := 10; + + when else: ptr := ptr - 2; + end case; + ptr := ptr + 2; + c := [ptr]; + end if; + + loop + if c >= 'a' then + c := c - 'a' + 10; + elseif c >= 'A' then + c := c - 'A' + 10; + else + c := c - '0'; + end if; + if c >= (base as uint8) then + break; + end if; + result := (result * base as int32) + (c as int32); + + ptr := ptr + 1; + c := [ptr]; + end loop; + + if negative != 0 then + result := -result; + end if; +end sub; + +sub MemZero(ptr: [uint8], size: intptr) is + MemSet(ptr, 0, size); +end sub; + diff --git a/Source/Images/d_cowgol/u0/COWBE.COM b/Source/Images/d_cowgol/u0/COWBE.COM new file mode 100644 index 0000000000000000000000000000000000000000..9c300253798bc0bfccf6db4f1d3048a94814c535 GIT binary patch literal 30336 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 RB1vku^fo(T)`<$5xk3R0_ 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 Q{*FEmaVOIh!0<5tKPQQ!H~;_u literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/COWFIX.COM b/Source/Images/d_cowgol/u0/COWFIX.COM new file mode 100644 index 0000000000000000000000000000000000000000..a294951eae1c475dd1df3e830f535bd1a4056f55 GIT binary patch literal 11776 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 E-`&!>mH+?% literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/COWGOL.COH b/Source/Images/d_cowgol/u0/COWGOL.COH new file mode 100644 index 00000000..2e12ebdd --- /dev/null +++ b/Source/Images/d_cowgol/u0/COWGOL.COH @@ -0,0 +1,52 @@ +var LOMEM: [uint8]; +@asm "ld hl, LOMEM"; +@asm "ld (", LOMEM, "), hl"; + +var HIMEM: [uint8]; +@asm "ld hl, (6)"; +@asm "ld (", HIMEM, "), hl"; + +sub Exit() is + @asm "rst 0"; +end sub; + +sub ExitWithError() is + @asm "rst 0"; +end sub; + +sub AlignUp(in: intptr): (out: intptr) is + out := in; +end sub; + +sub get_char(): (c: uint8) is + @asm "ld c, 1"; + @asm "call 5"; + @asm "ld (", c, "), a"; +end sub; + +sub print_char(c: uint8) is + if c == 10 then + @asm "ld e, 13"; + @asm "ld c, 2"; + @asm "call 5"; + end if; + @asm "ld a, (", c, ")"; + @asm "ld e, a"; + @asm "ld c, 2"; + @asm "call 5"; +end sub; + +sub MemSet(buf: [uint8], byte: uint8, len: uint16) is + var bufend := buf + len; + loop + if buf == bufend then + return; + end if; + [buf] := byte; + buf := buf + 1; + end loop; +end sub; + +include "common.coh"; + + diff --git a/Source/Images/d_cowgol/u0/COWGOL.COM b/Source/Images/d_cowgol/u0/COWGOL.COM new file mode 100644 index 0000000000000000000000000000000000000000..62242090b1f9b821020c97df978a99722cb99d1b GIT binary patch literal 19840 zcmdUXdwf*Yz3-kphP;RjDDDX=duMp;ObA8_V~ofv5GDkY5Yy-_EeM)Hs!lYSG$Lfg z7QN5`lZaqg` z4uu7sEHEQ7(W=eS_h6U;ICoqYjk2Bs7AlOro7?|-E(;d0Kw;Pu=nN;T4%OzQ-#y_S zmp^qA>psuAO#QJf?%^iGt^YFRWfwPS@1jynENBz%)Vru;Z1Hfwj{S0 zUNNT0Q$L{Jk;XHsJCrzRh+_R!j%6b)HXayR+tIvZ<+6_EI~FMwuG^d4_jvBk?9R;{ zh`m&z{@817^^}`i(+ikm>g8rwA)F<)&V7e}Y4$3n2h9;Jt}j&*>EW??8^KU>tnX#x zDt&)L!c4@zg%-Td*B{7youxmN@p|Za$uYw8S53h5S4|w#b1j6aUOR0K){|tR6yO$m z#G`tNjRm_W$?i_+pU+spxJ3U_#;dj!as;g;#7p(BqQB$D8+on(H0IVit$U;OZEQgYYRF&po{b= z>^XSouN<*>et(@`sOHZbptri#2tF+ncf9Y0?~ia&Xg@nb`IuF_NGKy$2L1Ntg!g_y7!=x8;w**cTk;X9>1VgbV=sC2w;K7^Pxu!G z#Pv^Oz{A%^5oN?_g7>Rr$c^iw(I_6{`VPLOg+X{XMH^bUkA$&Uzk5>xQrF*wR@$~+ zHpF9rA~Dcj!3z{bXp@NT^+f4apM}LUp5Yx69HCov;f*jTp?@Jg$eMq2W89i&HI-&e zvDz%q6hZCvNC#(i!dY=YCEUAc1%likgB%DAx)Bfojic4gwkKJ83SyUF614~b58YG( zbG)cY1Su4@C3u8lM-QcJyOXt3FvogKwKQXGyz4z+F3=cfL35EJ9F2ty8Z2(<`@v@$ zFT@DHM8p%-??)@gNzMi_h#M89gMUIYQT@qHGAtCrg8QIg111*|ds}#`n_H$y%=-u| zzYMhWZ*H>LOHCj$9eZW3Pf?Y{B`mU=)MB?#iwCw&T|{mUNr@fR%dk(Vjz#7-*T@*F zK>xOIoMvJyYY2klh0dLbgW*OdzcSN`lkZa~&f)Kwq4IH>+vwk!5=cP7SSZOYzb~Pv zS3*r#Ac>F*K@;^1kal?B=N@9cm_nV11+{nC_S9TO-%o2CJyq&m+~g@=+?4P>?dO|) zCvEmCu7v)59~{K)=M5AHu%0*z{Ti`=%WBpmG9Dl#`o9A0r=*2~K3dvdSvJaebU^c&Odj){L;QK3Tsxs0*WUyT zJSQxAqVkRPoMoX&dO1r;6NSifj!#h++a%c79u;sn8!Rn?N{jUDp!TMmOdFl`q`1|i z#88?hLEAC~Oht>(4BKMr??BHxFc|w90`Vz)_CpE}CoS6s6PjT*VHjw^T|}W}+3lIy z)S(2A`=K;Gg!2?AIQl1vk z)YEMF)53v$h-m6v^0O2*AYPy#D7*JP>J>Rzrb&H*Gy|LgkEbvbW z{TD(U-^%n!u+Cgnc_Sr|fHH@hY*1r2!s3l(Ool8uE2)1vjy&+6hPg2I6dF(f_cRY4 ziCjB?!%M;|0usSG-^Z~I!KN5pvM4l8E%0P3{4m6K(Jd=q1?6@@xqi|MNM)a44 znMM^0B)oqkLJWk`af;`;F(In6Vq*zts=!2+o@aX0La7ku7?M4(+$V)&$%Vg9m5bd7 zxttJk;Z2rY=!Mgpg^Mkhtkx-1{Vk_T2mndW#dQ}cD^Z)pHrF_5=LOn7xJbKsk@noi z3&QyiO6+S=VzqYokWn%zf`ftKaK%X&V~LSJCMF9MlIxT%H~#=Vcrku-phq$w91`H&dN74@P?iPL6$ zwvrTHq`idN_1TT^O57ajmo(aO1P>bcNA%Cu#y=;!%Cr$}CW7Fx_TiB)#AgxgY?r z*Wb{b%=d<(RyGV< z7>oIchcGR3fXja8v<Bu?khgi55UIlLNa7b)AdQ~Q#&+NE-eAj!xF z_tji5lJ&e{0i*AC$lM{tqGvE5u9v~3A6x}CKe~$b#CZ6gh&{7Pj*aUs*}n*oj7CHvA@HPvLsF$(e+bl2=mhUI-7mOB-NzItcwjX8f$MizQjkJY^ zA}p&JqG}_c+kJl_w32DipfeV=@_QV{3v57|GdfRfHmRBx`r;Cj zpkMM*GST8`MEh4#*~p=R%ebX zmQ>wa*8FUnn+0iB`D1Mtfgt@2A5}qGW98N~t-{LbFq!Nl>Xr2r=JGt7LW67lwXmWj zDC5TDr?o~Ck7n2r(bjrlieJ`>bpjGE`6f}Umm{yMXbp+(Wzil((wcBMoMu-(nc)Q_vIxd~CX9QIv?^#bJ=`2-Hbt~!76vj4uS1H)v2dkQX^Z_i zsZg1Wa{Z){1xr|9CWg5Rl-S`qSGd(3ULG;ZNH6ur)2{PNayoIEX27Qwu|P4tC}B#( z`jJQ?;VWV71PloWS8VBbUnDquoc;`lBQVyzbb2E)h1@k1-Q&z<_0%@_LkBS#041Bk z&g4q?msQ$@dNiXTS%}`E>Ag^xA|z}Q6>H^xB=ai~O5I=nkmZ&iY}LQe>N`YgmN83z z5DLMkcpq#<>}6Gn1OV@sTN5no6h6x;T-jnx#D-Q!`<6Y@%H7g-1&J4(^R;Uq$ofH} z|07ugz$O*b%D>#&zg9!wo?K{@2)LiQGD=Opb4AQIiGb@2eog#-$G0-1*67qda-@&=vEO zw+_YTCvP)8o9r}ZCA){p=O=rN;^e)?j{f)OgXjVlHX}w63s16MlQSTkvi*C#kw?(= z&s+&9pF={-f@knMiQlsj%tuMb(8PQ}!gf!)hm2#t6RbSrP@e_tS?V`MC-&_`-IrP= zBlg?^&2;Jq8_U1c>irVrPel-%%7)KIj8ayA9z~vNC*D}^c~(Ek!n~oFF#P-T#9!b9 zIRR~Lky@Z5nU6t))V*RdqMcG*fEo4xwk=+OU@Oi?v=cOGXsvdES)>6|#g$@-u}Z)} zxx~@GWj+g^LCu$TDQK0#xbO0(I(H|I$L6me)k~G@&W^I4Nf!JFX)1yO8VUnOvd>tt z-efCGU`r<=zqRFd=m%E{l}~`T+!9zCYZ+_W@0Fqs&!c*XH$tb;?@iS{+8Q}@ww#yIU@G(hxVYC~h(+~pl7-Ioy*%`6xw@5%otL6s zsxT&EbsNbJi8eanLpe(Zs+^lF{Qsxg$}hV#dv3XOpoJpJDCNz0mYa29BEv^6{u4jzveJW-!MLXu+J5S^yy+O2Lx?M9ii_}2-P5M!8b=nm? zVz4$E4=_lfaSO+`I0>#Ss4NrQJhRs+CWVtb;WE06qGT^T)^e&Ahz>-;yR>}K zQWvhhhJqiLSK;rlQLgoyVQS8>5InY%^(Kd#4JW|4D-qtEVeMyiLvaUD5vOmTLm=fm zVS@R5{R1f|5fBiX=EU6-AR(!NvSa643VAOXnpX^gWvteSvhGRNbxvOQKncoTt`|lR z@Ud2taj8XgCcD`7N!ET&>`tj8mQ+A41agX|i;b}y@*oyjajdkX+=peO9qU}9b%-s& zm$ulz17O^}`gI>td8m*RDpaTb6ifmU01Sg!ptxh-U2V5ytP%U~Ys4KdVJY^#^!=AL zinf6^hM!rO1wefb3)dT4*>EbX)ros8(#jn-x96Dcx!j=x(Mg9Px`hpas%2Ubx6mr} zaZ3`C2VB)Nkb~STwG@&AHS(8tTnuUv2gq4 zUu#oQtjM8&hq5(k%E{wPdD9G`B^WE175iIU0_EMYEvwPgf5&BarjG;y%exMM?Xut=n91)?98ya4C?`+(pl1wsqBgbmLsg){O!lJV8v;tq-?<=Q4I!LiY${c{z$3 zJ?AW>`lPTsV*hh>;<&TG440>0%`hDapl{V0{GS<3IcHe0(wA3fhDXr*%$?b}=JZF` zWcCBm%mHK?D3<$k$YJ3UgtraQ_>36QxGfVa9+|$Dxt`g*!0cLR_AD|(i>EA{31$k~ z*|e(9QhW}>o`@koQO6*Fx6=6wxJ*Wr5^bc3utL^B9b6Tv#nOf0B3{9&ad8Ls z&Z?-ZntQ^#mOF83`B7R5#GDV)uPpq>453hTN~IPm3sa556UC7Sq+>V6AfPa#-9FrB zl)98$p}-ibmbeb2-&pt;)*vwg#f0JC++BGO3%@_T;}6u~J4VKs^^CC4QP%So3%za8 zuLsh*BE*8fV}S`dAozP0I3=fmS#Oacebh&J26rGHk4*%DXTd+Pzz5dU(=70B7n~}H z#eqk9vaG(q!U9FIV(EtdUoYcICw2^qUs(?OFkRQ)|LV`)U!gfyIbXwf1?mBAs?MI& zFWU@IdKv$m&p#LN&&S)O2Jm1*uh>jB5k(hqo+_TLdz91;>%bKTf16^=J-o(_`K^*o zrLPu|2bw80pi6fY{983S0nVNyJ9*hz;~ErPVS=^dY?UU$f7ZO3J-R6K#RQK>ULM%ti;7v$Xgiy9t-RQ*fA6%9otJ3<1znlW;Z7(sVuO-oJ`Sgx zIGmb+BqsY%D{YT28rljOW;hoLJ&Y@px%fLV3dmv4Ug+F^B7Zj>W%4*!D~2rTsy4-+ zCWMy`x238y`j1&!L5Ad~WE*hfK^RiLi}|WB6{H1_yc`wR=LoQUuyU;D7z@3_g2(A^ zUMRo{9%F%bF3g6AvBJ_#qcW36s5)VPBphD+J>J-K)so39%snFmc-;VNaV3) zFN!%<=_A&79Xrd$%(21r5PfUvy0b8y4(59YS;`20k1Fai%h?ex(tjg0K8FQISl}oy z;x?SK3WkMqP4!9J&r%kjo1mi@bgE57$|y9J^@1x<49KXX;g( z#l3uzsfi$;g-5JQB|sC_9w@8V=*u<})A$X&EF1`&)$#F|!r1YwGfRu;<^2?NUpw@p z>nNkrm%>bo#zc&6u1Bv*m1-FhVZCs!Q<{Wcj+b7NF%HS(9Jc*<*4%!qArBU|LXY(y z)mRAwX(nHn^qba4e{7RqvJ&gh+ITBSw{YLV3Pc(ncKtXzkjer2~@DY-OkEJ=F9#^Ma$?Y#kPmcE-Nk?@|iCV1&?o4Hz5@u{h^aUh!w zxp(^9_vGA2*tlL|j3e~l{-wC4F_iF5|Kf(E*O)^KiYUNB_S=6Eve|Rrd%^70%-#~I z2E5Kg8<`|1J(2f+%TP-!Q;t{8-1HQTz<9d!Q7pXzo$JHHanFM?L~36$_fVZ5e%iWIh&-(~V@`tKdKQigWk1C9 zI0h1%GhuIyTZUXSzRbyl22NdzA;r1rS zbz zs3>g4AGNC!1wR_c@QK#J*bcwy@LrDR}jM7iywi zp}*W#{@u3nNSlsNJipMUf3I!$uznC9(uC!sFoa@ew2nUMc%2UJO)o~`;_Y|Z%;B8+ zLtk7=e*sQ=1*|sjQOvs?qP{8&o5wR;Z@kY9Eyfxq1u%D|iK2 zEH|<3J8klBpUBR=1UMPJvNZlb1ZCa`r@(_{@#ygwdBca*oZ*KFhTxJLM>mpTpmpNL zNE;B9(;y^agFV9!_n%xtUY7F`Q>ac0{y{ts(>@X>JH%&nK$2qrcs!6RT~7&}1NY6K zX$F$Ogd}|!?UbgO!>M|HIJs{ff=*ryjp2{81f__A3owz`C$C9hEkW2FyMP3xml^PA z9TCNYFV*-H6}qe-mfA_(@U^vO>Jx$`wZ{O!e3KNSa8>$ZxN>=@KeQ=*+qc zbPD_gN%WbXrQ6!ne`XyB9v`He9fL0vjH|`_pWj~)o3nl#zfQ;g?;lB2)Rf-$YE6-r zx9_!@ybto!-;a&czdjM)|1UKKT3+8PH8~Tl@zoQb9j+ao7oT-fCB6UCm;_*(@*z-YLrJOW2AM0Hh<1t2S^JEY_>ChO8)3 zFXdOF$QNbKMdf@22#@o;33?YDjgE|t$Hzwp#^SK5BeA_35;#2!;D$%eXaWWRCJDyR zs2?349mf|wNBeK6k9~ea?8pYXh~MRqhl68-n7jY^g4k0V3I;~U{#(nWyPle2H`Mdj zL7Ma426c#r(Wt~IRtl>v`Kc@qk8$ zqU?KV6rbOFY4pe{2QJu;CNO6d|BsE1)s&8|gx4B{-x?pj&xofxtDWc`Rr5Z9pVh;z z;aQ{fLAp3PT!xPuv}1!9F%rG^yGG8$iv!0KqbK)mB874m#9pl*R~;3z%<;X$tE(Mu ztZ-!39|vteIlKgA1^}7$;ox|DbOdZBN=EU!*B{HUit*hgU$j#%6E@W zd}`FfcXZb8$S;C4HOG@1j%bsWdtWpPio>sHA3}J5rk)uanYi)Qw&N$s@p@k+2j#@S zB2)fqo4cmSq2v|T>G);N53|9ysu^#PNZ~ zb!8DFcaC~CJUe3K&GD!o;ewCoDtlckoa2dTRF)hBfVV3v?MdO;)N>YN$3~75#buEr z9zX#R3GUssb0DCoxUAO`G4kiAr+o^)2C~C1nqSw73BYO0B>Ei6&+7b@{1!3*q-XvS zGie@<9<6-%q)eJlX0%cCFn-g%OuF%?-Ev+t6>N@Y< z+qGx+?IHA3XzO==ZqIGn#yy|w2o@=~DxVDA5$x;@YJod+4$3vEJXXgZQ$e4$t@1R4Y{t8MJhY37=L% zot@fUJA-?*on5rtx~H6X=Lcu+Z8+ncishA1wtKNnzAQ& zcTY&^Qg#C2&YlpxEbLyTDMd7}tF!YiEzsGO0e|gXyY}qv>Ffb5T35$yd%8Mq4ejX+ zN@6?j?g*lTrYJ_R=gvDTlnqVo4Xw>hSmJA~3VsU}@#A#J?;P3iC%=Z4(|<25|H1Ot zm;ZP<*N)cpt+h(aC!r^sZ)~eo7T#8?aLy8cn`)_-I(eU#{`t6-@)RXKQ2S3C`Eh{$ z|Ln85R6sxWoBdEQEBhzU{*mo#`H$lQKVrZ-{*!ZoAL`etuUYnqd zoD@7$^^Vf`Of(OT_MVOCYZTA*jHM#3^pd5rNOj24S)unvqaXLxu9}8rN(!w+3U?K0 zfI=D?QW!>2SK%E}$QD|O6y9kR7J~}QBJ3*MW0#L$p_PJfRJ|t(fyR+

)q}TY} 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 J^8fMg{{Y|!p(p?V literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/CPP.COM b/Source/Images/d_cowgol/u0/CPP.COM new file mode 100644 index 0000000000000000000000000000000000000000..cb1d70f28bba7b57409996f379c7be3fa9311d5f GIT binary patch literal 28544 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 literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/DYNMSORT.COW b/Source/Images/d_cowgol/u0/DYNMSORT.COW new file mode 100644 index 00000000..217902f7 --- /dev/null +++ b/Source/Images/d_cowgol/u0/DYNMSORT.COW @@ -0,0 +1,78 @@ +################################ +# Cowgol program # +# # +# Sorting 1000 random integers # +# stored in a vector allocated # +# using Cowgol's Alloc # +# # +# calls: # +# assembler routine xrndseed # +# assembler routine xrnd # +# C routine mergeSort # +# # +# Ladislau Szilagyi, Nov. 2023 # +################################ + +include "cowgolc.coh"; +include "strings.coh"; +include "malloc.coh"; + +typedef intstring is [uint16]; + +var Unsorted: intstring; +var size: uint16 := 999; + +sub random(): (n: uint16) is + @asm "call _xrnd"; #calls assembler routine + @asm "ld (", n, "),hl"; +end sub; + +sub PrintArray(array: intstring) is + var i: uint16 := 0; + var p := array; + print("\r\nArray:\r\n"); + while i != 1000 loop + print_i16([p]); + print(","); + p := p + 2; + i := i + 1; + end loop; +end sub; + +sub PopulateArray(array: intstring) is + var i: uint16 := 0; + var p := array; + while i != 1000 loop + [p] := random(); + p := p + 2; + i := i + 1; + end loop; +end sub; + +sub RandSeed() is + @asm "call _xrndseed"; #calls assembler routine +end sub; + +sub MergeSort() is + print("\r\nSorting...\r\n"); + @asm "ld hl,(", size, ")"; + @asm "push hl"; # r on stack as param # 3 + @asm "ld hl,0"; + @asm "push hl"; # l on stack as param # 2 + @asm "ld hl,(", Unsorted, ")"; + @asm "push hl"; # vector addr on stack as param # 1 + @asm "call _mergeSort"; # calls C routine msort(int* array, int l, int r) + @asm "pop bc"; # drops C routine params + @asm "pop bc"; # drops C routine params + @asm "pop bc"; # drops C routine params +end sub; + +### start ### + +RandSeed(); +Unsorted := Alloc(2000) as intstring; +PopulateArray(Unsorted); +PrintArray(Unsorted); +MergeSort(); +PrintArray(Unsorted); # now is sorted ! +Exit(); diff --git a/Source/Images/d_cowgol/u0/DYNMSORT.SUB b/Source/Images/d_cowgol/u0/DYNMSORT.SUB new file mode 100644 index 00000000..a3d8ffa1 --- /dev/null +++ b/Source/Images/d_cowgol/u0/DYNMSORT.SUB @@ -0,0 +1,2 @@ +COWGOL -LC DYNMSORT.COW MERGES.C RAND.AS + \ No newline at end of file diff --git a/Source/Images/d_cowgol/u0/FILE.COH b/Source/Images/d_cowgol/u0/FILE.COH new file mode 100644 index 00000000..dd5f282e --- /dev/null +++ b/Source/Images/d_cowgol/u0/FILE.COH @@ -0,0 +1,200 @@ +# vim: ts=4 sw=4 et + +record CpmFCB is + dr: uint8; + f: uint8[11]; + ex: uint8; + s1: uint8; + s2: uint8; + rc: uint8; + d: uint8[16]; + cr: uint8; + r: uint16; + r2: uint8; +end record; + +record FCB is + bufferptr: uint8; # byte just read + dirty: uint8; + cpm: CpmFCB; + buffer: uint8[128]; +end record; + +sub file_i_init(fcb: [FCB], filename: [uint8]) is + sub fill(dest: [uint8], src: [uint8], len: uint8): (srcout: [uint8]) is + loop + var c := [src]; + if (c < 32) or (c == '.') then + c := ' '; + elseif (c == '*') then + c := '?'; + else + src := src + 1; + end if; + if (c >= 'a') and (c <= 'z') then + c := c - ('a' - 'A'); + end if; + [dest] := c; + dest := dest + 1; + + len := len - 1; + if len == 0 then + break; + end if; + end loop; + srcout := src; + end sub; + + MemSet(fcb as [uint8], 0, @bytesof FCB); + MemSet(&fcb.cpm.f[0] as [uint8], ' ', 11); + filename := fill(&fcb.cpm.f[0], filename, 8); + + var c: uint8; + loop + c := [filename]; + if (c < 32) or (c == '.') then + break; + end if; + filename := filename + 1; + end loop; + + if c == '.' then + filename := fill(&fcb.cpm.f[8], filename+1, 3); + end if; + + fcb.cpm.r := 0xffff; + fcb.bufferptr := 127; +end sub; + +sub fcb_i_gbpb(fcb: [FCB], c: uint8) is + var cpmfcb := &fcb.cpm; + var dma := &fcb.buffer[0]; + + @asm "ld c, 26"; # SET DMA + @asm "ld de, (", dma, ")"; + @asm "call 5"; + + @asm "ld a, (", c, ")"; + @asm "ld c, a"; + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; +end sub; + +sub fcb_i_blockin(fcb: [FCB]) is + MemSet(&fcb.buffer[0], 0, 128); + fcb_i_gbpb(fcb, 33); # READ RANDOM + fcb.dirty := 0; +end sub; + +sub fcb_i_blockout(fcb: [FCB]) is + if fcb.dirty != 0 then + fcb_i_gbpb(fcb, 34); # WRITE RANDOM + fcb.dirty := 0; + end if; +end sub; + +sub fcb_i_changeblock(fcb: [FCB], newblock: uint16) is + if newblock != fcb.cpm.r then + fcb_i_blockout(fcb); + fcb.cpm.r := newblock; + fcb_i_blockin(fcb); + end if; +end sub; + +sub fcb_i_convert_a_to_error() is + @asm "cp 0xff"; + @asm "ld a, 0"; + @asm "ret nz"; + @asm "inc a"; +end sub; + +sub FCBOpenIn(fcb: [FCB], filename: [uint8]): (errno: uint8) is + file_i_init(fcb, filename); + + var cpmfcb := &fcb.cpm; + @asm "ld c, 15"; # OPEN_FILE + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + @asm "call", fcb_i_convert_a_to_error; + @asm "ld (", errno, "), a"; +end sub; + +sub FCBOpenUp(fcb: [FCB], filename: [uint8]): (errno: uint8) is + (errno) := FCBOpenIn(fcb, filename); +end sub; + +sub FCBOpenOut(fcb: [FCB], filename: [uint8]): (errno: uint8) is + file_i_init(fcb, filename); + + var cpmfcb := &fcb.cpm; + @asm "ld c, 19"; # DELETE_FILE + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + + @asm "ld c, 22"; # CREATE_FILE + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + @asm "call", fcb_i_convert_a_to_error; + @asm "ld (", errno, "), a"; +end sub; + +sub FCBClose(fcb: [FCB]): (errno: uint8) is + fcb_i_blockout(fcb); + + var cpmfcb := &fcb.cpm; + @asm "ld c, 16"; # CLOSE_FILE + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + @asm "call", fcb_i_convert_a_to_error; + @asm "ld (", errno, "), a"; +end sub; + +sub FCBSeek(fcb: [FCB], pos: uint32) is + pos := pos - 1; # seek to *previous* character + var newblock := (pos >> 7) as uint16; + var newptr := (pos as uint8) & 127; + fcb_i_changeblock(fcb, newblock); + fcb.bufferptr := newptr; +end sub; + +sub FCBPos(fcb: [FCB]): (pos: uint32) is + pos := (((fcb.cpm.r as uint32) << 7) | (fcb.bufferptr as uint32)) + 1; +end sub; + +sub FCBExt(fcb: [FCB]): (len: uint32) is + var oldblock := fcb.cpm.r; + var cpmfcb := &fcb.cpm; + + @asm "ld c, 16"; # CLOSE_FILE (actually flushing it to disk) + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + + @asm "ld c, 35"; # COMPUTE FILE SIZE + @asm "ld de, (", cpmfcb, ")"; + @asm "call 5"; + + len := ([&fcb.cpm.r as [uint32]] & 0x00ffffff) << 7; + fcb.cpm.r := oldblock; +end sub; + +sub fcb_i_nextchar(fcb: [FCB]) is + fcb.bufferptr := fcb.bufferptr + 1; + if fcb.bufferptr == 128 then + fcb_i_changeblock(fcb, fcb.cpm.r + 1); + fcb.bufferptr := 0; + end if; +end sub; + +sub FCBGetChar(fcb: [FCB]): (c: uint8) is + fcb_i_nextchar(fcb); + c := fcb.buffer[fcb.bufferptr]; +end sub; + +sub FCBPutChar(fcb: [FCB], c: uint8) is + fcb_i_nextchar(fcb); + fcb.buffer[fcb.bufferptr] := c; + fcb.dirty := 1; +end sub; + +include "commfile.coh"; + diff --git a/Source/Images/d_cowgol/u0/FILEIO.COH b/Source/Images/d_cowgol/u0/FILEIO.COH new file mode 100644 index 00000000..b4730f96 --- /dev/null +++ b/Source/Images/d_cowgol/u0/FILEIO.COH @@ -0,0 +1,121 @@ +const FCB_FLAG_ERROR := 1<<0; +const FCB_FLAG_READ := 1<<1; +const FCB_FLAG_WRITE := 1<<2; + +record FCB: RawFCB is + pos: uint32; + buflen: FCBIndexType; + index: FCBIndexType; + buffer: uint8[FCB_BUFFER_SIZE]; + flags: uint8; +end record; + +@decl sub FCBRawRead(fcb: [FCB], pos: uint32, len: FCBIndexType): (amount: FCBIndexType); +@decl sub FCBRawWrite(fcb: [FCB], pos: uint32, len: FCBIndexType); + +sub _fcb_init(fcb: [FCB]) is + fcb.pos := 0; + fcb.buflen := 0; + fcb.index := 0; + fcb.flags := 0; +end sub; + +sub _fcb_advance(fcb: [FCB]) is + fcb.index := fcb.index + 1; +end sub; + +sub _fcb_fillbuffer(fcb: [FCB]): (b: uint8) is + var bufpos := fcb.pos + (fcb.index as uint32); + fcb.buflen := FCBRawRead(fcb, bufpos, FCB_BUFFER_SIZE); + b := 0; + if (fcb.flags & FCB_FLAG_ERROR) != 0 then + return; + end if; + fcb.flags := FCB_FLAG_READ; + fcb.pos := bufpos; + fcb.index := 0; + if fcb.buflen != 0 then + b := fcb.buffer[0]; + _fcb_advance(fcb); + end if; +end sub; + +sub FCBFlush(fcb: [FCB]) is + var bufpos := fcb.pos; + if (fcb.flags & FCB_FLAG_WRITE) != 0 then + FCBRawWrite(fcb, bufpos, fcb.index); + if (fcb.flags & FCB_FLAG_ERROR) != 0 then + return; + end if; + end if; + fcb.pos := bufpos + (fcb.index as uint32); + fcb.flags := 0; + fcb.index := 0; + fcb.buflen := 0; +end sub; + +sub _fcb_flushbuffer(fcb: [FCB], b: uint8) is + FCBFlush(fcb); + if (fcb.flags & FCB_FLAG_ERROR) != 0 then + return; + end if; + fcb.flags := FCB_FLAG_WRITE; + fcb.buffer[0] := b; + _fcb_advance(fcb); +end sub; + +sub FCBGetChar(fcb: [FCB]): (b: uint8) is + if (fcb.flags & FCB_FLAG_WRITE) != 0 then + FCBFlush(fcb); + end if; + var i := fcb.index; + if i == fcb.buflen then + b := _fcb_fillbuffer(fcb); + else + b := fcb.buffer[i]; + _fcb_advance(fcb); + end if; +end sub; + +sub FCBPutChar(fcb: [FCB], b: uint8) is + if (fcb.flags & FCB_FLAG_READ) != 0 then + FCBFlush(fcb); + end if; + var i := fcb.index; + if i == FCB_BUFFER_SIZE then + _fcb_flushbuffer(fcb, b); + else + fcb.buffer[i] := b; + _fcb_advance(fcb); + end if; + fcb.flags := fcb.flags | FCB_FLAG_WRITE; +end sub; + +sub FCBPos(fcb: [FCB]): (pos: uint32) is + pos := fcb.pos + (fcb.index as uint32); +end sub; + +sub FCBError(fcb: [FCB]): (e: uint8) is + e := 0; + if (fcb.flags & FCB_FLAG_ERROR) != 0 then + e := 1; + end if; +end sub; + +sub FCBSeek(fcb: [FCB], pos: uint32) is + var delta := pos - fcb.pos; + if (fcb.flags & FCB_FLAG_READ) != 0 then + if delta < (fcb.buflen as uint32) then + fcb.index := delta as FCBIndexType; + return; + end if; + elseif (fcb.flags & FCB_FLAG_WRITE) != 0 then + if delta <= (fcb.index as uint32) then + fcb.index := delta as FCBIndexType; + return; + end if; + end if; + FCBFlush(fcb); + fcb.pos := pos; +end sub; + diff --git a/Source/Images/d_cowgol/u0/HEXDUMP.COW b/Source/Images/d_cowgol/u0/HEXDUMP.COW new file mode 100644 index 00000000..26ead1b1 --- /dev/null +++ b/Source/Images/d_cowgol/u0/HEXDUMP.COW @@ -0,0 +1,115 @@ +# +# Copyright (c) 2020 Brian Callahan +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +# Clone of Unix hexdump -C +# Should work on all Cowgol systems + +include "stdcow.coh"; +include "argv.coh"; + +var InputFile: FCB; + +var addr: uint32; +var len: uint32; + +sub Hexdump() is + var buf: uint8[16]; + var i: uint8; + var j: uint8; + + print_hex_i32(addr); + print(" "); + + i := 0; + + loop + var c: uint8 := FCBGetChar(&InputFile); + + buf[i] := c; + print_hex_i8(c); + print(" "); + if i == 7 then + print(" "); + end if; + + i := i + 1; + len := len - 1; + + if len == 0 or i > 15 then + break; + end if; + end loop; + + addr := addr + (i as uint32); + + var k: uint8 := i; + if len == 0 then + if i < 8 then + print(" "); + end if; + + while i < 16 loop + print(" "); + buf[i] := ' '; + i := i + 1; + end loop; + end if; + + print(" |"); + + j := 0; + + while j < k loop + if buf[j] >= 0x20 and buf[j] <= 0x7e then + print_char(buf[j]); + else + print_char('.'); + end if; + + j := j + 1; + end loop; + + print("|\n"); +end sub; + +ArgvInit(); + +var FileName: [uint8] := ArgvNext(); + +if FileName == (0 as [uint8]) then + print("usage: hexdump file\n"); + ExitWithError(); +end if; + +if FCBOpenIn(&InputFile, FileName) != 0 then + print("hexdump: cannot open "); + print(FileName); + print("\n"); + ExitWithError(); +end if; + +addr := 0; +len := FCBExt(&InputFile); +while len > 0 loop + Hexdump(); +end loop; + +print_hex_i32(addr); +print("\n"); + +if FCBClose(&InputFile) != 0 then + ExitWithError(); +end if; diff --git a/Source/Images/d_cowgol/u0/HEXDUMP.SUB b/Source/Images/d_cowgol/u0/HEXDUMP.SUB new file mode 100644 index 00000000..a6915dc9 --- /dev/null +++ b/Source/Images/d_cowgol/u0/HEXDUMP.SUB @@ -0,0 +1,2 @@ +COWGOL HEXDUMP.COW + \ No newline at end of file diff --git a/Source/Images/d_cowgol/u0/LIBC.LIB b/Source/Images/d_cowgol/u0/LIBC.LIB new file mode 100644 index 0000000000000000000000000000000000000000..f31ad7bc65bfa8cde1d91e0082ac9dca676012d8 GIT binary patch literal 82816 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 literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/LINK.COM b/Source/Images/d_cowgol/u0/LINK.COM new file mode 100644 index 0000000000000000000000000000000000000000..6208ba53b4c6c201519490bd7c9fee19f0732091 GIT binary patch literal 30080 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 Z*v!=nRm!vP&@{A}(_`gHBTl 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 mKhfX@{+D@yKdM(NmMy "); + print_hex_i32(p.next as intptr as uint32); + print_nl(); + + bytes := bytes + p.size; + p := p.next; + end loop; + print("* free bytes: "); + print_i32(bytes as intptr as uint32); + print_nl(); + print_nl(); +end sub; + +sub CheckMemoryChain() is + var p := freeList; + while p != (0 as [MallocFreeBlock]) loop + var next := p.next; + if next == (0 as [MallocFreeBlock]) then + break; + end if; + if next <= p then + DumpBlocks(); + print("bad chain: block "); + print_hex_i32(p as intptr as uint32); + print(" points at prior block "); + print_hex_i32(next as intptr as uint32); + print_nl(); + ExitWithError(); + end if; + + p := p.next; + end loop; +end sub; + +sub RawAlloc(length: intptr): (block: [uint8]) is + var totallength := AlignUp(length + @bytesof MallocUsedBlock); + if totallength < @bytesof MallocFreeBlock then + totallength := @bytesof MallocFreeBlock; + end if; + + # Make sure everything's rounded to 8 bytes to try and reduce + # fragmentation. + totallength := (totallength + 7) & ~7; + + # Fragmentation is a killer on small systems, so we use best fit. + + var p := freeList; + var prev: [MallocFreeBlock] := 0 as [MallocFreeBlock]; + var candidate: [MallocFreeBlock] := 0 as [MallocFreeBlock]; + var cprev: [MallocFreeBlock] := 0 as [MallocFreeBlock]; + var csize: intptr := -1; + + # Try to find the smallest block which will fit. + while p != (0 as [MallocFreeBlock]) loop + var s := p.size; + if (s >= totallength) and (s < csize) then + candidate := p; + csize := s; + cprev := prev; + if csize == totallength then + # This is an exact fit. We can't do better than this, so stop here. + break; + end if; + end if; + prev := p; + p := p.next; + end loop; + if candidate == (0 as [MallocFreeBlock]) then + # Nothing was found. + block := 0 as [uint8]; + return; + end if; + + var delta := csize - totallength; + if delta < @bytesof MallocFreeBlock then + # Consume the entire block. + if cprev != (0 as [MallocFreeBlock]) then + cprev.next := candidate.next; + else + freeList := candidate.next; + end if; + totallength := csize; + else + # We found a hole bigger than we need. We shrink the hole and return + # what's left. + candidate.size := delta; + candidate := candidate + candidate.size; + end if; + + #print("malloc "); + #print_hex_i32(candidate as intptr as uint32); + #print("+"); + #print_hex_i32(totallength as uint32); + #print_nl(); + + var usedblock := candidate as [MallocUsedBlock]; + usedblock.size := totallength; + block := (@next usedblock) as [uint8]; + + #print("malloc "); + #print_hex_i32(block as intptr as uint32); + #print("+"); + #print_hex_i32(length as uint32); + #print_nl(); + + MemSet(block, 0, totallength - @bytesof MallocUsedBlock); + #CheckMemoryChain(); +end sub; + +sub Alloc(length: intptr): (block: [uint8]) is + block := RawAlloc(length); + if block == (0 as [uint8]) then + print("Out of memory"); + ExitWithError(); + end if; +end sub; + +sub AddFreeBlock(start: [uint8], length: intptr) is + #print("free "); + #print_hex_i32(start as intptr as uint32); + #print("+"); + #print_hex_i32(length as uint32); + #print_nl(); + + MemSet(start, 0xaa, length); + + var h := start as [MallocFreeBlock]; + h.size := length; + + # freeList points at an ordered list of free blocks. First, we run + # through the list until we find the last block *before* this one. + + var p := freeList; + if h < p then + # Special case: the new block will become the new *first* block. + + if (h + h.size) == p then + h.size := length + p.size; + h.next := p.next; + else + h.next := p; + end if; + freeList := h; + else + # Otherwise, work through the list and find the block immediately + # preceding the one we're going to insert. + + loop + # Is this the last block? + + if p.next == (0 as [MallocFreeBlock]) then + # Insert the new block after it. + + p.next := h; + h.next := 0 as [MallocFreeBlock]; + break; + end if; + + # We know that h cannot be before p, so if h is before the + # *next* block, then this must be the block preceding it. + + if h < p.next then + # Try to merge the next block onto the end of h. + + if (h + length) == p.next then + h.size := length + p.next.size; + h.next := p.next.next; + else + h.next := p.next; + end if; + p.next := h; + break; + end if; + + p := p.next; + end loop; + + # p now points at the preceding block. Try to merge h onto the + # end of it. + + if (p + p.size) == h then + p.size := p.size + h.size; + p.next := h.next; + end if; + end if; + + #CheckMemoryChain(); +end sub; + +sub Free(start: [uint8]) is + if start != (0 as [uint8]) then + var usedblock := @prev (start as [MallocUsedBlock]); + AddFreeBlock(usedblock as [uint8], usedblock.size); + end if; +end sub; + +sub GetFreeMemory(): (bytes: intptr) is + bytes := 0; + var p := freeList; + while p != (0 as [MallocFreeBlock]) loop + bytes := bytes + p.size; + p := p.next; + end loop; +end sub; + +sub StrDup(s: [uint8]): (news: [uint8]) is + var len := StrLen(s) + 1; + news := Alloc(len); + MemCopy(s, len, news); +end sub; + diff --git a/Source/Images/d_cowgol/u0/MERGES.C b/Source/Images/d_cowgol/u0/MERGES.C new file mode 100644 index 00000000..9eca23bc --- /dev/null +++ b/Source/Images/d_cowgol/u0/MERGES.C @@ -0,0 +1,78 @@ + +int L[500], R[500]; + +// Merges two subarrays of arr[]. +// First subarray is arr[l..m] +// Second subarray is arr[m+1..r] +void merge(int arr[], int l, int m, int r) +{ + int i, j, k; + int n1 = m - l + 1; + int n2 = r - m; + + // Copy data to temp arrays L[] and R[] + for (i = 0; i < n1; i++) + L[i] = arr[l + i]; + + for (j = 0; j < n2; j++) + R[j] = arr[m + 1 + j]; + + // Merge the temp arrays back into arr[l..r + i = 0; + j = 0; + k = l; + + while (i < n1 && j < n2) + { + if (L[i] <= R[j]) + { + arr[k] = L[i]; + i++; + } + else + { + arr[k] = R[j]; + j++; + } + + k++; + } + + // Copy the remaining elements of L[], + // if there are any + while (i < n1) + { + arr[k] = L[i]; + i++; + k++; + } + + // Copy the remaining elements of R[], + // if there are any + while (j < n2) + { + arr[k] = R[j]; + j++; + k++; + } +} + +// l is for left index and r is right index of the +// sub-array of arr to be sorted +// first call with l = 0, r = sizeof(arr) - 1 +void mergeSort(int arr[], int l, int r) +{ + int m; + + if (l < r) + { + m = l + (r - l) / 2; + + // Sort first and second halves + mergeSort(arr, l, m); + mergeSort(arr, m + 1, r); + + merge(arr, l, m, r); + } +} + \ No newline at end of file diff --git a/Source/Images/d_cowgol/u0/OPTIM.COM b/Source/Images/d_cowgol/u0/OPTIM.COM new file mode 100644 index 0000000000000000000000000000000000000000..fcfcf04e6f3ad19dc86e4c1166d6daf3188f687e GIT binary patch literal 28160 zcmchA3w%`7x$l}hCX-2kj3DeF$li&-CgF_?AqvXFsEB}|u}TT%H6ajYhCB=+nX2uv zr{`4L-#N99-#w?ccv`J};FA;|Xl9yfCeE##9y~_7+oo}BHAXG<0fD`9|KD0`@0khM zo^$T~-TY+F-s|zL@4ddY*0;B1Zg$$oLfx9HV`S^~>kIbOP4=^q$Fz7|QoD<7Ds{7b zKhy4J$wc*zo}Ofx*`7>1o|jBKbZd;U#G$%m((qf%@Q<4iO=OJg=JeqkzepTmbF>`j&+0n zfVGPrLi$&𝔢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/cRHsLAoK8HCe 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 b2tAAH)x}GeF1vKOe?`U0HEY+wLfQWT3^9_G literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/P1.COM b/Source/Images/d_cowgol/u0/P1.COM new file mode 100644 index 0000000000000000000000000000000000000000..5caf0c6e2e03702a8823c221c2e8e5457b527081 GIT binary patch literal 39936 zcmd75dwf*Yxj(!om&uh&0)!nv+&jZ%CxM745h8b#wy1a|UXVb@1tKsBnF#?xM#Kt= zwFY|>t)@k4?;f#gNqc(A>C6;rb~>k0OIz⩔X|0(HNEcb??02XRWpO%mir9@AEl- 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 literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/RAND.AS b/Source/Images/d_cowgol/u0/RAND.AS new file mode 100644 index 00000000..9051ede7 --- /dev/null +++ b/Source/Images/d_cowgol/u0/RAND.AS @@ -0,0 +1,52 @@ +; Xorshift is a class of pseudorandom number generators discovered +; by George Marsaglia and detailed in his 2003 paper, Xorshift RNGs. +; +; 16-bit xorshift pseudorandom number generator by John Metcalf +; returns hl = pseudorandom number +; corrupts a + +; generates 16-bit pseudorandom numbers with a period of 65535 +; using the xorshift method: + +; hl ^= hl << 7 +; hl ^= hl >> 9 +; hl ^= hl << 8 + +; some alternative shift triplets which also perform well are: +; 6, 7, 13; 7, 9, 13; 9, 7, 13. + + psect text + + GLOBAL _xrnd, _xrndseed + +_xrnd: + ld hl,1 ; seed must not be 0 + ld a,h + rra + ld a,l + rra + xor h + ld h,a + ld a,l + rra + ld a,h + rra + xor l + ld l,a + xor h + ld h,a + ld (_xrnd+1),hl + res 7,h ;make-it positive... + ret + +_xrndseed: + ld a,r + ld l,a + ld a,r + ld h,a + or l ; HL must be not NULL + jr nz,1f + inc hl +1: + ld (_xrnd+1),hl + ret diff --git a/Source/Images/d_cowgol/u0/STDCOW.COH b/Source/Images/d_cowgol/u0/STDCOW.COH new file mode 100644 index 00000000..e539a9f5 --- /dev/null +++ b/Source/Images/d_cowgol/u0/STDCOW.COH @@ -0,0 +1,91 @@ +# +# Copyright (c) 2020 Brian Callahan +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +# Cowgol standard library + +# Uncomment these if you'd like to abstract the includes away. +include "cowgol.coh"; +include "file.coh"; +include "strings.coh"; +include "malloc.coh"; + +# Print a properly formatted 8-bit hex number to a file. +sub FCBPutHex8(fcb: [FCB], number: uint8) is + var i: uint8 := 0; + var nibble: uint8; + + while i < 2 loop + nibble := number >> 4; + + if nibble < 10 then + nibble := nibble + '0'; + else + nibble := nibble + ('A' - 10); + end if; + + FCBPutChar(fcb, nibble); + + number := number << 4; + + i := i + 1; + end loop; +end sub; + +# Print a properly formatted 16-bit hex number to a file. +sub FCBPutHex16(fcb: [FCB], number: uint16) is + FCBPutHex8(fcb, ((number >> 8) as uint8)); + FCBPutHex8(fcb, (number as uint8)); +end sub; + +# Print a properly formatted 32-bit hex number to a file. +sub FCBPutHex32(fcb: [FCB], number: uint32) is + FCBPutHex16(fcb, ((number >> 16) as uint16)); + FCBPutHex16(fcb, (number as uint16)); +end sub; + +# Print a signed 32-bit integer to the console. +sub print_d32(value: int32) is + var buffer: uint8[12]; + var pe := IToA(value, 10, &buffer[0]); + print(&buffer[0]); +end sub; + +# Read in a string. +sub GetString(): (s: [uint8]) is + var temp: uint8[256]; + var c: uint8; + var i: uint8 := 0; + + while i < 255 loop + c := get_char(); + if c == 10 or c == 13 then + break; + end if; + + temp[i] := c; + + i := i + 1; + end loop; + temp[i] := 0; + + if i == 0 then + s := (0 as [uint8]); + return; + end if; + + s := Alloc(((i + 1) as intptr)); + CopyString(&temp[0], s); +end sub; diff --git a/Source/Images/d_cowgol/u0/STRINGS.COH b/Source/Images/d_cowgol/u0/STRINGS.COH new file mode 100644 index 00000000..046e07ec --- /dev/null +++ b/Source/Images/d_cowgol/u0/STRINGS.COH @@ -0,0 +1,63 @@ +sub StrCmp(s1: [uint8], s2: [uint8]): (res: int8) is + loop + res := ([s1] - [s2]) as int8; + if (res != 0) or ([s1] == 0) then + break; + end if; + s1 := s1 + 1; + s2 := s2 + 1; + end loop; +end sub; + +sub ToLower(c: uint8): (cc: uint8) is + if (c >= 'A') and (c <= 'Z') then + cc := c | 32; + else + cc := c; + end if; +end sub; + +sub StrICmp(s1: [uint8], s2: [uint8]): (res: int8) is + loop + res := (ToLower([s1]) - ToLower([s2])) as int8; + if (res != 0) or ([s1] == 0) then + break; + end if; + s1 := s1 + 1; + s2 := s2 + 1; + end loop; +end sub; + +sub StrLen(s: [uint8]): (size: intptr) is + var p := s; + loop + var c := [p]; + if c == 0 then + break; + end if; + p := p + 1; + end loop; + size := p - s; +end sub; + +sub CopyString(src: [uint8], dest: [uint8]) is + loop + var c := [src]; + [dest] := c; + src := src + 1; + dest := dest + 1; + if c == 0 then + break; + end if; + end loop; +end sub; + +sub MemCopy(src: [uint8], size: intptr, dest: [uint8]) is + while size != 0 loop + [dest] := [src]; + dest := dest + 1; + src := src + 1; + size := size - 1; + end loop; +end sub; + diff --git a/Source/Images/d_cowgol/u0/Z80AS.COM b/Source/Images/d_cowgol/u0/Z80AS.COM new file mode 100644 index 0000000000000000000000000000000000000000..21a2dd694834b2706d67cfd9360c054695b02e6c GIT binary patch literal 25856 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%0AU6r4i{raoaxI0gAH@?;>=Yuq_4MHU}{Q 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 MtN#;MpZxs)7aew6vH$=8 literal 0 HcmV?d00001 diff --git a/Source/ver.inc b/Source/ver.inc index d48dba55..71168228 100644 --- a/Source/ver.inc +++ b/Source/ver.inc @@ -2,7 +2,7 @@ #DEFINE RMN 5 #DEFINE RUP 0 #DEFINE RTP 0 -#DEFINE BIOSVER "3.5.0-dev.10" +#DEFINE BIOSVER "3.5.0-dev.11" #define rmj RMJ #define rmn RMN #define rup RUP diff --git a/Source/ver.lib b/Source/ver.lib index 7cbcf9ca..5df34ba5 100644 --- a/Source/ver.lib +++ b/Source/ver.lib @@ -3,5 +3,5 @@ rmn equ 5 rup equ 0 rtp equ 0 biosver macro - db "3.5.0-dev.10" + db "3.5.0-dev.11" endm

eP6^1{GS z=(O$oUG|+cTPgUns_%+s_&%tad|#wv{A+8y#{iI4E0MkT8m-sa8|tg<-Df0@q1j47 ztm=Ky3?z<+kcclY*-%P?&I&SA6x|V*C-)gETH8v&PpZBzYXhsnwL4hJdSNv8A(Y2% z(F2B(7PS&Ne9$bqt;0P?Wu*a!M{2rU^Tx1J@OM>@WNjJ}urKq%=4=}2*;s!)+MA|% zzB2o;*&+^i_?OMcdT)Bj0ihX@%-q`?=#WadO3>=ouBBWii@yH@~rIn=gmq!{|-Mh%(7a!56#rn~D}inL{*P`i2>Bq37ObqKmjh6=j3i=5i*P+f1A2G`|3L zn7d9ZUF8;NNw&@JtXHdncTAAJI%-xSgRc#eTN34T=D!OW&H%?smy6`2(&?gPhp-b& zaO71yu=IhEjtb}?SIbJz5_Yr!#^rWD`hJWVQ9|kIpLAhOkd>t>L?*H5aVy?s8tP8E zkU=rLF+PbxsP9?S6O7*$xe z6ab*b7^#X7G^$M=tUgR|0=visvB1KQ9`ryx zwB??1#mOl550N>+fA7=}6x`lJ0}nE>w&y{Qqm;F30b&f7W9EEx(Ay!S={C*W)5r)aT^PJ1L6*Et;bt14!I&n24M)d z4d|Fc1^JgDBv}?`7;{jAU<#**tSgI4N%SBk#1WWl*$%3H zMY?-z>5j79$)LN($o*h>w|=b1ZlODu^x~&U{{L6nGj!;6E3ZL>YeTV=0N$W~lc)5rm0S479&~rkLhqU%i9h39^W8cdZosTh;F%;};?X|5Ek4iYCAj3~cfP+&t_C zT?V;IGw8+5RgsAjj`!3wCMWill_(tVDVhQ=XlRogbp9LmgHMRtIdU6iWT&|DzQQjJ z6}e)i;Ge2~U(pn}LPMKenXgPzT$NYe_;6Nv6E`NPH{Mc2_8AxMs}Iz4zFd_@FB&oU zo2oxhGzm`dpm;$U-@UpRy1C$JP?gQc`je->%!e+e za9v&MZ!~p7d4?+-I=SMQOPAg!_}PW6wpB`A$FRT=NuIi5!*@2WgTcLp4|A)YL@|N8QV?7#;zE$df D8r&A5 literal 0 HcmV?d00001 diff --git a/Source/Images/d_cowgol/u0/COWGOLC.COH b/Source/Images/d_cowgol/u0/COWGOLC.COH new file mode 100644 index 00000000..6b3ef2ef --- /dev/null +++ b/Source/Images/d_cowgol/u0/COWGOLC.COH @@ -0,0 +1,52 @@ +var LOMEM: [uint8]; +@asm "ld hl, __Hbss"; +@asm "ld (", LOMEM, "), hl"; + +var HIMEM: [uint8]; +@asm "ld hl, (6)"; +@asm "ld (", HIMEM, "), hl"; + +sub Exit() is + @asm "rst 0"; +end sub; + +sub ExitWithError() is + @asm "rst 0"; +end sub; + +sub AlignUp(in: intptr): (out: intptr) is + out := in; +end sub; + +sub get_char(): (c: uint8) is + @asm "ld c, 1"; + @asm "call 5"; + @asm "ld (", c, "), a"; +end sub; + +sub print_char(c: uint8) is + if c == 10 then + @asm "ld e, 13"; + @asm "ld c, 2"; + @asm "call 5"; + end if; + @asm "ld a, (", c, ")"; + @asm "ld e, a"; + @asm "ld c, 2"; + @asm "call 5"; +end sub; + +sub MemSet(buf: [uint8], byte: uint8, len: uint16) is + var bufend := buf + len; + loop + if buf == bufend then + return; + end if; + [buf] := byte; + buf := buf + 1; + end loop; +end sub; + +include "common.coh"; + + diff --git a/Source/Images/d_cowgol/u0/COWLINK.COM b/Source/Images/d_cowgol/u0/COWLINK.COM new file mode 100644 index 0000000000000000000000000000000000000000..8a7b8040fcd49d90ad08a691ca7713d4b31f2c8b GIT binary patch literal 7808 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