nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 21 Jul 2019 13:21



Reply to topic  [ 213 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15
IBM PCjr 
Author Message
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
VGrad wrote:
Shaos, смотри ещё одна полезная вещь для JR:
https://www.retrotronics.org/home-page/jride/

Угу ;)

_________________
:eugeek: https://twitter.com/Shaos1973


19 Feb 2019 19:56
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
Основная плата сетевой карты будет очень хитрой формы:


Attachments:
PCjrNet-proto2.jpg
PCjrNet-proto2.jpg [ 164.02 KiB | Viewed 260 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
19 Feb 2019 21:49
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 17924
Location: Colorado
Reply with quote
Shaos wrote:
На фотке картридж вставлен в левую дырку, но в правой он тоже работает - значит все CS-ы разведены в обе дырки, что есть хорошо. Получается так - разрабатываем программулину в DOSBox как COM-файл (нестандартный, т.к. данные что вместе с кодом лежат будут только для чтения - изменяемые данные надо будет держать где-то в ОЗУ) работающую только с BIOS (т.к. ДОСа нету), далее с помощью моей волшебной программы (исходники которой я скоро выложу на гитхаб) создаём образ для прошивки и вперёд :kruto:

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;
}

Обратился тут ко мне человек - спрашивает а чего это у тебя в этой программке байтики какие-то заполняются - 0xE9 там, 0x01 и т.д., а я уже и не помню чего они там заполняются :o

Затолкал это в дизассемблер и получил нижеследующее:
Code:
00000000  E90100            jmp word 0x4
00000003  00B80001          add [bx+si+0x100],bh
00000007  FFE0              jmp ax

_________________
:eugeek: https://twitter.com/Shaos1973


11 Jul 2019 19:46
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 213 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15

Who is online

Users browsing this forum: No registered users and 1 guest


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

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.