Just grab a copy of Fuse 1.1 ( http://fuse-emulator.sourceforge.net ). Select the ZX Spectrum SE model. Then type MODE 1 and press [ENTER]. In this mode the screen is normally paged out so instead of losing 6.75K of RAM to the larger screen, you actually get an additional 6.75K of main RAM (where the screen normally lives), which gives you code page support. Would be nice if someone could put together a small Russian demo using it.Shaos wrote:Thanks! I'll try to play with this - at least in emulators
SE Basic IV 4.0 Anya
Moderator: Shaos
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
That's correct. To enable BASIC to work properly in 80x24 mode (including editing programs) requires at least 32K of ROM (or you'd lose support for 32x24 mode). I did have a version of the code that used the Timex screen area but that required moving the BASIC area past the second screen. At that point almost no existing software would run. It also left very little room for BASIC.Shaos wrote:So paging is required? This mode will not work on Timex-2048 where high-resolution mode is already implemented, but in the main memory?
-
Shaos
- Admin
- Posts: 24636
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
The trouble is that when you support more than one mode you either have to have a different ROM for each mode (as with SE Basic IV) or you have to do branching and the more modes the slower it gets with branching. As the bitmap area is the same in 8x8 attribute or 8x1 attribute mode there's really no excuse for a whole new ROM. The simplest solution for using 8x1 mode is a dedicated text channel attached to a stream with support for 256 UDGs. I've already got all the code necessary to do it. In fact I've got a version that does it in software on the original 1982 hardware:Shaos wrote:I checked your documentation - you didn't support mode with attributes per byte in your Basic, why?
Different attributes per every 8 pixels should look interesting
http://www.worldofspectrum.org/infoseekid.cgi?id=0021575
-
Shaos
- Admin
- Posts: 24636
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
How difficult is to port it on different Z80-hardware? For example, I need to have different font size and bigger width and height of the text screen (and totally different graphics) and different keyboard reading technique...
P.S. Also is there easier way to immediately switch to mode 1 automatically on the start?
P.S. Also is there easier way to immediately switch to mode 1 automatically on the start?
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
Well, if you have a VDP like one of the TMS devices, pretty trivial. The I/O is a fairly small part of the ROM so it's not a big deal to rewrite it for a new machine.Shaos wrote:How difficult is to port it on different Z80-hardware? For example, I need to have different font size and bigger width and height of the text screen (and totally different graphics) and different keyboard reading technique...
It starts in low-res because 99.9% of software runs in that mode and devices like divIDE force ROM1 anyway. Maybe save a snapshot and just start by loading that?P.S. Also is there easier way to immediately switch to mode 1 automatically on the start?
-
Shaos
- Admin
- Posts: 24636
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
OK, I'll try to modify your sources
For now I just launched unmodified ROMs in my Sprinter emulator (formerly known as SPRINT):

It's 640x350 EGA-like screen
In order to run BasicSE I implemented your memory mapping scheme with ports #7FFD and #FF and now I'm working on keyboard emulation...
For now I just launched unmodified ROMs in my Sprinter emulator (formerly known as SPRINT):

It's 640x350 EGA-like screen
In order to run BasicSE I implemented your memory mapping scheme with ports #7FFD and #FF and now I'm working on keyboard emulation...
Last edited by Shaos on 27 May 2013 06:17, edited 1 time in total.
-
Shaos
- Admin
- Posts: 24636
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
This is the difference between just loaded mode 0 and just switched mode 1:cheveron wrote:It starts in low-res because 99.9% of software runs in that mode and devices like divIDE force ROM1 anyway. Maybe save a snapshot and just start by loading that?P.S. Also is there easier way to immediately switch to mode 1 automatically on the start?
Code: Select all
< 000050e0 00 18 00 10 38 38 10 00 64 10 00 00 00 7c 10 10 |....88..d....|..|
< 000050f0 00 00 00 64 00 10 00 00 00 20 00 00 20 10 04 00 |...d..... .. ...|
< 00005100 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000051e0 00 24 00 30 44 44 30 00 64 00 00 00 00 10 00 10 |.$.0DD0.d.......|
< 000051f0 00 00 00 64 00 10 00 00 00 20 00 00 20 10 04 00 |...d..... .. ...|
< 00005200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000052e0 00 5a 00 10 44 44 10 00 54 10 38 18 00 10 10 10 |.Z..DD..T.8.....|
< 000052f0 18 1c 00 54 18 38 44 18 2c 24 1c 00 20 38 1c 00 |...T.8D.,$.. 8..|
< 00005300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000053e0 00 62 00 10 3c 38 10 00 54 10 24 24 00 10 10 10 |.b..<8..T.$$....|
< 000053f0 24 20 00 54 24 10 44 24 30 28 20 00 20 10 24 00 |$ .T$.D$0( . .$.|
< 00005400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000054e0 00 5a 00 10 04 44 10 00 4c 10 24 3c 00 10 10 10 |.Z...D..L.$<....|
< 000054f0 3c 18 00 4c 3c 10 54 24 20 30 18 00 20 10 24 00 |<..L<.T$ 0.. .$.|
< 00005500 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000055e0 00 24 00 10 08 44 10 00 4c 10 24 20 00 10 10 10 |.$...D..L.$ ....|
< 000055f0 20 04 00 4c 20 10 28 24 20 28 04 00 20 10 24 00 | ..L .($ (.. .$.|
< 00005600 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 000056e0 00 18 00 10 30 38 10 00 44 10 24 18 00 10 10 08 |....08..D.$.....|
< 000056f0 18 38 00 44 18 08 28 18 20 24 38 00 3c 08 1c 00 |.8.D..(. $8.<...|
< 00005700 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
< 00005c00 ff 00 00 00 ff 00 00 00 00 19 02 00 00 00 00 00 |ÿ...ÿ...........|
---
> 00005c00 ff 00 00 00 ff 00 19 0d 0d 07 02 00 00 00 00 00 |ÿ...ÿ...........|
< 00005c30 00 00 00 00 00 00 00 3c 3c 00 80 00 21 f6 ff 00 |.......<<...!öÿ.|
< 00005c40 00 00 00 00 00 00 00 00 07 00 00 cb 5c 00 00 b6 |...........Ë\..¶|
< 00005c50 5c b6 5c cb 5c 00 00 ca 5c cc 5c cc 5c 00 00 00 |\¶\Ë\..Ê\Ì\Ì\...|
< 00005c60 00 ce 5c ce 5c ce 5c 00 92 5c 10 02 00 00 00 00 |.Î\Î\Î\..\......|
< 00005c70 00 00 00 00 00 00 00 00 2c 00 00 40 5b 00 00 00 |........,..@[...|
< 00005c80 ff 00 02 17 00 40 ff 50 21 18 02 17 01 07 00 07 |ÿ....@ÿP!.......|
< 00005c90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
< *
---
> 00005c30 00 00 00 00 00 00 00 3c 3c 00 ff c0 21 f6 ff 00 |.......<<.ÿÀ!öÿ.|
> 00005c40 00 00 00 00 ff fe ff 01 07 00 00 cb 5c 00 00 b6 |....ÿþÿ....Ë\..¶|
> 00005c50 5c b6 5c cb 5c d5 5c ca 5c cc 5c cc 5c d4 5c 00 |\¶\Ë\Õ\Ê\Ì\Ì\Ô\.|
> 00005c60 00 ce 5c ce 5c ce 5c 18 92 5c 10 02 00 00 00 00 |.Î\Î\Î\..\......|
> 00005c70 00 00 00 00 e6 1a 00 00 fc 02 00 40 5b 00 00 00 |....æ...ü..@[...|
> 00005c80 ff 00 4a 17 01 c0 e1 d0 51 18 4a 17 01 07 00 07 |ÿ.J..ÀáÐQ.J.....|
> 00005c90 00 00 00 00 00 00 00 db 02 4b 00 3e 00 c3 f6 24 |.......Û.K.>.Ãö$|
> 00005ca0 02 c2 f6 a1 38 83 0e 3f 00 88 0e c1 d7 49 24 00 |.Âö¡8..?...Á×I$.|
< 00005cc0 5a 39 c4 15 52 a5 33 c4 15 50 80 80 0d 80 00 00 |Z9Ä.R¥3Ä.P......|
< 00005cd0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
---
> 00005cc0 5a 39 c4 15 52 a5 33 c4 15 50 80 80 0d 80 0e 00 |Z9Ä.R¥3Ä.P......|
> 00005cd0 00 01 00 00 0d 80 00 00 01 00 00 00 0a 00 00 00 |................|
> 00005ce0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
-
cheveron
- Fanat
- Posts: 52
- Joined: 29 Jan 2013 13:43
- Location: 86.182.165.70
That's correct. Each mode uses its own ROM (with ROM1 being lo-res). That means no branching, and no complex ROM calling system. It also means ROM1 can be used wihout ROM0 in a 16K-ROM machine. Then you get all of the features of SE Basic IV except hi-res mode. Of course if you're modifying for Sprinter, you may as well modify ROM0 to use the native 80x25 text mode instead.Shaos wrote:Also it looks like these modes have different ROMs loaded in 0 page.
Also, with the keyboard routines, the next version of SE Basic IV will include a much simpler routine that is both faster and more space efficient.

