مضاهاة Sinclair zx80 / ​​zx81

صورة

سيوافق الكثيرون على أن جائحة COVID-19 الناشئ قد دمر إلى حد كبير حياة مجتمع تكنولوجيا المعلومات. لكننا لن نتحدث عن شريط مظلم ، ولكن عن حلقة أخرى.

بالفعل في مارس ، تم إلغاء demoparty Forever 2020 الشهيرة ، وبعد ذلك تم تأجيل الحدث إلى الخريف. قبل الإلغاء بوقت طويل ، تحدثت مع المنظمين. رفضوا قبول أحد أعمالي ، موضحين أنه لا يوجد Apple II ، وفي المقابل طلبوا فيديو للعمل من جهاز كمبيوتر حقيقي.

حسنًا ، لم أتمكن من الحصول على السجل ، لذلك لاحظت قائمة الأنظمة الأساسية:
Amstrad CPC و Thomson و PMD-85 و MSX و ZX81 و Sam Coupe وجميعها غير C = 64 8 بت كومودور أو أي نظام 8 بت آخر

لقد انجذبت إلى ZX81 ، حيث كنت أحاول بالفعل تعلم الكمبيوتر ، ولكن تعطلت.

ذهب البحث وفقًا لنمطي المعتاد:

محاكي


لقد اخترت EightyOne
الإصدار 1.6.1. يحتوي الإصدار على مصحح أخطاء مناسب ، لكن البرنامج لا يحاكي نموذجًا آخر - ZX80 ، في وقت لاحق وجدت بناء آخر 3.7.

يعني الصليب


تم جلب البحث إلى FASM (وهو موضوع في المنتدى تم تكييفه مع النظام الأساسي. ومع ذلك ، لم تبدأ الأمثلة المجمعة. جربت خيارات التجميع الأخرى - Pasmo وغيرها ، ولكن لم يتم تجميع برنامج عمل بعد.

جلبت عمليات البحث الطويلة مثالاً لطباعة Hello، world!

، معجزة! اتضح! الآن جاء دور الحلقة الثالثة.

توثيق


تم العثور على جزء من المعلومات هنا.
ROM Disassembler هنا.

بطاقة الذاكرة:

0000-1FFF - ROM
2000-3FFF - Shadow ROM.   ,   Interface 1
4000-7FFF -  16

جزء من الذاكرة محجوز لمتغيرات النظام .

علاوة على ذلك ، في 16509 ، يتم تخزين برنامج BASIC ومتغيراته.

يحتوي البرنامج على BASIC على التنسيق:

2      big endian
2   
...  
1  ($76) -  

بالنسبة للكاسيت ، يمكن فقط استخدام برامج BASIC ؛ تم اقتراح هذه الطريقة:

1 REM (    )
2 RANDOMIZE USR(16514) -    ,   REM

يجب الانتباه إلى متغير النظام D_FILE الذي يشير إلى ذاكرة الفيديو.

في المثال المشار إليه ، يتم تنفيذ ذلك على النحو التالي:

D_FILE:     defw    display_file

display_file:   defb    _NL
        defs    32
...
        defs    32
        defb    _NL

البايت الأول هو علامة على بداية السطر ، ثم 32 بايت هي مسافات.

اتضح 24 خطًا ، والتي تبدو ضخمة.

أول برنامج كتبته:

صورة

;compile with sjasmplus
	device zxspectrum128

p_start:    org 0x4009
begin

VERSN:      defb    0
E_PPC:      defw    20      ; BASIC line number of line with cursor.
D_FILE:     defw    display_file2
DF_CC:      defw    display_file2+1
VARS:       defw    variables
DEST:       defw    0
E_LINE:     defw    edit_line
CH_ADD:     defw    p_end-1
X_PTR:      defw    0
STKBOT:     defw    p_end
STKEND:     defw    p_end
BERG:       defb    0
MEM:        defw    MEMBOT
SPARE1:     defb    0
DF_SZ:      defb    2       ; Number of lines in lower part of screen.
S_TOP:      defw    10      ; BASIC line number of line at top of screen.
LAST_K:     defw    0xffff
DB_ST:      defb    0
MARGIN:     defb    55      ; Blank lines above/below TV picture: US = 31, UK = 55.
NXTLIN:     defw    display_file    ; Memory address of next program line to be executed.
OLDPPC:     defw    0
FLAGX:      defb    0
STRLEN:     defw    0
T_ADDR:     defw    0x0c8d
SEED:       defw    0
FRAMES:     defw    0       ; Updated once for every TV frame displayed.
COORDS:     defw    0
PR_CC:      defb    0xbc
S_POSN:     defb    0x21,0x18
CDFLAG:     defb    0x40
PRBUF:      defs    0x20
        defb    _NL
MEMBOT:     defs    0x1e
SPARE2:     defw    0

; Start of the BASIC area for user programs.

basic_0001: defb    0,1     ; 1 REM
        defw    basic_0010-basic_0001-4
        defb    _REM

; Start of user machine code program
mem_16514:
	ld hl,p_end;display_file2
	push hl
;cls
	ld c,25
c1:
	ld b,32
	ld (hl),$76:inc hl
c2:
	ld (hl),0:inc hl
	djnz c2
	dec c
	jr nz,c1

	pop hl
	push hl
	ld c,$0
ylp:
	ld (hl),$76
	inc hl
	ld b,32
xlp:
	ld (hl),c
	inc hl
	inc c

	bit 6,c
	jr nz,endp;ret nz
	djnz xlp
	jr ylp
endp:
	pop hl
	ld (D_FILE),hl
	jr $
display_file2:
 dup 25
 defb _NL
 edup


end
	display /d,end-begin
	savebin "prb.p",begin,end-begin

اقترحت نسخة مختصرة هذا الموضوع .

عيب واحد: بعد تحميل البرنامج ، لا يتم عرض الخط السفلي. هذا ليس مفاجئًا ، لأن الأسطر فارغة. اقترحت قراءة الكتيبات تغييرًا آخر:

NXTLIN:     defw    basic_0010 ;    

اتضح مثل هذه الحيلة البسيطة: بعد التحميل ، لا تحتاج إلى كتابة RUN ، سيبدأ البرنامج من تلقاء نفسه.

وباختصار ، سأصف جوهر البرنامج: أولاً ملء ذاكرة الفيديو وفقًا للنموذج ، كما كان في برنامج الطباعة "Hello ، world" ، ثم ملء الأسطر بأحرف برموز 00-63.

صورة

في التطور الأول ، أخطأت وكتبت أحرف ملء برموز 00-255 ، لكن البرنامج لم يعمل ، حيث لم يتم استخدام جزء من الرموز .
وكانت نتيجة البحث هي عمل كير ، الذي يبدو غير مثير للاهتمام ، ولكن بالنسبة لي البرنامج نفسه إنجاز رائع.

وقبل demoparty ، هناك الكثير من الوقت الذي سيتم إنفاقه على تطوير برنامج في ترشيح 1k.

يبقى ZX80.

هناك ترتيب مختلف لمتغيرات النظام لذلك.

يتم تخزين البرنامج هنا .

لذلك ، قمت بكتابة البرنامج ونظرت في المصحح:

صورة

هناك قيود طفيفة هنا - ذاكرة 1k ، لذلك عليك التفكير في البرنامج الذي تكتبه.

ربما سأكتب يوما ما.

All Articles