PDA

Просмотр полной версии : CHIP8 Emulator



NEO SPECTRUMAN
14.03.2017, 00:33
NSChip - Chip8 эмулятор для ZX Spectrum 48

https://jpegshare.net/images/3c/f5/3cf5aed04455f199ecfee34b02e5070a.png https://jpegshare.net/images/24/cc/24cc1b5093c5d68d1d833558e572b382.png
https://jpegshare.net/images/3d/dd/3ddd45b55979bd5281e9fe237664a62f.png https://jpegshare.net/images/96/22/962289f4eb126bb390491ac1a09338b4.png

NSChip

На данный момент поддерживается (пока только на уровне перекомпиляции сорцов)
Chip 8 + режимы совместимости с разными трактованиями его команд (включая идиотизм octo)
из поддержки super chip только RPL флаги и дополнительный набор крупных шрифтов

Режими масштабирования 1х, 2х, 4х
Чересстрочник для повышения скорости и снижения мерцания
Frame skip
Ограничение на число команд за фрейм
Смена частоты таймеров (правда, при частоте дискретизации в 50Гц)
Смена шрифтов (на них тоже нет стандарта)
Примитивное биперное жужжание
Есть возможность написания своих биперных движков (в отличие от PC-шных эмуляторов) так как спецификация не отрицает того, что можно быстро щелкать пищалкой
Несколько speedhack-ов которые не дают практически никакого прироста скорости

Видео память и стек лежат за пределами адресуемой памяти
но запись в них возможна так же как и убийство эмулятора...

Чего нет
Нормального sprite wrap-а

Стек на данный момент не эмулируется
в место него используется стек z80
так что можно легко убить эмулятор стеком

Так как работа с vf нормально нигде не задокументирована.
то возможны всякие грабли со всякими add vf,vf.
режимов совместимости как в Octo для vf пока нет.

Управление
клавиши мапятся на

[1][2][3][C] > [1][2][3][4]
[4][5][6][D] > [Q][W][E][R]
[7][8][9][E] > [A][S][D][F]
[A][0][B][F] > [Z][X][C][V]


-поддержка super chip (с его 128х64)
-поддержка xo chip (с его 4 цвета на точку и звуком
(но будет ли поддержана его адресация всех 64К неизвестно))
-поддержка chip 8 hires 64х64 итд (если найду эмулятор который его поддерживает, или нормальное описание (предложение а давайте проверять а не лежит ли в памяти игра использующая hires и включать его если лежит... вызывает у меня...))
-возможно частичная поддержка mega chip
основная проблема отсутствие, какого либо эмулятора
жирный и цветной экран
и возможность адресовать 256T/70050Е памяти
любые другие расширения




для Windows XP
1. положить ch8\c8 файлы в папку nschip\fastchip
2. drag&drop-нуть их на chip2sna.bat (при большом количество кинутых файлов выдаст ошибку!!!!)
3 .....
4 .....
5 PROFIT!!!



если это не работает
находим в самом конце nschip.asm/fastchip.asm
строки

org $8200
incbin chiptemp.bin
и подменяем chiptemp.bin на свой ****.ch8

или переименовываем свой ****.ch8 в chiptemp.bin и ложим его в nschip_src/fastship_src

после чего сами компилируем nschip.asm/fastchip.asm



SJ-ChipASM


для того чтобы получить все плюшки sjasm-а
такие как lua
и не нужно вылавливать новых глюков очередного левого компилятора
большая часть команд асм-а должна работать


https://jpegshare.net/images/b8/2c/b82c3d480eed2a0ef9aa0c33b3795eb9.png


Ахтунх!!!

sjasm чувствителен к регистру

по этому никаких заборчиков
команды cLs, ClS, Cls не будут скомпилированы!!!
только cls, CLS

желательно писать команды только мелким шрифтом!

не желательно использовать название меток содержащие ch8_



регистры именуются
v0-vF именование регистров не чувствительно к регистру! (можно и vf,vF,VF,Vf)
v0-v15

местами могут прокатить
$0-$F
0-F

но лучше использовать v0-vF



некоторые команды z80 style не поддерживается (помечены красным в таблице)
их нужно менять автозаменой

[i]\(i) следует менять на iIi



так же впилена проверка на простейшие ошибки\очепятки
правда толку от них не много

mov v0,453
выдаст "error mov vx,xx vx > FF"
и скомпилируется как 60С5

если размер кода превысит $E00
вылезет "error out of memory"

">$FFF !!!!!!"
будет когда полученный код уже физически нельзя запустить на chip 8



есть 2 варианта компиляции команд shr\shl

ch8_op8x06mode = 0 shr vx скомпилируется как 8x06
ch8_op8x06mode = 1 shr vx скомпилируется как 8xx6 (shr vx,vx)

ch8_op8x0Emode = 0 shl vx скомпилируется как 8x0E
ch8_op8x0Emode = 1 shl vx скомпилируется как 8xxE (shl vx,vx)

ни один из них не гарантирует правильную работу на всем
в первом случае команда может трактоваться как sh* vx,v0 и результат окажется не в том регистре
во втором случае команда вообще может не распознаться (будет ли она просто пропущена или повесит эмуль не известно)

при необходимости скомпилировать команды shr vx,vy shl vx,vy
используем
defb $8x ,$y6 ;shr vx,vy
defb $8x ,$yE ;shl vx,vy

привет криворуким писателям мануалов
и писателям sjasm-а с его фиксированным количеством параметров для макросов...



Последние версии (на 2020.11.05)

NSChip r0173
http://www.mediafire.com/file/d9b77d87j2etxm9/NSChip_r0173.7z/file

SJ-ChipASM_r0069
http://www.mediafire.com/file/flqitefu3h444p8/SJ-ChipASM_r0069.7z/file

старый пак всё в одном на 2017.03.13
http://www.mediafire.com/file/uyl23k6gldndzdc/NSChip_pack_20170313.zip/file

NSChip - эмулятор для спека
FastChip - более быстрый эмулятор для спека но с меньшими возможностями
SJChipASM - набор макросов для sjasmplus для компиляции chip8 кода
Azunyan8_v3 - эмулятор для ПЦ с отладчиком
Fish 'N' Chips - еще один эмулятор для ПЦ

examples - набор софта для chip8 и готовые sna для запуска
OTLA - программа для ускоренной загрузки sna на реальном железе

Monobeep - простой биперный движок для chip8 + сорец
beep - примеры его звучания

chipenstein_den00bed_mod - немного допиленный движок вульфа + сорец
trip8_den00bed - демкААА поправленная для нормальной работы + сорец

jerri
14.03.2017, 09:36
Ы

что это и как управляется?

b2m
14.03.2017, 09:59
Я делал в своё время версию для Микро-80 (но немного попроще): http://zx-pk.ru/threads/25685-yut-88-chip-8-virtualnaya-mashina.html?p=833552&viewfull=1#post833552

NEO SPECTRUMAN
14.03.2017, 11:49
что это и как управляется?

https://en.wikipedia.org/wiki/CHIP-8

это такая виртуальная платформа конца 70-х годов для всяких игр

славиться своей крайне низкой производительностью
ужасной работой с графикой
и ужасной документацией из за чего софт который должен работать везде
работает только на части интерпретаторов
и еще тем что эмуляторы этой платформы пишет каждый второй школьник
не забывая называть его одним и тем же именем chip8 emulator
и качества такого что совместимость все ниже и ниже


Управление
стандартные для ПЦ клавиши
1234
qwer
asdf
zxcv
как именно на них располагать управление программистам никто не говорил
по этому практически везде нужно использовать метод научного тыка и нащупывать где же и что
доставляют игры в которых gameover наступает через пол секунды после старта
и пока найдешь чем же рулить...



Я делал в своё время версию для Микро-80 (но немного попроще)
это вроде у меня не много по проще
у меня еще нет super chip-а
и будет он не скоро

...разве что я прилагаю недокомпилятор в комплекте (со своими задачами он справляется на ура)...

NEO SPECTRUMAN
21.07.2019, 23:56
перепилил под быстрые таблицы переходов :v2_dizzy_roll:

zebest
18.02.2020, 00:06
...разве что я прилагаю недокомпилятор в комплекте (со своими задачами он справляется на ура)...
Занятная довольно платформа :-)) Постепенно возникло несколько вопросов - какая стандартная скорость (и частота:) работы ? При тактовой 1 кГц ? Или комуу сколько нравится, и ориентироваться по эмууляторам ?
Поиграл в тетрис, сокобан, теннис - вполне весело :) Поискал свою любимую игруху под все платформы - "2048"
Оказывается как бы и есть
https://www.youtube.com/watch?v=cOle-tX91b8
но как бы только в исходниках :(видимо, чтобы скучно не было собирать:)
https://github.com/gergoerdi/2048-chip8
У меня даже как бы и собралась, даже какие-то полосочки пытается рисовать -ну и на е-том - все.
или я криво странслировал, или одно из двух.
При компиляции смущает строка-
> - or error mov xx > FF

хотя в коде ни одной команды mov. обидно, да??
ну и под свежими версиями ужасма это работать будет??
А так да, интересный проект, спасибо.

NEO SPECTRUMAN
18.02.2020, 00:27
Постепенно возникло несколько вопросов - какая стандартная скорость (и частота работы ? При тактовой 1 кГц ? Или комуу сколько нравится, и ориентироваться по эмууляторам ?
кому сколько нравиться
никакой стандартной скорости НЕТ

некоторым поделиям с привязкой к частоте кадров
нужна максимально возможная скорость
(например для chipnstein
но мой эмуль не выдает нужной скорости
так же выдаваемую скорость некак померять :)
тк любой счетчик ее кардинально просаживает
а последние нерелиженные версии не имеют общего декодера команд)

вощем
в каждом отдельном случае нужно подбирать ручками :)

так же как и управление



> - or error mov xx > FF
ну у меня как бы НЕ заявлена поддержка какого либо существующего chip8 асма

написано для самого себя
чтоб не мучатся с кривыми компиляторами

- - - Добавлено - - -


> - or error mov xx > FF

хотя в коде ни одной команды mov. обидно, да??

на ld тоже ругается со словами mov
мнемоники в стиле z80 поддержаны только слегка
возможностей макросов для полной поддержки недостаточно...


ну и вся детекция ошибок
очень простая
и особо она не поможет




У меня даже как бы и собралась, даже какие-то полосочки пытается рисовать -ну и на е-том - все.
или я криво странслировал, или одно из двух.
судя по логу
при компиляции того сорц
там 100500 мнемоник которые у меня просто не поддерживаются
(тот же jump)

если пытался адаптировать
то закидывай сорец посмотрим


в принципе все что можно
можно попытаться добавить...

что это за асм у него такой?
интересно

zebest
18.02.2020, 00:41
асм у всех един, мнемоники - разные)) я за несколько часов странслировал и почти понял мнямоники)) но видимо или там или там апшЫпка.

NEO SPECTRUMAN
18.02.2020, 00:45
А есть готовый бинарник для сравнения

прям щас некогда
ночью посмотрю что не так

zebest
18.02.2020, 01:00
ну если бы. говорю же - не нашел компиленого, мода если не всех, то у многих - исходники без собранного в единую кучу выкладывать.
в исходниках , например есть команда
sub v3, 1
а на самом деле такой нету, есть только sub v3, v1
но возможно автор так и имел в виду. ну и т.д.

NEO SPECTRUMAN
18.02.2020, 01:57
Мдя
а нативный компилер под линупс
и тоже в виде сорцов... :v2_dizzy_facepalm:

ладно посмотрим
но задача несколько усложняется...

- - - Добавлено - - -

ну сходу вижу у тебя все call
заменены на jmp
изза чего
ничего явно не будет работать

- - - Добавлено - - -

держи более рабочий бинарник
https://dropmefiles.com/feV7y

- - - Добавлено - - -

вот сорец
поменял
jmp на call
и sys на jmp

НО 100% что то отвалилось
(не знаю как оно должно работать
на вид не работает
хотя еще нужно поклацать режимы совместимости в самом nschip-е
тк много чего не работает изза разного трактования команд)

тк что это скорей кривизна трансляции
проверяй



;;; 2048 game for CHIP-8
;;;
;;; The board is stored as 16 consecutive bytes, each with a value between 0 and 11
;;; 0 is an empty tile
;;; 1..10 is a tile with values 2..1024
;;; 11 is the target tile: as soon as we get an 11 tile, the user has won
;;;
START:
call NEWGAME
call DRAW_GRID
call PLACE_RANDOM_TILE
call PLACE_RANDOM_TILE

;; call SLIDE_UP
;; call BLIT

;; call DRAW
LOOP:
call DRAW
key va
call DRAW

ld vd, 0
skne va, 6
call SLIDE_RIGHT
skne va, 4
call SLIDE_LEFT
skne va, 8
call SLIDE_DOWN
skne va, 2
call SLIDE_UP

skeq vd, 0
call PLACE_RANDOM_TILE

jmp LOOP

DRAW_GRID:
mvi GRID
ld v1, 0 ; K := 0
ld v2, 15 ; X := 15
ld v3, 0 ; Y := 0
DRAW_GRID_LOOP:
skne v1, 16 ; while (K != 16)
ret
drw v2, v3, 8

add v1, 1 ; K += 1
add v2, 8 ; X += 8
skeq v2, 47
jmp DRAW_GRID_LOOP

;; Start new row
mvi GRID_RIGHT
drw v2, v3, 8
ld v2, 15 ; X := 15
add v3, 8 ; Y += 8
mvi GRID
skne v3, 24 ; for bottommost row, use special sprite
mvi GRID_BOTTOM
jmp DRAW_GRID_LOOP

BLIT:
ld v1, 0
BLIT_LOOP:
skne v1, 16
ret
mvi NEW_BOARD
adi v1
ldr v0
mvi BOARD
adi v1
str v0
ld v0, 0
mvi NEW_BOARD
adi v1
str v0
add v1, 1
jmp BLIT_LOOP

;;; ROTATE
;;;
;;; Maps
;;;
;;; 0123
;;; 4567
;;; 89ab
;;; cdef
;;;
;;; to
;;;
;;; c840
;;; d951
;;; ea62
;;; fd73
;;;
;;; Use: V0: TMP
;;; V1: K
;;; V2: K'
;;; V3: ROW
;;; V4: NEW_ROW
ROTATE:
call ROTATE_INT
call BLIT
ret
ROTATE_INT:
ld v1, 0
ld v2, 3
ld v3, 3
ROTATE_LOOP:
skne v1, 16
ret

mvi BOARD ; TMP := BOARD[K]
adi v1
ldr v0

mvi NEW_BOARD ; NEW_BOARD[K'] := TMP
adi v2
str v0

add v1, 1 ; K += 1
add v2, 4 ; K' += 4

ld v4, $11 ; New row?
and v4, v1
skeq v4, 0
jmp ROTATE_LOOP

sub v3, 1 ; ROW -= 1
ld v2, v3 ; K' := ROW
jmp ROTATE_LOOP

;;; SLIDE_LEFT
;;; Vars: V0: TMP
;;; V1: K
;;; V2: K'
;;; V3: LAST
;;; V4: END_ROW
;;; V5: ROW
;;; V6: MATCH
SLIDE_LEFT:
call SLIDE_LEFT_INT
call BLIT
ret

SLIDE_LEFT_INT:
ld v1, 0 ; K := 0
ld v2, 0 ; K' := 0
ld v3, 0 ; LAST := 0
ld vf, 0 ; WIN := 0
ld v5, 0 ; ROW := 0

SLIDE_LEFT_ROW:
skne v1, 16
ret

mvi BOARD ; TMP := BOARD[K]
adi v1
ldr v0

skne v0, 0
jmp SLIDE_LEFT_NEXT

ld v6, 0
skne v0, v3
ld v6, 1

skne v6, 1 ; IF TMP == LAST then MERGE_LEFT
call MERGE_LEFT
skeq v6, 1
ld v3, v0

mvi NEW_BOARD ; NEW_BOARD[K'] := TMP'
adi v2
str v0

skeq v1, v2 ; vd |= v1 == v2
ld vd, 1

add v2, 1 ; K' += 1

SLIDE_LEFT_NEXT:
add v1, 1 ; K += 1

ld v4, $11 ; New row?
and v4, v1
skeq v4, 0
jmp SLIDE_LEFT_ROW

add v5, 1 ; ROW += 1
ld v3, 0 ; LAST := 0
ld v2, 0 ; K' := ROW * 4
skne v5, 1
ld v2, 4
skne v5, 2
ld v2, 8
skne v5, 3
ld v2, 12
jmp SLIDE_LEFT_ROW

SLIDE_DOWN:
call ROTATE
call SLIDE_LEFT
call ROTATE
call ROTATE
call ROTATE
ret

SLIDE_RIGHT:
call ROTATE
call ROTATE
call SLIDE_LEFT
call ROTATE
call ROTATE
ret

SLIDE_UP:
call ROTATE
call ROTATE
call ROTATE
call SLIDE_LEFT
call ROTATE
ret

;;; MERGE
;;; InOut: V0: TMP
;;; V2: K'
;;; V3: LAST
MERGE_LEFT:
add v0, 1
ld v3, 0
sub v2, 1
ret

;;; DRAW_TILE
;;; In: V1: K
;;; V2: X
;;; V3: Y
;;; Use: V0: TMP
DRAW_TILE:
mvi BOARD ; TMP := BOARD[K]
adi V1
ldr V0

skne v0, 0 ; if TMP == 0 then done
ret

sub v0, 1 ; drw digit for TMP-1 at (X, Y)
font v0
drw v2, v3, 5
ret

DRAW:
ld v1, 0 ; K := 0
ld v2, 15+3 ; X := 15+3
ld v3, 0+2 ; Y := 0+2

DRAW_LOOP:
skne v1, 16 ; while (K /= 16)
ret
call DRAW_TILE
add v1, 1 ; K += 1
add v2, 8 ; X += 8
skeq v2, (3*16-1)+3 ; Start new row?
jmp DRAW_LOOP
ld v2, 15+3 ; X := 15+3
add v3, 8 ; Y += 8
jmp DRAW_LOOP

;;; PLACE_RANDOM_TILE
PLACE_RANDOM_TILE:
rnd v2, 7 ; Place a 1 tile with prob 1/8 and a 0 tile with prob 7/8
ld vb, 1
skne v2, 0
ld vb, 2
call PLACE_TILE
ret

;;; PLACE_TILE
;;; Input: VB: TILE
;;; Use: V0: TMP
;;; V1 : K
;;; V2 : TARGET
PLACE_TILE:
rnd v2, 15
;; Pick TARGET'th empty square
ld v1, -1
PLACE_TILE_SCAN:
add v1, 1
skne v1, 16
ld v1, 0

mvi BOARD ; TMP := BOARD[K]
adi v1
ldr V0

skeq V0, 0 ; If TMP == 0 then next
jmp PLACE_TILE_SCAN

sub v2, 1 ; Is this the TARGET'th empty square?
skeq v2, 0
jmp PLACE_TILE_SCAN

ld v0, vb ; BOARD[K] := TILE
str v0
ret


;;; NEWGAME: fill BOARD with zeroes
NEWGAME:
ld v1, 0
ld v0, 0
NEWGAME_LOOP:
skne v1, 16
ret
mvi BOARD
adi v1
str v0
add v1, 1
jmp NEWGAME_LOOP

BOARD:
.ds 16
NEW_BOARD:
.ds 16

GRID: defb %11111111
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000

GRID_BOTTOM:
defb %11111111
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %11111111

GRID_RIGHT:
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000
defb %10000000




- - - Добавлено - - -

так же на вид (вроде бы sjasm переваривает? такие макросы)
я могу поддержать команды через точку
вида skip.ne

возможно получится компилировать этот асм из коробки

- - - Добавлено - - -

хотя отличить вот это друг от друга... :v2_dizzy_facepalm:
скорей всего не получится



loadvX, time
Load register vXwith the value of the time register.
Code generated: 0xFX07
load time,vX
Load the time register with the value of register vX.
Code generated: 0xFX15
load tone,vX
Load the tone register with the value of register vX.
Code generated: 0xFX18
load i, addr
Load register i with the addr.The addrmust be in the range 0x200 to 0xFFF.
Code generated: 0xANNN,where NNN is the low12bits of addr.

zebest
18.02.2020, 02:08
ну так да, уже получше, поле рисуется, и даже цифры, но видимо где то "лишнее" заменилось. Прогресс есть.

NEO SPECTRUMAN
18.02.2020, 02:11
Прогресс есть.
открой сравнение тоталкомандером
и посмотри сравни расхождения

а так я попробую впилить поддержку того асма
но это затянитсо на какое то время

я то уже и забыл что к чему :)

NEO SPECTRUMAN
18.02.2020, 05:43
кстате у него очепятки в инструкции



jump addr
Jump toaddr.The addrmust be even. The addrmust be in the range 0x200 to 0xFFE. The
addr expression must be relative tosome label.
Code generated: 0x0NNN,where NNN is the low12bits of addr.

jump addr,v0
Jump toaddr+v0. The addrmust be even. The addrmust be in the range 0x200 to 0xFFE. The
addr expression must be relative tosome label. It is a run-time error if the value of register v0 is
odd. It is a run-time error if addr+v0 is not in the range 0x2000 to 0xFFE.
Code generated: 0xBNNN,where NNN is the low12bits of addr.

call addr
Call subroutine at addr.The addrmust be even. The addrmust be in the range 0x200 to 0xFFE.
The addr expression must be relative toalabel. It is a run-time error if there are too many
subroutine calls, although you may safely assume at least 32 levels.
Code generated: 0x1NNN,where NNN is the low12bits of addr.

тк jmp это 1***
а call 2***

a 0***
это как раз sys
вызов нативного кода проца (который обычно нигде не эмулируется)
и часть адресов которых уже давно забита под другие расширения...


да и вощем там еще много напутано...
всякие свои велосипеды
и даже изобрел 2 своих левых команды...

интересно его компилятор хоть правильно компилит?
или компилит туже ахинею что написана в мануале?...

zebest
18.02.2020, 11:09
кому сколько нравиться
никакой стандартной скорости НЕТ

некоторым поделиям с привязкой к частоте кадров
нужна максимально возможная скорость
(например для chipnstein
но мой эмуль не выдает нужной скорости
так же выдаваемую скорость некак померять
Ну мой то в эфсипыгыа любую скорость может изобразить. Спрайтовый модуль тактируеЦЦа хоть 8 Мгц, хоть 100 Мгц (можно и больше). Процессор сейчас у мну на 4 кГц!! (кошмарная скорость. да?) Можно те же 100 втуда подать. а так то на 20 кГц уже сильно быстро.
Игру я впобедил!!)
https://s.micp.ru/g8Syy.jpg
у этого же автора совсем в другом проекте скомпиленный файл нашел!!!
https://github.com/gergoerdi/chip8-clash/tree/master/games
если подизассемблить - можно вычислить наверное "неправильные" комманды. Вот только смысл теперь ?))
(смысл конечно есть, сделать нормальный листинг этой игры под УжаСм)
А,да,, в игрухе максимальную скорость в эмуле поставил, и то иногда некомфортно. думает над ходами ))
Звук я так понимаю сам проц не генерит, а только отрезки времени, в течении которых включается\выключается внешний генератор??

NEO SPECTRUMAN
18.02.2020, 13:18
Звук я так понимаю сам проц не генерит, а только отрезки времени, в течении которых включается\выключается внешний генератор??
до
но не кто не запрещает
быстро включать и выключать пищалку

но большинство (все?) ПЦ-шных эмуляторов
такое не понимают

вот на старых платформах
такое возможно будет работать

у меня работает
пищите сколько влезет :)

- - - Добавлено - - -


смысл конечно есть,
угу
по ней сверю правильность компилирования
того асма

- - - Добавлено - - -

а так еще интересная игра
ChipWar
правда она написана под octo
и работает только в octo и в моем эмуле (при должных режимах совместимости)
хотя щас вполне запустил в fish n chips-е
и на вид работает

правда уровней там нет
и она быстро надоедает...

- - - Добавлено - - -


у этого же автора совсем в другом проекте скомпиленный файл нашел!!!
также я нашел другую версию
не знаю той же игры или нет
но с таким же названием
от другого автора
https://boomlin.de/findings/ch8

zebest
18.02.2020, 14:33
но не кто не запрещает
быстро включать и выключать пищалку

но большинство (все?) ПЦ-шных эмуляторов
такое не понимают

ну у меня можно сделать хоть так. хоть так. Но по простому варианту - щелчки получаются, а по писишному - семпл играет, ну и коммутируется.
На АЕОН-е дошел до числА "А" - 4096 если в обычном варианте)
https://s.micp.ru/0Jv9y.jpg
при скорости проца в 4кГц - напряжно, уж отчень медленно, видимо буду делать турбу х1-х2-х4-х8



также я нашел другую версию
не знаю той же игры или нет
но с таким же названием
от другого автора
https://boomlin.de/findings/ch8
название похоже, но чет игра совершенно другая, пока логику не понял еще)

NEO SPECTRUMAN
18.02.2020, 14:56
Но по простому варианту - щелчки получаются, а по писишному - семпл играет,
ну дык
а ты делай переинициализацию пищалки
чтоб играние семпла начиналось с начала
сразу в момент появление на таймере больше 0

тогда сохраняется и пищание семпла
и возможность вывода своего звука

zebest
18.02.2020, 18:30
у мну с процессора чисто сигнал идет
.audio_enable (audio_enable),
0\1, а длительность я так понял программно на этом выводе выставляют.
Подизамблил 2048, не нашел как выгружать чисто asm, поэтому скопировал весь листинг
upd:
Привел в божеский вид, собирается в ужасме ровно.

NEO SPECTRUMAN
19.02.2020, 14:28
теперь ошибки будут немного более осмысленные и более заметны
https://jpegshare.net/images/e0/05/e005e730f64196236145203c5df7d6d2.png

пока нет возможности написать текущую строку
но подписал текущий адрес
уже будет легче искать косяки

может еще Ped7g вправит sjasm когда нибудь
для возможности выдачи текущей строки
(lua выдает только строку в макросе (в месте его объявления))


так же нашел способ как отличать макросы с аргуменатами от макросов без аргументов
с одинаковыми именами
(например нужно для того чтобы отличить jp xxx от jp v0,xxx)
конечно ошибок сыпетсо море
но в результате код генерит правильный

может удастсо запилить z80 стайл асм-а

- - - Добавлено - - -

- - - Добавлено - - -

нифига
оно не переваривает если аргумент у макроса не цифры а например метки :v2_dizzy_facepalm:

нет не хочет оно все работать...
можно макросы только с 1 опциональным аргументом
но не с 2-мя...
так что z80 подобные мнемоники откладываются до лучших времен

zebest
02.03.2020, 00:54
может еще Ped7g вправит sjasm когда нибудь
Вотда. компилю свою подделку. (дизасмил zero с помощью Гидры. ее бы чуть подправить то жи?)
так вот. версия 1.13.1 - компилит. и вообще без ошибок в логах.
послендяя версия 1.14.5 - то жи компилит. но при этом в логах куча ошибок.
Естественно вернулся на предыдущую.

NEO SPECTRUMAN
02.03.2020, 12:25
Естественно вернулся на предыдущую.
угу потом гляну

щас переписываю вообще
теперь будет поддержка большей части команд z80 стайла
пока все готово на 33%


вот лог детектилки

> ld vx,xx detected
> ld vx,xx detected
> ld vx,-xx detected
> ld vx,xy detected
> ld i,xxx detected
> ld i,xxx detected
> ld i,-xxx detected
> ld vx,dt detected
> ld vx,k detected
> ld dt,vx detected
> ld st,vx detected
> ld f,vx detected
> ld hf,vx detected
> ld b,vx detected
> ld _i_,vx detected
> ld vx,_i_ detected
> ld r,vx detected
> ld vx,r detected

на код

ld v3,0
ld v1,$40
ld v1,-$40

ld v2,v3


ld i,0
ld i,$321
ld i,-$321

ld v3,dt
ld v4,k
ld dt,v5
ld st,v6
ld f,v9
ld hf,v8
ld b,v1

ld _i_,v4
ld v5,_i_

ld r,v7
ld v4,r

теперь детектятся отрицательные числа и не пишитсо при этом ошибка

местами нашел были мои ошибки...

так же нужна альтернатива для [i]
чтобы можно было быстро менять ее автозаменой
пока будет _i_

может iii iIi ?

zebest
02.03.2020, 13:23
так же нужна альтернатива для [i]
чтобы можно было быстро менять ее автозаменой

Единственный вменяемый диз-асм который нашел - Гидра.
Там модУли видимо на джаве, в них так типа:

#:ld i, addr is op=0xa & i & addr { i = zext(addr); }
я заменил на
:mvi addr is op=0xa & addr { addr = zext(addr); }
ну и другие выглядят так

:ld [i], v0 is op=0xf & i & rx=0 & kk=0x55 & v0 {
*:1 i+0 = v0;


# load registers from memory
:ld v0, [i] is op=0xf & i & rx=0 & kk=0x65 & v0 {
v0 = *:1 i+0;


Вот тут бы привести к общемуу знаменателю - или у тебя, или в гидре, чтобы заменять поменьше )

NEO SPECTRUMAN
02.03.2020, 17:50
ну mvi в 8080 стиле уже и так есть


сделать [i] в sjasm-е не получается
ни дефайном ни другим извращением

возможно при помощи сильного извращения можно будет сделать
{I}
с вероятностью ложного вставляния вместо
ld v0,$FEDC
который не есть правильной командой
и который сейчас будет скомпилирован как ld v0,$DC с выдачей ошибки что >ФФ

и чем может быть кто то воспользуется вместо правильного ld v0,low $FEDC




я предлагаю менять автозаменой [i] на iIi или _i_

ну и придется менять автозаменять jp v0,*** на какое нибудь jp_v0 ***

для z80 подобных мнемоник
ручки использовать по идеи не придется

- - - Добавлено - - -


Единственный вменяемый диз-асм который нашел - Гидра.

так же вот список 8080 и z80 подобных мнемоник

sys *** sys ***

scdown * scd *
cls cls
rts ret

scright scr
scleft scl
exit exit
low low
high high
jmp *** jp ***
jsr *** call ***
skeq vx,** se vx,**
skne vx,** sne vx,**
skeq vx,vy se vx,vy
mov vx,** ld vx,**
add vx,** add vx,**
mov vx,vy ld vx,vy
or vx,vy or vx,vy
and vx,vy and vx,vy
xor vx,vy xor vx,xy
add vx,vy add vx,vy
sub vx,vy sub vx,vy
shr vx shr vx

rsb vx,vy subn vx,vy
shl vx shl vx

skne vx,vy sne vx.vy
mvi *** ld I,***
jmi *** jp v0,***
rand vx,** rnd vx,**
sprite vx,vy,* drw vx,vy,*
xsprite vx,vy drw vx,vy,0
skpr vx skp vx
skup vx skpn vx
gdelay vx ld vx,dt
key vx ld vx,k
sdelay vx ld dt,vx
ssound vx ld st,vx
adi vx add I,vx
font vx ld f,vx
xfont vx ld hf,vx
bcd vx ld b,vx
str v0-vx ld [i],vx
ldr v0-vx ld vx,[i]
ld r,vx
ld vx,r

- - - Добавлено - - -


Единственный вменяемый диз-асм который нашел - Гидра.
можно ссылки?

zebest
02.03.2020, 21:22
Гидра - инструмент класса IDA , но Ида не знает про chip-8,
А гидра знает, правда не совсем из "коропки".
https://m.habr.com/ru/post/447450/
В статье как установить и настроить, плагин для чип-8 - отдельно. Но работает вполне неплохо, хоть Ида и привычнее. Может Оля конечно то жи может - не узнавал

NEO SPECTRUMAN
03.03.2020, 13:46
послендяя версия 1.14.5 - то жи компилит. но при этом в логах куча ошибок.
а можно сорец который сыпет ошибками?

zebest
03.03.2020, 14:55
вот таким сыплет:

---------- Capture Output ----------> "D:\Program Files\Crimson Editor SVN286M\sjasmplus-win32-1.07-rc7\sjasmplus.exe" chip8.asm
SjASMPlus Z80 Cross-Assembler v1.14.5 (https://github.com/z00m128/sjasmplus)
chip8.asm(1052): error: [IF/IFN] Forward reference: if (SPRITE_01) > $FFF
chip8.asm(1507): ^ emitted from here
chip8.asm(1052): error: [IF/IFN] Forward reference: if (SPRITE_02) > $FFF
chip8.asm(1511): ^ emitted from here
и т.д.
предыдущая версия вообще без ашыпак. но при этом компилит верно

NEO SPECTRUMAN
03.03.2020, 16:31
интересно

надо спросить у самого ped7g

- - - Добавлено - - -


предыдущая версия вообще без ашыпак. но при этом компилит верно
до начиная с 1.13.3 такое

ну и на оригинальном
SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
которым комплектуется "компилятор"
это было изначально

и эти ошибки сыпались еще в момент написания макросов
про что и написано в первом посте :)

- - - Добавлено - - -

конечно нехочетсо ложить в релиз старую 1.13.2 версию...

- - - Добавлено - - -

такое же и в нашей SjASMPlus Z80 Cross-Assembler v.20190306.1 ветке от mastermind-а

zebest
03.03.2020, 16:47
нее, на пред. версии немного попроще всегда была ошибка, типаа


SjASMPlus Z80 Cross-Assembler v.20190306
chip8.asm(1507): error: [IF] Forward reference

вернее может та же самая, просто подробнее расписано.
ну как бы на скорость не влияет, да и 13.2 не дает таких ошибок.

NEO SPECTRUMAN
03.03.2020, 17:57
хотя это только в первом проходе

так что может так и задумано


- - - Добавлено - - -

ну дык одна и та же

а в 1.14.5 и еще подробней

- - - Добавлено - - -

можно вообще отключить вывод ошибок глобально...

...но тогда не будет видно опечаток в виде "неизвестных инструкций"
и прочих косяков

- - - Добавлено - - -

походу там уже только


if ccc = 9
nop
endif

ccc nop

кидает ошибки

- - - Добавлено - - -

за одно добавил скриншоты новой версии в первый пост
которая еще не выложена

для chipenstein_den00bed
с фуллскрином
нужно порядка 6,5МГц турба для нормальной работы без мерцания
(больше 12К команд в секунду)

NEO SPECTRUMAN
19.03.2020, 19:33
не прошло и пол года
sjchipasm r0066 RC
https://dropmefiles.com/7pXIg
(надо будет переименовать в что нибудь более благозвучное например в schipasm или в schipjasm или в SJ-ChipASM)

все переписано и перепроверено
добавлена поддержка мнемоник в z80 стиле и в Peter Miller стиле (которые можно было сделать средствами sjasm-а)

https://jpegshare.net/images/b8/2c/b82c3d480eed2a0ef9aa0c33b3795eb9.png

пока сверку r0021 и r0066 не проводил
возможно есть косяки

ошибок сыпется так же куча
все [IF] Forward reference


над внешним видом выдаваемых ошибок
еще нужно подумать


оригинальный сорец 2048 из коробки не компилит правильно
после допиливания тоже не компилит правильно
что то запускается но не работает
бинарник совершенно не совпадает по всей площади (возможно сорец уже другой версии)


твой дизасм 2048 компилит из коробки
бинарник полностью совпадает с оригинальным бинарником игры


trip8 демо
компилит из коробки
бинарник совпадает


модифицированный chipnstein
компилит из коробки
бинарник слегка не совпадает
но все работает
пока не уточнял почему (возможно компилилось с другими настройками)
https://jpegshare.net/images/84/df/84df131776bbb2ff9bd9260c5d3a9b67.png

David Winter's-кий сорец BLINKY с ходу не взяло
много различий с sjasm-ом
нужно править все ручками

zebest
19.03.2020, 22:00
Пару неделек назад то жи себе табличку делал, для Гидры, пусть уж будет, не до конца разукрасил различающиеся мнемоники.

твой пример chip8_code чет компилиЦЦа, но с предупреждением

> ERROR OUT OF MEMORY

и в FishNChips не работает по той же причине. типа слишком большой файл.

NEO SPECTRUMAN
19.03.2020, 22:21
твой пример chip8_code чет компилиЦЦа, но с предупреждением

> ERROR OUT OF MEMORY


это не пример
это тест всех реализованных команд
для проверки работы детектилки ошибок
и правильности компиляции


и итоговый код теста больше чем отведено памяти под чип8 код

ну и за одно он проверяет выведение надписи "out of memory" :)

там просто последовательность всех существующих команд
работать она и не будет

очищаем и используем

некоторые z80 команды (красные зачеркнутые) нужно менять авто заменой
на sjasm-овские (костыли) варианты

NEO SPECTRUMAN
20.03.2020, 15:43
скомпилировал параллельно штук 7 старых сорцов (которые под r0022 написаны)
в r0021 и r0066 одновременно
под SjASMPlus Z80 Cross-Assembler v1.14.5

ВСЕ бинарники полностью совпадают
можно предположить что совместимость сохранена

хотя ошибок сыпется теперь наверно даже еще больше :)

- - - Добавлено - - -

теперь бы еще найти файлообменник (без регистрация со сканами паспортов) куда выложить новую версию...

NEO SPECTRUMAN
12.07.2020, 12:30
SJ-ChipASM_r0069
http://www.mediafire.com/file/flqitefu3h444p8/SJ-ChipASM_r0069.7z/file

просто перевел на sjasm v1.15.0

за одно закоментил 250 if-ов ;ок-еями чтоб не сыпались сплошные [IF] Forward reference

NEO SPECTRUMAN
05.11.2020, 16:11
NSChip r0173
http://www.mediafire.com/file/d9b77d87j2etxm9/NSChip_r0173.7z/file
https://anonfiles.com/34h3X8mdp5/NSChip_r0173_7z

https://jpegshare.net/images/11/98/1198bba25bbc2b882ad8db4422eb1521.pnghttps://jpegshare.net/images/33/3b/333bf42abbb4a8951e535f8b923d73aa.png

по быстренькому прикрутил TRD-осную и TAP менюшки
системные требования по идеи остаются те же 48К

режимы совместимости и настройки скорости пока меняются только при компиляции

пока собрана версия с неограниченной скоростью и режимом совместимости с octo
(и поэтому на диск накидано только то, что работает в таком режиме)
потом может добавлю менюшку в которой можно будет наклацать нужный режим

так же не всё переинициализируется при закрытии старого файла (выход по break-у)
и что то может не стартовать после работы предыдущей софтвари

zebest
05.11.2020, 18:13
собрана версия с неограниченной скоростью и режимом совместимости с octo
мне окто без надобности(пока), а скорость нормальная, или регулируемая - с надобностью.

NEO SPECTRUMAN
05.11.2020, 22:24
мне окто без надобности(пока)
ну для octo написанные самые похожие на игры игры :)
например chipwar
https://jpegshare.net/images/4a/e0/4ae0ceb2157895057422a961993fed53.png

движок chipnstein-а тоже изначально работал только в octo
но я его пофиксил и улучшил
и теперь он работает везде

- - - Добавлено - - -


а скорость нормальная, или регулируемая - с надобностью.
на уровне сборки сорца есть лимит скорости на фрейм
но его еще нужно переписать для клацания из менюшки которой еще нет

в том что выложено
скорость пока ничем не ограничена (все кривые поделки без синхронизации носятся летают : )
чтобы запускать chipnstein-ы :)
(и он работает как задумано только в турбе)
интересно как он работает на этой буржуйской чипотте для нёхтов
https://spectrumcomputing.co.uk/forums/viewtopic.php?f=3&t=3634