Открыты исходные коды GW-BASIC от 1983 года
Microsoft опубликовала исходники GW-BASIC для DOS 1983 года выпуска: github.com/microsoft/GW-BASIC
Было интересно немного в них полазить.
Например возьмём файл FIVEO.ASM
Первый комментарий:
Пол Аллен! Почивший уже в 2018 миллиардер. Сам тогда писал.
Что немного удивляет — название файла. Что за FIVEO? Может я неправ, но возникает догадка, что «five operators», т.к. именно столько их перечислено в комментарии. :)
Идём дальше — есть в этом же файле функция SKPNAM. Она снабжена таким комментарием:
Всё бы ничего, но у Intel 8086 не было регистров HL и A — это регистры Intel 8080, того самого предка Zilog Z80. Действительно в файле OEM.H есть некие упоминания поддержки CP/M, а эта операционка базирована на i8080. Таким образом явно торчат уши легаси–кода на котором MS и начала строительство своей империи — васики под самые разные компьютеры и системы и в первую очередь как раз на базе i8080 для Altair 8800.
Сама функция в качестве обозначенных регистров использует регистры i8086 BX и AL.
Чем дальше лазим по коду тем больше торчат уши i8080:
Еще полазив легко понять что используется следующая «трансляция» регистров:
Неслучайно, что HL транслируется в BX, не по порядку, т.к. в i8080 с HL было больше всего адресаций и в i8086 больше всего адресаций было у регистров BX, BP и SI, DI, но при этом только у BX была возможность легко работать с верхним и нижним байтами.
В общем всё логично, т.к. i8086 и делался с расчётом быть обратно совместимым с i8080 на уровне исходного кода.
Еще одно прелюбопытное место есть в файле OEM.H:
Судя по комментариям сперва команды Z80 LDIR/LDDR/DJNZ были превращены в макросы для кода на i8080 чтобы не переписывать какие то куски кода.
Однако при переходе на 16-битный i8086 даже при наличии у него своих аналогов эти макросы не стали убирать.
В общем интересно было прикоснуться к такой древности.
Было интересно немного в них полазить.
Например возьмём файл FIVEO.ASM
Первый комментарий:
TITLE FIVEO 5.0 Features –WHILE/WEND, CALL, CHAIN, WRITE /P. Allen
Пол Аллен! Почивший уже в 2018 миллиардер. Сам тогда писал.
Что немного удивляет — название файла. Что за FIVEO? Может я неправ, но возникает догадка, что «five operators», т.к. именно столько их перечислено в комментарии. :)
Идём дальше — есть в этом же файле функция SKPNAM. Она снабжена таким комментарием:
; Convenience routine to skip a variable's name pointed to by HL.
; Returns VALTYP in A with the zero flag set if it is a string.
Всё бы ничего, но у Intel 8086 не было регистров HL и A — это регистры Intel 8080, того самого предка Zilog Z80. Действительно в файле OEM.H есть некие упоминания поддержки CP/M, а эта операционка базирована на i8080. Таким образом явно торчат уши легаси–кода на котором MS и начала строительство своей империи — васики под самые разные компьютеры и системы и в первую очередь как раз на базе i8080 для Altair 8800.
Сама функция в качестве обозначенных регистров использует регистры i8086 BX и AL.
Чем дальше лазим по коду тем больше торчат уши i8080:
MOV DX,CHNLIN ; Get CHAIN line # in [D,E]
MOV BX,TXTTAB ; Get prog start in [H,L]
Еще полазив легко понять что используется следующая «трансляция» регистров:
A –> AL
BC –> CX
DE –> DX
HL –> BX
Неслучайно, что HL транслируется в BX, не по порядку, т.к. в i8080 с HL было больше всего адресаций и в i8086 больше всего адресаций было у регистров BX, BP и SI, DI, но при этом только у BX была возможность легко работать с верхним и нижним байтами.
В общем всё логично, т.к. i8086 и делался с расчётом быть обратно совместимым с i8080 на уровне исходного кода.
Еще одно прелюбопытное место есть в файле OEM.H:
;*******************************************************************
; Z80 related macros
;*******************************************************************
Z80=1 ;FOR VERSION THAT RUNS ON BOTH
;8080'S AND ZILOG Z-80'S
Z80MAC=1 ;USE 8080 MACROS INSTEAD OF Z80 INSTRUCTIONS
Z80=0
Z80=1
LDIR MACRO
MOV WORD PTR A,WORD PTR M
STAX D
INXF H
INXF D
DCXF B
MOV WORD PTR A,WORD PTR B
ORA C
JNZ _-8D
ENDM
DJNZ MACRO DEST
DCR B
JNZ DEST
ENDM
Судя по комментариям сперва команды Z80 LDIR/LDDR/DJNZ были превращены в макросы для кода на i8080 чтобы не переписывать какие то куски кода.
Однако при переходе на 16-битный i8086 даже при наличии у него своих аналогов эти макросы не стали убирать.
В общем интересно было прикоснуться к такой древности.
0 комментариев