|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
А тем временем я научился писать свои картриджи, загоняя туда COM-файлы | | | | Code: org 100h
section .text
start: MOV BH,7 ; 0 for DOSBox MOV BL,4 MOV CX,1 MOV DH,18 MOV DL,0 LEA SI,[STRI] NEXT: MOV AH,2 INT 10H INC DX MOV AL,[SI] CMP AL,'$' JE KON MOV AH,9 INT 10H INC SI JMP SHORT NEXT KON: JMP KON
section .data
STRI DB 'Hello, nedoPC ! $'
| | | | |
|
27 Dec 2016 22:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
На фотке картридж вставлен в левую дырку, но в правой он тоже работает - значит все CS-ы разведены в обе дырки, что есть хорошо. Получается так - разрабатываем программулину в DOSBox как COM-файл (нестандартный, т.к. данные что вместе с кодом лежат будут только для чтения - изменяемые данные надо будет держать где-то в ОЗУ) работающую только с BIOS (т.к. ДОСа нету), далее с помощью моей волшебной программы (исходники которой я скоро выложу на гитхаб) создаём образ для прошивки и вперёд P.S. Выложил: https://gitlab.com/shaos/pcjrВолшебная программка лежит в каталоге software и называется PCJRCART.C Волшебного в ней собственно подсчёт CRC16, который толком нигде не описан применительно к PCjr-картриджам: PCJRCART.C | | | | Code: /* PCJRCART.C by Shaos (Dec 2016) */
/* Create ROM image from COM file for PCjr cartrige */
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "crc16.h"
#define MAXSIZE 65535
int main(int argc, char **argv) { FILE *f; int i; char fname[100],*po; unsigned long sz; unsigned char extra = 0; unsigned short crc = 0; unsigned char *bytes = (unsigned char*)malloc(MAXSIZE); if(bytes==NULL) { printf("\nCan't allocate memory!\n\n"); return -1; } if(argc<2) { printf("\nFilename was not specified!\n\n"); return -2; } memset(bytes,0,MAXSIZE); bytes[0] = 0x55; bytes[1] = 0xAA;
CalculateTable_CRC16();
strcpy(fname,argv[1]); f = fopen(fname,"rb"); if(f==NULL) { printf("\nCan't open file '%s'!\n\n",fname); free(bytes); return -3; } fseek(f,0,SEEK_END); sz = ftell(f); printf("%s %lu\n",fname,sz); if(sz>=65280) { printf("\nFile is too large!\n\n"); fclose(f); free(bytes); return -4; } fseek(f,0,SEEK_SET); fread(&bytes[256],1,sz,f); fclose(f);
sz += 258; if(sz&511) { sz &= 0xFE00; sz += 512; } bytes[2] = sz>>9; printf("ROM size is %lu bytes (%i)\n",sz,bytes[2]); bytes[3] = 0xE9; bytes[4] = 0x01; bytes[5] = 0x00; bytes[6] = 0x00; bytes[7] = 0xB8; bytes[8] = 0x00; bytes[9] = 0x01; bytes[10] = 0xFF; bytes[11] = 0xE0;
crc = Compute_CRC16(bytes,sz-2); printf("Calculated CRC is 0x%4.4X\n",crc);
if(sz==65536) extra = crc&0x00FF; else bytes[sz-1] = crc&0x00FF; bytes[sz-2] = (crc&0xFF00)>>8;
crc = Compute_CRC16(bytes,sz); printf("Corrected CRC is 0x%4.4X\n",crc);
po = strrchr(fname,'.'); if(po!=NULL) *po=0; strcat(fname,".bin"); f = fopen(fname,"wb"); if(f==NULL) { printf("\nCan't open file '%s'!\n\n",fname); free(bytes); return -5; } if(sz<=32768) fwrite(bytes,1,sz,f); else fwrite(bytes,1,32768,f); fclose(f); if(sz>32768) { fname[strlen(fname)-1] = '2'; f = fopen(fname,"wb"); if(f==NULL) { printf("\nCan't open file '%s'!\n\n",fname); free(bytes); return -6; } if(sz==65536) { fwrite(&bytes[32768],1,32767,f); fputc(extra,f); } else fwrite(&bytes[32768],1,sz-32768,f); fclose(f); } free(bytes); return 0; }
| | | | |
|
27 Dec 2016 22:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
хм, похоже бейсик, который на картридже ЗНАЕТ про дискеты! только ему нужны уже отформатированные, чтобы можно было SAVE и LOAD делать (это я листаю книжку по PCjr бейсикам, что только сегодня получил по почте)
|
27 Dec 2016 22:58 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Теперь и я потерялся, что изначально надо было. Вроде скопировать системную дискету на 1 дисководе, не? Тогда начнем сначала. Во-1 видел в dir disccopy.com. Во-2 - есть какая-то работающая возможность скопировать файл (любой) с одной дискеты на другую? Если да - на чистую дискету первым файлом кладем ibmbio.com. Затем ibmdos.com, command.com. Ставим ibm*.com атрибуты hidden, system. Осталось перенести бут-сектор, .com под это дело я сегодня выложу. Если не копируется, сделаю .com, копирующий целыми дорогами. added Исходник (fasm): | | | | Code: org 100h
mov sp,0FFFEh
mov dx,msg1 mov ah,09h int 21h xor ax,ax int 16h
mov ax,0201h mov cx,1 xor dx,dx mov bx,buf int 13h
mov dx,msg2 mov ah,09h int 21h xor ax,ax int 16h
mov ax,0301h mov cx,1 xor dx,dx mov bx,buf int 13h
mov ax,4C00h int 21h
msg1 db 'Insert READ disk A: and press any key',13,10,'$' msg2 db 'Insert WRITE disk A: and press any key',13,10,'$'
buf db 512 dup(0)
| | | | |
|
28 Dec 2016 00:55 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
На данный момент Shaos, видимо, с картриджа уже всё запустит... А так, по существу, похоже что его утилита "формат" не хочет попилить дискету... Shaos, кстати, а ты заклеил непрозрачным скотчем дырки защиты от записи своих 5-дюймовок?
_________________ iLavr
|
28 Dec 2016 06:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
Да нету у меня диска с полным досом ещё - ни формата, ни дисккопи - ничего...
Я пока просто думаю как подручными средствами скопировать дискету с бутом
P.S. У биоса 13h вроде есть функция 5 - форматирование дорожки, можно попробовать свой недоформат нагородить
|
28 Dec 2016 06:17 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну тем не менее - на чистых дискетах эту дырочку перед форматом заклей... И вот еще что, если у тебя дискеты HD - High Density: то дисковод IBM PCjr их скорее всего ни читать не форматировать не будет. Меня терзает смутное сомнение, что он под DD - Doube Density расточен:
_________________ iLavr
|
28 Dec 2016 06:33 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Совершенно верно! Это у меня уже, похоже, склероз наступает... Но пока еще - очень раний: сам уже спохватился, что не так...
_________________ iLavr
|
28 Dec 2016 06:46 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так а что есть? Непонятно, как решать задачку, не имея исходных данных. Если можно нагородить свой формат, можно и родной запустить. Или я чего-то не понимаю? Есть же картридж, опять-таки... Копировщик целой дискеты (приемник, понятное дело, должен быть форматирован). 360k памяти найдется? | | | | Code: org 100h use16
;360k TRKS = 40 SPT = 9 HDS = 2
mov sp,0FFFEh
mov ah,48h mov bx,(TRKS*SPT*HDS*512) shr 4 int 21h jnc .3 jmp fail .3: mov ES,ax mov di,ax
mov dx,msg1 mov ah,09h int 21h xor ax,ax int 16h
.1: mov ax,(2 shl 8)+SPT mov cl,1 mov ch,[cyl] mov dh,[hd] xor [hd],1 jnz .4 inc [cyl] .4: mov dl,0 xor bx,bx int 13h mov ax,ES add ax,(SPT*512) shr 4 mov ES,ax cmp [cyl],TRKS jb .1
mov dx,msg2 mov ah,09h int 21h xor ax,ax int 16h
mov ES,di mov word [hd],0 .2: mov ax,(3 shl 8)+SPT mov cl,1 mov ch,[cyl] mov dh,[hd] xor [hd],1 jnz .5 inc [cyl] .5: mov dl,0 xor bx,bx int 13h mov ax,ES add ax,(SPT*512) shr 4 mov ES,ax cmp [cyl],TRKS jb .1
mov ES,di mov ah,49h int 21h
fail: mov ax,4C00h int 21h
msg1 db 'Insert READ disk A: and press any key',13,10,'$' msg2 db 'Insert WRITE disk A: and press any key',13,10,'$' hd db 0 cyl db 0
| | | | |
Last edited by Vic3Dexe on 28 Dec 2016 07:01, edited 2 times in total.
|
28 Dec 2016 06:52 |
|
|
IgorR76
Senior
Joined: 27 Jul 2015 15:20 Posts: 102
|
А дискеты HD и DD отличаются качеством магнитного слоя, и соответственно плотностью записи. Физически-доп.отверстие в конверте дискеты. У меня HD диски хорошо работали в DD приводе.
|
28 Dec 2016 06:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
Я тоже выкинул свою коллекцию 3-дюймовых и 5-дюймовых дискет когда Родину покидал - надо было диски с досом хотя бы взять с собой в эммиграцию... И других компов с досом у меня нет, а тем более с 5-дюймовыми дисководами (есть ноутбук с FreeDOS, но там внешний 3-дюймовый дисковод)...
|
28 Dec 2016 06:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
Ну я могу конечно с сети стянуть FORMAT.COM для PC-DOS 2.10, однако не факт, что он с картриджа запустится - он же только для чтения, т.е. если COM использует тот же сегмент для изменяемых данных, то не полетит - надо чего-то хакать... Неа - у меня только 256КБ, причём вместе с видеопамятью...
|
28 Dec 2016 06:58 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Скорость вращения шпинделя у них разная - так что сомнительно, чтобы "HD диски хорошо работали в DD приводе". Вот если наоборот - то еще куда ни шло... Ну и токи записи для разных магнитных слоёв несколько отличаются.
_________________ iLavr
|
28 Dec 2016 07:00 |
|
|
Vic3Dexe
Doomed
Joined: 16 Dec 2014 11:58 Posts: 370 Location: Киев
|
Так картридж виден как рамдиск или как кусок памяти? Если как кусок памяти, то как с него вообще что-то запускать? А, все, понял. Перечитал 1 страницу. И 360к памяти явно нет... Пойду думать.
|
28 Dec 2016 07:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22703 Location: Silicon Valley
|
в PCjr стоит 360кб дисковод - так что особого выбора в режимах нет - он один 2 стороны, 40 дорожек на стороне, 9 секторов на дорожку, 512 байт на сектор P.S. вот тут интересный комментарий к функции 5 - interleave 1,5,2,6,3,7,4,8 (кстати а куда делся 9?): http://webpages.charter.net/danrollins/techhelp/0191.HTM
|
28 Dec 2016 07:06 |
|
|
Who is online |
Users browsing this forum: No registered users and 4 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|