SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Старый спектрумистский форум

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Post by Shaos »

английский топик тут
anya.jpg
UPDATES:

В июне 2018 перенёс свой форк версии 4.0.4 на GitLab: https://gitlab.com/retro-forks/sebasic4

В июне 2019 причесал гитлабовскую Wiki: https://gitlab.com/retro-forks/sebasic4/wikis/home
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Пытаюсь разобраться как проще всего сразу попасть в моду 512x192 - вот разница между mode 0 и mode 1 (плюс к разнице в ромах):

Code: Select all

< 000050e0  38 44 00 00 38 00 10 00  00 00 00 00 00 00 00 00  |8D..8...........|
< 000050f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000051e0  44 48 00 00 44 00 30 00  00 00 00 00 00 00 00 00  |DH..D.0.........|
< 000051f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000052e0  44 50 00 00 4c 10 10 00  00 00 00 00 00 00 00 00  |DP..L...........|
< 000052f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000053e0  44 60 00 00 54 00 10 00  00 00 00 00 00 00 00 00  |D`..T...........|
< 000053f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000054e0  44 50 00 00 64 00 10 00  00 00 00 00 00 00 00 00  |DP..d...........|
< 000054f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000055e0  44 48 10 00 44 00 10 00  00 00 00 00 00 00 00 00  |DH..D...........|
< 000055f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000056e0  38 44 10 00 38 10 10 00  00 00 00 00 00 00 00 00  |8D..8...........|
< 000056f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
< *
< 000057e0  00 00 20 00 00 00 00 00  00 00 00 00 00 00 00 00  |.. .............|
< 000057f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
1068c1025
< 00005c00  ff 00 05 65 ff 00 07 0d  0d 19 02 00 00 00 00 00  |ÿ..eÿ...........|
---
> 00005c00  ff 00 17 65 ff 00 17 0d  0d 07 02 00 00 00 00 00  |ÿ..eÿ...........|
1075,1078c1032,1035
< 00005c70  00 00 00 00 e6 1a 00 00  ff 02 00 40 5b 00 00 00  |....æ...ÿ..@[...|
< 00005c80  ff 00 1a 17 00 40 e7 50  21 18 1a 17 01 07 00 07  |ÿ....@çP!.......|
< 00005c90  00 00 00 00 00 00 00 00  00 00 00 db 02 4b 00 a5  |...........Û.K.¥|
< 00005ca0  00 5c d7 8c 08 83 0e 3f  00 88 0e c1 d7 01 02 00  |.\×....?...Á×...|
---
> 00005c70  00 00 00 00 e6 1a 00 00  6a 0e 00 40 5b 00 00 00  |....æ...j..@[...|
> 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 00  00 00 00 db 02 4b 00 ac  |...........Û.K.¬|
> 00005ca0  00 55 d7 8c 08 83 0e 3f  00 88 0e c1 d7 49 24 00  |.U×....?...Á×I$.|
1081c1038
< 00005cd0  00 00 00 00 0d 80 00 00  00 00 00 00 0a 00 00 00  |................|
---
> 00005cd0  00 01 00 00 0d 80 00 00  01 00 00 00 0a 00 00 00  |................|
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот разница в стандартной моде после ввода простейшей программы на бейсике:

Code: Select all

< 000050e0  38 44 00 00 38 00 10 00  00 00 00 00 00 00 00 00  |8D..8...........|
---
> 000050e0  ff 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ÿ...............|
1030c1056
< 000051e0  44 48 00 00 44 00 30 00  00 00 00 00 00 00 00 00  |DH..D.0.........|
---
> 000051e0  ff 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ÿ...............|
1033c1059
< 000052e0  44 50 00 00 4c 10 10 00  00 00 00 00 00 00 00 00  |DP..L...........|
---
> 000052e0  ff 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ÿ...............|
1036c1062
< 000053e0  44 60 00 00 54 00 10 00  00 00 00 00 00 00 00 00  |D`..T...........|
---
> 000053e0  ff 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ÿ...............|
1039c1065
< 000054e0  44 50 00 00 64 00 10 00  00 00 00 00 00 00 00 00  |DP..d...........|
---
> 000054e0  c3 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |Ã...............|
1042c1068
< 000055e0  44 48 10 00 44 00 10 00  00 00 00 00 00 00 00 00  |DH..D...........|
---
> 000055e0  c3 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |Ã...............|
1045c1071
< 000056e0  38 44 10 00 38 10 10 00  00 00 00 00 00 00 00 00  |8D..8...........|
---
> 000056e0  c3 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |Ã...............|
1048c1074
< 000057e0  00 00 20 00 00 00 00 00  00 00 00 00 00 00 00 00  |.. .............|
---
> 000057e0  ff 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |ÿ...............|
1068c1094
< 00005c00  ff 00 05 65 ff 00 07 0d  0d 19 02 00 00 00 00 00  |ÿ..eÿ...........|
---
> 00005c00  ff 00 17 6c ff 00 19 0d  0d 19 02 00 00 00 00 00  |ÿ..lÿ...........|
1071,1078c1097,1104
< 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  ff 02 00 40 5b 00 00 00  |....æ...ÿ..@[...|
< 00005c80  ff 00 1a 17 00 40 e7 50  21 18 1a 17 01 07 00 07  |ÿ....@çP!.......|
< 00005c90  00 00 00 00 00 00 00 00  00 00 00 db 02 4b 00 a5  |...........Û.K.¥|
< 00005ca0  00 5c d7 8c 08 83 0e 3f  00 88 0e c1 d7 01 02 00  |.\×....?...Á×...|
---
> 00005c30  00 00 00 00 00 00 00 3c  3c 00 ff 00 01 f6 ff fc  |.......<<.ÿ..öÿü|
> 00005c40  ff 00 00 00 ff fe ff 01  07 0a 00 d8 5c 00 00 b6  |ÿ...ÿþÿ....Ø\..¶|
> 00005c50  5c b6 5c cb 5c ec 5c ca  5c d9 5c d9 5c db 5c 00  |\¶\Ë\ì\Ê\Ù\Ù\Û\.|
> 00005c60  00 db 5c db 5c db 5c 01  92 5c 11 02 00 00 00 00  |.Û\Û\Û\..\......|
> 00005c70  00 00 00 00 92 1a 00 00  c6 26 00 40 5b 00 00 00  |........Æ&.@[...|
> 00005c80  ff 00 20 17 20 40 e0 50  21 17 21 17 01 07 00 07  |ÿ. . @àP!.!.....|
> 00005c90  00 00 00 00 0a 00 00 00  00 0a 00 00 00 00 0a 00  |................|
> 00005ca0  00 55 d7 8c 08 83 0e 3f  00 88 0e c1 d7 01 02 00  |.U×....?...Á×...|
1080,1082c1106,1109
< 00005cc0  5a 39 c4 15 52 a5 33 c4  15 50 80 80 0d 80 0e 00  |Z9Ä.R¥3Ä.P......|
< 00005cd0  00 00 00 00 0d 80 00 00  00 00 00 00 0a 00 00 00  |................|
< 00005ce0  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 00 0a 09 00 f5  |Z9Ä.R¥3Ä.P.....õ|
> 00005cd0  22 68 65 6c 6c 6f 22 0d  80 0d 80 f5 22 68 65 6c  |"hello"....õ"hel|
> 00005ce0  6c 6f 22 0d 80 0e 00 00  00 00 00 00 00 00 00 00  |lo".............|
> 00005cf0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya

Post by Shaos »

С тех пор как я эту версию 4.0.4 форкнул в мае 2013, оно чуть дальше ушло в развитии, но мне не сильно понравилось направление:

https://github.com/cheveron/sebasic4/blob/SE-Basic-IV-Anya/docs/ChangeLog

Потом ещё появились SE Basic IV 4.1 Buffy:

https://github.com/cheveron/sebasic4/tree/SE-Basic-IV-Buffy

и SE Basic IV 4.2 Cordelia:

https://github.com/cheveron/sebasic4/tree/SE-Basic-IV-Cordelia

там всё совсем перелопачено, так что я пожалуй останусь в рамках 4.0.4 и если буду чего добавлять/фиксить, то нумеровать буду 4.0.4.1, 4.0.4.2 и т.д. ( т.к. автор уже ушел в 4.0.5, 4.0.6, 4.0.7 и планировал 4.0.8 )

P.S. Основная репа оригинального проекта по состоянию на 2025 год с версией 4.2: https://github.com/source-solutions/sebasic4/
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya

Post by Shaos »

Посмотрел отличия в ключевых словах между SE Basic IV, OpenSE Basic v3 (на котором он основан) и оригинальным ZX-бейсиком

SE Basic IV переименовал некоторые ключевые слова по сравнению с OpenSE:

ASN -> ASIN
ACS -> ACOS
LN -> LOG
FORMAT -> MODE
MOVE -> PUT
ERASE -> RESET
FLASH -> COLOR
BRIGHT -> CLUT
LPRINT -> SLOW
LLIST -> FAST

А некоторые слова уже были изменены в OpenSE:

CAT -> DIR -> UDG
INK -> PEN
GO TO -> GOTO
GO SUB -> GOSUB
COPY -> CALL

Новые слова, появившиеся в OpenSE:

DELETE
EDIT
RENUM
PALETTE
SOUND
ON ERROR

Чего-то мне кажется, что INK, FLASH и BRIGHT надо бы вернуть :roll:

ASN, ACS и LN наверное тоже (хотя тут похоже автор просто сделал как должно было быть в стандартных бейсиках)
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya

Post by Shaos »

С мая 2013 года SE Basic IV работает в моём эмуляторе компьютера Спринтер:

Image

viewtopic.php?p=104690#p104690

В новой версии эмулятора SprintEm это выглядит так:

Image
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Post by Shaos »

Shaos wrote: 09 Jun 2019 21:43 Посмотрел отличия в ключевых словах между SE Basic IV, OpenSE Basic v3 (на котором он основан) и оригинальным ZX-бейсиком

SE Basic IV переименовал некоторые ключевые слова по сравнению с OpenSE:
...
FLASH -> COLOR
BRIGHT -> CLUT
...
А некоторые слова уже были изменены в OpenSE:
...
INK -> PEN
...
Новые слова, появившиеся в OpenSE:
...
PALETTE
...
Чего-то мне кажется, что INK, FLASH и BRIGHT надо бы вернуть :roll:
Эти изменения (ну кроме разве что INK -> PEN) были сделаны ради поддержки ULAplus - если кто не знает это такое расширение юлы 15-летней давности, которая вводит палитру в ZX-спектрум и позволяет получать до 64 разных цветов одновременно на экране ZX-спектрума из 256 воможных кобминаций (причём "раскрашивать" можно уже существующие игры просто загружая 64-байтовую палитру перед запуском игры. ULAplus управляется двумя портами - 0xBF3B и 0xFF3B (причём во второй из них можно не только писать, но и читать оттуда, проверив таким образом программно, что ULAplus присутствует в системе и туда записано именно то, что предполагалось. При старте SE Basic IV инициализирует палитру ULAplus следующим образом (взято из моего эмуля):

Code: Select all

Write 0x40 to unknown port 0xBF3B
Write 0x00 to unknown port 0xFF3B
Write 0x00 to unknown port 0xBF3B
Write 0x0E to unknown port 0xFF3B
Write 0x01 to unknown port 0xBF3B
Write 0xF6 to unknown port 0xFF3B
Write 0x02 to unknown port 0xBF3B
Write 0xCD to unknown port 0xFF3B
Write 0x03 to unknown port 0xBF3B
Write 0x2A to unknown port 0xFF3B
Write 0x04 to unknown port 0xBF3B
Write 0x19 to unknown port 0xFF3B
Write 0x05 to unknown port 0xBF3B
Write 0x7D to unknown port 0xFF3B
Write 0x06 to unknown port 0xBF3B
Write 0xC9 to unknown port 0xFF3B
Write 0x07 to unknown port 0xBF3B
Write 0xFF to unknown port 0xFF3B
Write 0x08 to unknown port 0xBF3B
Write 0x00 to unknown port 0xFF3B
Write 0x09 to unknown port 0xBF3B
Write 0xCF to unknown port 0xFF3B
Write 0x0A to unknown port 0xBF3B
Write 0x0C to unknown port 0xFF3B
Write 0x0B to unknown port 0xBF3B
Write 0xFE to unknown port 0xFF3B
Write 0x0C to unknown port 0xBF3B
Write 0x02 to unknown port 0xFF3B
Write 0x0D to unknown port 0xBF3B
Write 0x38 to unknown port 0xFF3B
Write 0x0E to unknown port 0xBF3B
Write 0x80 to unknown port 0xFF3B
Write 0x0F to unknown port 0xBF3B
Write 0xFD to unknown port 0xFF3B
Write 0x10 to unknown port 0xBF3B
Write 0x86 to unknown port 0xFF3B
Write 0x11 to unknown port 0xBF3B
Write 0x31 to unknown port 0xFF3B
Write 0x12 to unknown port 0xBF3B
Write 0xD6 to unknown port 0xFF3B
Write 0x13 to unknown port 0xBF3B
Write 0x19 to unknown port 0xFF3B
Write 0x14 to unknown port 0xBF3B
Write 0xD0 to unknown port 0xFF3B
Write 0x15 to unknown port 0xBF3B
Write 0xED to unknown port 0xFF3B
Write 0x16 to unknown port 0xBF3B
Write 0x44 to unknown port 0xFF3B
Write 0x17 to unknown port 0xBF3B
Write 0xC5 to unknown port 0xFF3B
Write 0x18 to unknown port 0xBF3B
Write 0x47 to unknown port 0xFF3B
Write 0x19 to unknown port 0xBF3B
Write 0x2A to unknown port 0xFF3B
Write 0x1A to unknown port 0xBF3B
Write 0x8F to unknown port 0xFF3B
Write 0x1B to unknown port 0xBF3B
Write 0x5C to unknown port 0xFF3B
Write 0x1C to unknown port 0xBF3B
Write 0xE5 to unknown port 0xFF3B
Write 0x1D to unknown port 0xBF3B
Write 0x2A to unknown port 0xFF3B
Write 0x1E to unknown port 0xBF3B
Write 0x91 to unknown port 0xFF3B
Write 0x1F to unknown port 0xBF3B
Write 0x5C to unknown port 0xFF3B
Write 0x20 to unknown port 0xBF3B
Write 0xE5 to unknown port 0xFF3B
Write 0x21 to unknown port 0xBF3B
Write 0xCD to unknown port 0xFF3B
Write 0x22 to unknown port 0xBF3B
Write 0x4D to unknown port 0xFF3B
Write 0x23 to unknown port 0xBF3B
Write 0x0D to unknown port 0xFF3B
Write 0x24 to unknown port 0xBF3B
Write 0x78 to unknown port 0xFF3B
Write 0x25 to unknown port 0xBF3B
Write 0xF5 to unknown port 0xFF3B
Write 0x26 to unknown port 0xBF3B
Write 0x21 to unknown port 0xFF3B
Write 0x27 to unknown port 0xBF3B
Write 0x6B to unknown port 0xFF3B
Write 0x28 to unknown port 0xBF3B
Write 0x5C to unknown port 0xFF3B
Write 0x29 to unknown port 0xBF3B
Write 0x46 to unknown port 0xFF3B
Write 0x2A to unknown port 0xBF3B
Write 0x78 to unknown port 0xFF3B
Write 0x2B to unknown port 0xBF3B
Write 0x3C to unknown port 0xFF3B
Write 0x2C to unknown port 0xBF3B
Write 0x77 to unknown port 0xFF3B
Write 0x2D to unknown port 0xBF3B
Write 0x21 to unknown port 0xFF3B
Write 0x2E to unknown port 0xBF3B
Write 0x89 to unknown port 0xFF3B
Write 0x2F to unknown port 0xBF3B
Write 0x5C to unknown port 0xFF3B
Write 0x30 to unknown port 0xBF3B
Write 0xBE to unknown port 0xFF3B
Write 0x31 to unknown port 0xBF3B
Write 0x38 to unknown port 0xFF3B
Write 0x32 to unknown port 0xBF3B
Write 0x03 to unknown port 0xFF3B
Write 0x33 to unknown port 0xBF3B
Write 0x34 to unknown port 0xFF3B
Write 0x34 to unknown port 0xBF3B
Write 0x06 to unknown port 0xFF3B
Write 0x35 to unknown port 0xBF3B
Write 0x17 to unknown port 0xFF3B
Write 0x36 to unknown port 0xBF3B
Write 0xCD to unknown port 0xFF3B
Write 0x37 to unknown port 0xBF3B
Write 0x00 to unknown port 0xFF3B
Write 0x38 to unknown port 0xBF3B
Write 0x0E to unknown port 0xFF3B
Write 0x39 to unknown port 0xBF3B
Write 0xF1 to unknown port 0xFF3B
Write 0x3A to unknown port 0xBF3B
Write 0x3D to unknown port 0xFF3B
Write 0x3B to unknown port 0xBF3B
Write 0x20 to unknown port 0xFF3B
Write 0x3C to unknown port 0xBF3B
Write 0xE8 to unknown port 0xFF3B
Write 0x3D to unknown port 0xBF3B
Write 0xE1 to unknown port 0xFF3B
Write 0x3E to unknown port 0xBF3B
Write 0xFD to unknown port 0xFF3B
Write 0x3F to unknown port 0xBF3B
Write 0x75 to unknown port 0xFF3B
В первый порт записывается номер цвета (0x00...0x3F), а во второй - значение цвета (в формате G3R3B2).
Первая запись нуля в 0x40 означает выбор видеорежима (в данном случае 0 значит выключить ULAplus).
Подробнее про ULAplus: https://zxdesign.itch.io/ulaplus

В SE Basic IV новые ключевые слова введены как раз для управления ULAplus:
CLUT <0-3> [;]
A command used to set the CLUT.

COLOR <0-255> [;]
A command used to set the permanent attribute.

PALETTE <register>,<value>
A command used to set the colours in computers fitted with the ULAplus display chip.

RESET
Use this command to reset the default palette.
Пара BRIGHT и FLASH (старшие 2 бита атрибутов) теперь называется CLUT и задаёт одну из четвертей палитры ULAplus, при этом цвета знакоместа (или плашки в случае мультиколора) выбираются в зависимости от значений INK и PAPER:

Code: Select all

    ink color = (FLASH * 2 + BRIGHT) * 16 + INK
    paper color = (FLASH * 2 + BRIGHT) * 16 + PAPER + 8
https://gitlab.com/retro-forks/sebasic4/-/wikis/ULAplus%20Support
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Post by Shaos »

Другие порты в которые пишет этот бейсик:

Code: Select all

Extended port 0x7FFD = 0x07
Extended port 0x7FFD = 0x06
Extended port 0x7FFD = 0x05
Extended port 0x7FFD = 0x04
Extended port 0x7FFD = 0x03
Extended port 0x7FFD = 0x02
Extended port 0x7FFD = 0x01
Extended port 0x7FFD = 0x10
Write to port xxFF = 0x00
Write to Sinclair port xxFE = 0x00
,,,
Write to port xxFF = 0x3E
Extended port 0x7FFD = 0x08
Extended port 0x7FFD = 0x0F
Extended port 0x7FFD = 0x08
Extended port 0x7FFD = 0x0F
Extended port 0x7FFD = 0x08
Write 0x07 to unknown port 0xC0F5
AY-data port 0xBFFD = 0xFF
Write 0xFF to unknown port 0x00F6
Write to Sinclair port xxFE = 0x00
Extended port 0x7FFD = 0x0F
Extended port 0x7FFD = 0x08
Extended port 0x7FFD = 0x0F
Extended port 0x7FFD = 0x08
Extended port 0x7FFD = 0x0F
Extended port 0x7FFD = 0x08
Порт 0x7FFD используется чтобы переключать в последней четверти памяти нулевую и седьмую банки (в седьмой находится второй экран) и взведённый бит 3 означает, что на экране показывается видеобуфер из банка 7 (однако в данном случае как бы оба буфера участвуют в формировании графики т.к. используется режим hi-res - см. далее).

Порт 0xFE используется для задания чёрного бордюра.

Порт 0xFF используется чтобы установить режим высокого разрешения 512x192 (использующий оба видеобуфера) с цветом белым по чёрному (путём записи туда значения 0x3E). В документации по ZX Spectrum SE постоянно упоминается, что он повторяет Timex режимы (как этот 512x192), но на самом деле это не так - в таймексе не было банок - там было 48 килобайт фиксированного ОЗУ и видеопамять всегда находилась во второй четверти памяти - либо по адресу 0x4000 (как обычно), либо по адресу 0x6000 - расширенные же режимы использовали обе области - в режиме hi-color вторая область использовалась для кранения мультиколорных атрибутов, а в режиме hi-res чётные и нечётные плашки брались из разных экранов (со смещениями 0x4000 и 0x6000) однако в SE второй экран был в 7 банке и мог отключатся и подключаться (интересно что в Балтике мультиколор реализован чуть иначе - там область расширенных атрибутов шла непосредственно за графикой т.е. начиная с адреса 0x5800, а не 0x6000 как в Timex и в целом оно занимало область от 0x4000 до 0x6FFF т.е. по сути мы видим ТРИ РАЗНЫХ СПОСОБА представлять хардверный мультиколор)...

P.S. Запись в порт 0xC0F5 по-видимому должно устанавливать команду AY и на Timex (порт #F5), и на ZX (частично декодируемый #0xfffd):
Screenshot from 2025-10-19 11-52-02.png
А вот AY-данные затем записываются отдельно для Timex (порт #F6) и для ZX (порт #BFFD)...
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Post by Shaos »

Примеры использования ULAplus с почившего уже сайта:
Screenshot from 2025-10-19 10-11-33.png
What is HAM256 mode?
This is a software video mode that changes the palette while the screen is being drawn. By restricting each of the 24 screen rows to two of the four CLUTs it is possible to update one pair of CLUTs while the other is being displayed. This gives a maximum of 32 colours per row and a theoretical limit of 256 colours on screen at once. A conversion tool and display code are in development
P.S. Интересно, что картинки в нижнем ряду выглядят как пережатые JPEG-и (с квадратными артефактами) :lol:
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24344
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: SE Basic IV 4.0 Anya (с поддержкой ULAplus)

Post by Shaos »

Ещё из интересного - этот бейсик имеет команды управления скоростью процессора:

FAST

Code: Select all

Write 0x03 to unknown port 0x8E3B
SLOW

Code: Select all

Write 0x00 to unknown port 0x8E3B
Порт #3B в известных документациях обозначен как канал B микросхемы 8255-2 в спектрум-периферии MB-02+ однако оно вроде как не управляет скоростью процессора...

P.S. А хотя вот же в исходниках есть:

Code: Select all

slow:
	xor		a						; 3.5Mhz
	jr		prism

fast:
	ld		a, %00000011			; full speed

prism:
	ld		bc, 0x8e3b				; ZX Prism port
	out		(c), a
	ret
ZX Prism - это "FPGA based Spectrum Compatible computer": https://zxprism.blogspot.com