Komputery z Z80 > AMSTRAD

Amstrad GX4000 - Asembler - Początki programowania.

(1/3) > >>

siudym:
Czy mógłbym otrzymać w pigułce informacje dotyczące programowania w ASM na GX4000?
Chciałbym spróbować coś napisać na ten system, ale w necie spory śmietnik informacyjny i ciężko doszukać się do czegoś konkretnego.

Czy GX4000 i Amstrad Plus to dokładnie to samo, ale GX to tylko wersja "konsolowa" bez klawiatury? Czy są jakieś inne różnice?

Znalazłem taki kod, jest to init Cartridga dla Amstrad Plus/GX4000.
Nie wiem tylko czym to kompilować, doczytałem, że używany jest często PASM - skompilowałem nim i wyszedł 102 Bajtowy plik, wiec pewnie coś trzeba jeszcze dodać jako opcja podczas kompilacji, ale nie wiem co i jak aby wyszedl 16KB plik ROM:)


--- Kod: ---;; This example shows a suggested startup for a cartridge

;; cartridge page 0 exists at &0000-&3fff
;; execution starts at &0000
;;
org &0000

start:

di ;; disable interrupts
im 1 ;; set interrupt mode 1
ld bc,&f782 ;; setup initial PPI port directions
out (c),c
ld bc,&f400 ;; set initial PPI port A (AY)
out (c),c
ld bc,&f600 ;; set initial PPI port C (AY direction)
out (c),c

ld bc,&7fc0 ;; set initial RAM configuration
out (c),c

;; unlock ASIC so we can access ASIC registers
ld b,&bc
ld hl,sequence
ld e,17
seq:
ld a,(hl)
out (c),a
inc hl
dec e
jr nz,seq

;; set initial CRTC settings (screen dimensions etc)
ld hl,end_crtc_data
ld bc,&bc0f
crtc_loop:
out (c),c
dec hl
ld a,(hl)
inc b
out (c),a
dec b
dec c
jp p,crtc_loop

ld hl,&c9fb
ld (&0038),hl
ei

;; enable asic ram (will be visible in range &4000-&7fff)
ld bc,&7fb8
out (c),c

;; your code here
loop:
jr loop

;; your crtc setup values here; these are examples
crtc_data:
defb &3f, &28, &2e, &8e, &26, &00, &19, &1e, &00, &07, &00,&00,&30,&00,&c0,&00
end_crtc_data:

;; sequence to unlock asic
sequence:
defb &ff,&00,&ff,&77,&b3,&51,&a8,&d4,&62,&39,&9c,&46,&2b,&15,&8a,&cd,&ee

end start

--- Koniec kodu ---

Tygrys:
Odnalazłem wątek, w którym był podany w/w listing (tj. https://www.cpcwiki.eu/forum/programming/create-good-cpr-for-gx4000/)

Gdzieś dalej był link do archiwum pokazujące jak wygenerować obraz carta. Zip dodałem do tego postu.

Nigdy się tym nie zajmowałem, więc jeżeli to pomogło, to chętnie bym poczytał jak co trzeba zrobić aby móc w pełni developować na CPC+.

siudym:
Nie wiem o co biega z tym "rominject" ?
Trzeba wykonac jakies klejenie pewnych danych w kompilowany ROM dodatkowo?

W katalogu cart_setup/fs/ mam boot.bin - rozumiem trzeba go zawsze dolaczyc do swojego kodu aby zadzialalo to na GX4000 ?
Nigdzie nie ma binarki "cartfs" - na stronie cpcwiki nie moge doszukac sie :/

Skompilowalem ten kod, dodalem zmiane koloru ramki na YELLOW.
Niby dziala, plik byl ponad 400 bajtow, ale dodalem na koncu:

org &3FFF
defb &00

I skompilowal sie idealnie na 16KB - nie wiem czy poprawnie to robie ;)
Dzialaja oba pod emu, albo przynamniej mi sie wydaje bo nie wiem jak dokladnie ustawic WinAPE.

Moze ktos sprawdzic te dwa pliki CPR czy sa poprawne?


--- Kod: ---pasmo cart.asm cart.bin
python mkcpr.py cart.bin
pause

--- Koniec kodu ---


--- Kod: ---
; This example shows a suggested startup for a cartridge

;; cartridge page 0 exists at &0000-&3fff
;; execution starts at &0000
;;
org &0000
jp start
org &0038
ei
ret
start:

di ;; disable interrupts
im 1 ;; set interrupt mode 1
ld bc,&f782 ;; setup initial PPI port directions.
out (c),c
ld bc,&f400 ;; set initial PPI port A (AY)
out (c),c
ld bc,&f600 ;; set initial PPI port C (AY direction)
out (c),c

ld bc,&7fc0 ;; set initial RAM configuration
out (c),c

;; unlock ASIC so we can access ASIC registers
ld b,&bc
ld hl,sequence
ld e,17
seq:
ld a,(hl)
out (c),a
inc hl
dec e
jr nz,seq

;; set initial CRTC settings (screen dimensions etc)
ld hl,end_crtc_data
ld bc,&bc0f
crtc_loop:
out (c),c
dec hl
ld a,(hl)
inc b
out (c),a
dec b
dec c
jp p,crtc_loop

ld hl,&c9fb
ld (&0038),hl
ei

;; enable asic ram (will be visible in range &4000-&7fff)
ld bc,&7fb8
out (c),c

;; your code here
loop:

LD        BC,#7F10 ; I add this little code in the loop: for adding color border, just for testing
OUT      (C),C
LD        A,$4A ; yellow border
OUT      (C),A


jr loop

;; your crtc setup values here; these are examples
crtc_data:
defb &3f, &28, &2e, &8e, &26, &00, &19, &1e, &00, &07, &00,&00,&30,&00,&c0,&00
end_crtc_data:

;; sequence to unlock asic
sequence:
defb &ff,&00,&ff,&77,&b3,&51,&a8,&d4,&62,&39,&9c,&46,&2b,&15,&8a,&cd,&ee

org &3FFF
defb &00

end


--- Koniec kodu ---

McArti0:
https://www.cpcwiki.eu/index.php/Category:Cartridges

to by trzeba przestudiować.

McArti0:
sprawa wydaje się w miarę prosta.

Cartridge w najprostszej postaci to pierwsze do 16kB ROM

W WinApe ASM piszesz:
WRITE DIRECT 0,-1,&C0

i wtedy kompiluje Ci ASM właśnie do LOWROM (to pierwsze zero decyduje, że LOWROM jest włączony)

Czym innym jest wytworzenie pliku CPR, on zaczyna się od 28 bajtowego nagłówka.

Nawigacja

[0] Indeks wiadomości

[#] Następna strona

Idź do wersji pełnej