I've run a diff between the nanox project on Google Code and the ELKS
project as seen in Git, removed all documentation-style files from the
diff, and am attaching it here. Does anyone see anything of interest
that should be included in the ELKS code base?
Jody Bruchon
diff -Naurw elks/Makefile ../nanox-read-only/Makefile
--- elks/Makefile 2012-02-11 13:44:34.767714127 -0500
+++ ../nanox-read-only/Makefile 2012-02-11 13:50:49.915715767 -0500
@@ -142,7 +142,7 @@
include/linuxmt/compiler-generated.h:
printf > include/linuxmt/compiler-generated.h \
'#define %s %s\n' \
- UTS_VERSION "\"#$(DIST) $(shell date)\""
+ UTS_VERSION "\"#$(DIST) $(shell date +%Y-%m-%d)\""
#########################################################################
# lint rule
@@ -197,7 +197,7 @@
@printf '\n %076u\n\n' 0 | tr 0 =
distclean: clean nodep
- rm -f .config* .menuconfig* arch/i86/Image
+ rm -f .config* .menuconfig*
#########################################################################
# Create distribution archives.
diff -Naurw elks/Makefile-rules ../nanox-read-only/Makefile-rules
--- elks/Makefile-rules 2012-02-08 16:12:46.882498544 -0500
+++ ../nanox-read-only/Makefile-rules 2012-02-11 13:50:49.231715765 -0500
@@ -91,7 +91,7 @@
DIST = $(shell printf '%u.%u.%u-pre%u' \
$(VERSION) $(PATCHLEVEL) $(SUBLEVEL) $(PRE))
-VSNCODE = $(shell printf '0x%06X%02X' $$(($(VSNCODE1)-1)) $(PRE))
+VSNCODE = $(shell printf '0x%06X%02X' $$[$(VSNCODE1)-1] $(PRE))
endif
diff -Naurw elks/arch/i86/Makefile ../nanox-read-only/arch/i86/Makefile
--- elks/arch/i86/Makefile 2012-02-08 16:12:46.898498544 -0500
+++ ../nanox-read-only/arch/i86/Makefile 2012-02-11 13:50:50.607715772 -0500
@@ -61,7 +61,7 @@
.PHONY: boot/system toolkit
boot/bootsect: boot/bootsect.o
- $(LD) -0 $(ARCH_LD) -s -o boot/bootsect -M boot/bootsect.o > Boot.map
+ $(LD) -0 -M $(ARCH_LD) -s -o boot/bootsect boot/bootsect.o > Boot.map
boot/bootsect.o: boot/bootsect.s
@@ -70,12 +70,12 @@
boot/crt1.o: boot/crt1.c
boot/netbootsect: boot/netbootsect.o
- $(LD) $(LDFLAGS) $(ARCH_LD) -s -o boot/netbootsect -M boot/netbootsect.o > Netboot.map
+ $(LD) $(LDFLAGS) -M $(ARCH_LD) -s -o boot/netbootsect boot/netbootsect.o > Netboot.map
boot/netbootsect.o: boot/netbootsect.s
boot/setup: boot/setup.o
- $(LD) -0 $(ARCH_LD) -s -o boot/setup -M boot/setup.o > Setup.map
+ $(LD) -0 -M $(ARCH_LD) -s -o boot/setup boot/setup.o > Setup.map
boot/setup.o: boot/setup.s
@@ -89,10 +89,10 @@
ifeq ($(CONFIG_ARCH_SIBO), y)
boot/system: $(AARCHIVES) $(ADRIVERS) sibo/crt1.o sibo/crt0.o
- (cd $(BASEDIR) ; $(LD) $(LDFLAGS) $(ARCH_LD) \
+ (cd $(BASEDIR) ; $(LD) $(LDFLAGS) -t -M $(ARCH_LD) \
$(ARCH_DIR)/sibo/crt0.o $(ARCH_DIR)/sibo/crt1.o \
init/main.o $(ARCHIVES) $(DRIVERS) \
- -t -M -o $(ARCH_DIR)/boot/system > System.tmp ; \
+ -o $(ARCH_DIR)/boot/system > System.tmp ; \
sort -k4 System.tmp > System.map ; rm -f System.tmp )
#SIBO image build
@@ -104,11 +104,10 @@
else
boot/system: $(AARCHIVES) $(ADRIVERS) boot/crt1.o boot/crt0.o
- (cd $(BASEDIR) ; $(LD) $(LDFLAGS) $(ARCH_LD) \
- -t -M -o $(ARCH_DIR)/boot/system \
+ (cd $(BASEDIR) ; $(LD) $(LDFLAGS) -t -M $(ARCH_LD) \
$(ARCH_DIR)/boot/crt0.o $(ARCH_DIR)/boot/crt1.o \
init/main.o $(ARCHIVES) $(DRIVERS) \
- > System.tmp ; \
+ -o $(ARCH_DIR)/boot/system > System.tmp ; \
sort -k4 System.tmp > System.map ; rm -f System.tmp )
#PC image build
diff -Naurw elks/arch/i86/boot/setup.S ../nanox-read-only/arch/i86/boot/setup.S
--- elks/arch/i86/boot/setup.S 2012-02-08 16:12:46.898498544 -0500
+++ ../nanox-read-only/arch/i86/boot/setup.S 2012-02-11 13:50:50.131715769 -0500
@@ -101,7 +101,8 @@
! Check signature at end of setup
- mov ax,#SETUPSEG ;setup codesegment
+ ;mov ax,#SETUPSEG ;setup codesegment
+ mov ax,cs
mov ds,ax
cmp setup_sig1,#SIG1
jne bad_sig
@@ -130,7 +131,9 @@
start_sys_seg: .word SYSSEG
bad_sig:
- mov ax,#INITSEG ;code setup
+ ;mov ax,#INITSEG ;code setup
+ mov ax,cs ;setup seg
+ sub ax,#0x20 ;init seg
mov ds,ax
xor bh,bh
mov bl,[497] ! get setup sects from boot sector
@@ -149,14 +152,15 @@
! Move rest of setup code/data to here
mov di,#2048 ! four sectors loaded by LILO
sub si,si
- mov ax,#SETUPSEG
+ mov ax,cs ;SETUPSEG
mov es,ax
mov ax,#SYSSEG
mov ds,ax
+ cld
rep
movsw
- mov ax,#SETUPSEG
+ mov ax,cs ;SETUPSEG
mov ds,ax
cmp setup_sig1,#SIG1
jne no_sig
@@ -185,6 +189,28 @@
pop ds
retf ;back to BIOS
+#else
+ mov ax,cs
+ cmp ax,#SETUPSEG
+ je start_os
+ sub ax,#0x20 ; init seg
+ mov ds,ax
+ xor bh,bh
+ mov bl,[497] ! get setup sects from boot sector
+ add bx,#0x5
+ mov cl,#8
+ shl bx,cl ! convert to words
+ mov cx,bx
+ mov ax,#INITSEG
+ mov es,ax
+ xor si,si
+ xor di,di
+ cld
+ rep
+ movsw
+ mov ss,ax ! INITSEG
+ mov sp,#0x4000-12
+ jmp far SETUPSEG:start_os
#endif
@@ -194,7 +220,9 @@
;-- from here the real loder starts
;-------------------------------------------------------
start_os:
- mov ax,#INITSEG ;datasegment setup.S
+ ;mov ax,#INITSEG ;datasegment setup.S
+ mov ax,cs ;setup seg
+ sub ax,#0x20 ;init seg
mov ds,ax
@@ -283,7 +311,9 @@
call getcpu
push es
- mov ax,#INITSEG
+ ;mov ax,#INITSEG
+ mov ax,cs ;setup seg
+ sub ax,#0x20 ;init seg
mov es,ax
mov cx,#12
mov di,#0x80
@@ -298,7 +328,9 @@
#ifdef CONFIG_HW_FLOPPY_DRIVE
call getfloppy
#endif
- mov ax,#INITSEG
+ ;mov ax,#INITSEG
+ mov ax,cs ;setup seg
+ sub ax,#0x20 ;init seg
mov ds,ax
int 0x12 ! determine the size of the basememory
mov [0x2a],ax
diff -Naurw elks/arch/i86/drivers/block/doshd.c ../nanox-read-only/arch/i86/drivers/block/doshd.c
--- elks/arch/i86/drivers/block/doshd.c 2012-02-08 16:12:46.914498544 -0500
+++ ../nanox-read-only/arch/i86/drivers/block/doshd.c 2012-02-11 13:50:50.723715771 -0500
@@ -168,7 +168,7 @@
if ((BD_AX != 0x100) && (!CARRY_SET)) {
drivep->cylinders = ((BD_CX >> 8) & 255);
drivep->cylinders += (((BD_CX >> 6) & 3) * 256);
- drivep->heads = ((BD_DX >> 8) & 63) + 1;
+ drivep->heads = ((BD_DX >> 8)) + 1;
drivep->sectors = (BD_CX & 63);
drivep->fdtype = -1;
}
@@ -461,8 +461,9 @@
BD_DX = hd_drive_map[target]; /* Head 0, drive number */
call_bios();
if (!CARRY_SET) {
- drivep->sectors = (BD_CX & 0xff) + 1;
- drivep->cylinders = (BD_CX >> 8) + 1;
+ drivep->sectors = (BD_CX & 0x3f)/* + 1*/;
+ drivep->cylinders = ((BD_CX >> 8) | ((BD_CX & 0xC0) << 2)) + 1;
+ drivep->heads = (BD_DX >> 8) + 1;
} else
printk("bioshd_open: no diskinfo %d\n", hd_drive_map[target]);
@@ -700,7 +701,7 @@
start = req->rq_sector;
buff = req->rq_buffer;
- if ((int) hd[minor].start_sect == -1 || start >= hd[minor].nr_sects) {
+ if ((int) hd[minor].start_sect == -1 /*|| start >= hd[minor].nr_sects*/) {
printk("hd: bad partition start=%d sect=%d nr_sects=%d.\n",
start, (int) hd[minor].start_sect,
(int) hd[minor].nr_sects);
diff -Naurw elks/arch/i86/drivers/char/Config.in ../nanox-read-only/arch/i86/drivers/char/Config.in
--- elks/arch/i86/drivers/char/Config.in 2012-02-08 16:12:46.942498544 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/Config.in 2012-02-11 13:50:50.995715774 -0500
@@ -3,7 +3,7 @@
#
mainmenu_option next_comment
- comment 'Character device drivers'
+ comment 'Character device drivers (SUBMENU IS CURRENTLY BROKEN!)'
if [ "$CONFIG_ARCH_SIBO" != "y" ]; then
choice 'Select console driver' \
diff -Naurw elks/arch/i86/drivers/char/KeyMaps/Config.in ../nanox-read-only/arch/i86/drivers/char/KeyMaps/Config.in
--- elks/arch/i86/drivers/char/KeyMaps/Config.in 2012-02-11 15:20:36.463741924 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/KeyMaps/Config.in 1969-12-31 19:00:00.000000000 -0500
@@ -1,14 +0,0 @@
-# Automatically created - do not edit.
-
-choice 'XT Keyboard support' \
- "Belgique CONFIG_KEYMAP_BE \
- Deutsch CONFIG_KEYMAP_DE \
- Dvorak CONFIG_KEYMAP_DV \
- Espanol CONFIG_KEYMAP_ES \
- FranÇais CONFIG_KEYMAP_FR \
- Italiano CONFIG_KEYMAP_IT \
- Suede CONFIG_KEYMAP_SE \
- British CONFIG_KEYMAP_UK \
- American CONFIG_KEYMAP_US" American
-
-# EOF.
diff -Naurw elks/arch/i86/drivers/char/KeyMaps/keymaps.h ../nanox-read-only/arch/i86/drivers/char/KeyMaps/keymaps.h
--- elks/arch/i86/drivers/char/KeyMaps/keymaps.h 2012-02-11 15:20:36.463741924 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/KeyMaps/keymaps.h 1969-12-31 19:00:00.000000000 -0500
@@ -1,11 +0,0 @@
-/* Automatically created - do not edit */
-
-#include "keys-be.h" /* BE Belgique */
-#include "keys-de.h" /* DE Deutsch */
-#include "keys-dv.h" /* DV Dvorak */
-#include "keys-es.h" /* ES Espanol */
-#include "keys-be.h" /* FR FranÇais */
-#include "keys-it.h" /* IT Italiano */
-#include "keys-se.h" /* SE Suede */
-#include "keys-uk.h" /* UK British */
-#include "keys-us.h" /* US American */
diff -Naurw elks/arch/i86/drivers/char/KeyMaps/mkcfg ../nanox-read-only/arch/i86/drivers/char/KeyMaps/mkcfg
--- elks/arch/i86/drivers/char/KeyMaps/mkcfg 2012-02-08 16:12:46.970498544 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/KeyMaps/mkcfg 2012-02-11 13:50:50.987715774 -0500
@@ -23,4 +23,4 @@
printf '"\t\tAmerican\n\n# EOF.\n' >&3
}
-codes | sort -k 2 | process 3> Config.in 4> keymaps.h
+codes | sort -k 2f | process 3> Config.in 4> keymaps.h
diff -Naurw elks/arch/i86/drivers/char/bioscon.c ../nanox-read-only/arch/i86/drivers/char/bioscon.c
--- elks/arch/i86/drivers/char/bioscon.c 2012-02-08 16:12:46.994498544 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/bioscon.c 2012-02-11 13:50:50.995715774 -0500
@@ -15,6 +15,7 @@
#include <linuxmt/major.h>
#include <linuxmt/sched.h>
#include <linuxmt/ntty.h>
+#include <linuxmt/debug.h>
#ifdef CONFIG_CONSOLE_BIOS
diff -Naurw elks/arch/i86/drivers/char/meta.c ../nanox-read-only/arch/i86/drivers/char/meta.c
--- elks/arch/i86/drivers/char/meta.c 2012-02-11 01:30:21.683500018 -0500
+++ ../nanox-read-only/arch/i86/drivers/char/meta.c 2012-02-11 13:50:50.987715774 -0500
@@ -67,11 +67,11 @@
static void do_meta_request(kdev_t device)
{
- int major = MAJOR(device);
struct ud_driver *driver = get_driver(major);
struct ud_request *udr;
struct request *req;
char *buff;
+ int major = MAJOR(device);
printk("do_meta_request %d %x\n", major, blk_dev[major].current_request);
if (NULL == driver) {
diff -Naurw elks/arch/i86/kernel/irqtab.c ../nanox-read-only/arch/i86/kernel/irqtab.c
--- elks/arch/i86/kernel/irqtab.c 2012-02-08 16:12:47.006498544 -0500
+++ ../nanox-read-only/arch/i86/kernel/irqtab.c 2012-02-11 13:50:49.923715766 -0500
@@ -36,11 +36,6 @@
#define bios_call_cnt cseg_bios_call_cnt
#endif
-#ifdef CONFIG_ROMCODE
- #define SEG_IRQ_DATA es
-#else
- #define SEG_IRQ_DATA cs
-#endif
#ifndef S_SPLINT_S
#asm
@@ -110,27 +105,27 @@
mov dx,ds ;the original value
cli ;just here
+ xor ax,ax
+ mov es,ax ;intr table
+
#ifdef CONFIG_ROMCODE
mov ax,#CONFIG_ROM_IRQ_DATA
- mov es,ax
+#else
+ mov ax,cs
#endif
+ mov ds,ax
- seg SEG_IRQ_DATA
- mov stashed_ds,ds
- mov bios_call_cnt_l,#5
-
- xor ax,ax
- mov es,ax ;intr table
+ mov stashed_ds,dx
seg es ;insert new timer intr
mov bx,[32]
- mov off_stashed_irq0_l, bx ; the old one
+ mov off_stashed_irq0, bx ; the old one
lea ax,_irq0
seg es
mov [32],ax
seg es
mov bx,[34]
- mov seg_stashed_irq0_l, bx
+ mov seg_stashed_irq0, bx
mov ax,cs
seg es
mov [34],ax
@@ -435,7 +430,7 @@
! Save all registers
!
-! cli ! Might not be disabled on an exception
+ cli ! Might not be disabled on an exception
push ds
push es
push bx
@@ -450,19 +445,23 @@
!
#ifdef CONFIG_ROMCODE
mov bx,#CONFIG_ROM_IRQ_DATA
- mov es,bx
+#else
+ mov bx,cs
#endif
+ mov ds,bx
+
+ mov stashed_irq,ax ! Save IRQ number
+ mov ax,ss ! Get current SS
+ mov bx,ax ! Save for later
+ mov stashed_ss, ax ! Save SS:SP
+ mov ax,sp
+ mov stashed_sp, ax
!
! Switch segments
!
- seg SEG_IRQ_DATA
- mov bx,stashed_ds ! Recover the data segment
- mov ds,bx
- mov es,bx
-
- mov dx,ss ! Get current SS
- mov bp,sp ! Get current SP
- movb cl,bios_call_cnt_l
+ mov ax,stashed_ds ! Recover the data segment
+ mov ds,ax
+ mov es,ax
!
! Set up task switch controller
!
@@ -470,13 +469,14 @@
!
! See where we were (BX holds the SS on entry)
!
- cmp dx,bx ! SS = kernel SS ?
+ cmp ax,bx ! SS = kernel SS ?
je ktask ! Kernel - no work
!
! User or BIOS etc
!
+ mov ax,bx
mov bx,_current
- cmp dx,4[bx] ! entry ss = current->t_regs.ss?
+ cmp ax,4[bx] ! entry ss = current->t_regs.ss?
je utask ! Switch to kernel
!
! Bios etc - switch to interrupt stack
@@ -488,23 +488,37 @@
! User task. Extract kernel SP. (BX already holds current)
!
utask:
- mov sp,[bx] ! switch to kernel stack ptr
+ mov ax,[bx] ! kernel stack ptr
+ mov sp,ax ! switch to kernel stack
inc ch ! Switch allowable
+ j switched
+ktask:
!
! In ktask state we have a suitable stack. It might be
! better to use the intstack..
!
switched:
- mov bx,ds
- mov ss,bx ! /* Set SS: right */
-ktask:
+ mov ax,ds
+ mov ss,ax ! /* Set SS: right */
! /*
! Put the old SS;SP on the top of the stack. We can't
! leave them in stashed_ss/sp as we could re-enter the
! routine on a reschedule.
! */
- push bp ! push entry SP
- push dx ! push entry SS
+#ifdef CONFIG_ROMCODE
+ mov ax,#CONFIG_ROM_IRQ_DATA
+ mov es,ax
+ seg es
+ push stashed_sp
+ seg es
+ push stashed_ss
+
+#else
+ seg cs
+ push stashed_sp
+ seg cs
+ push stashed_ss
+#endif
!
! We are on a suitable stack and cx says whether we can
! switch afterwards. The C code will want to eat CX so
@@ -516,9 +530,19 @@
mov bp,sp
mov _can_tswitch, ch
push cx ! Save ch
+#ifdef CONFIG_ROMCODE
+ seg es
+#else
+ seg cs ! Recover the IRQ we saved
+#endif
+ mov ax,stashed_irq
push ax ! IRQ for later
push bp ! Register base
push ax ! IRQ number
+#ifdef CONFIG_ROMCODE
+ mov ax,ds
+ mov es,ax ;es back to dataseg
+#endif
!
! Call the C code
!
@@ -533,22 +557,48 @@
!
! Restore any chips
!
- cmp ax,#16
+ cmp ax,#15
jge was_trap ! Traps need no reset
- or ax,ax ! Is int #0?
- jnz a4
- dec cl ! Will call bios int?
- je was_trap
-a4:
+ cmp ax,#8
+ jge sec_8259 ! IRQ on low chip
+!
+! Reset primary 8259
+!
mov cl,al ! Save the IRQ number
- movb al,#0x20 ! EOI
- cmp cl,#8
- jb a6 ! IRQ on low chip
+ inb al,0x21 ! The chip line state
+ jmp a7
+a7: jmp a8
+a8:
+! movb al,#1
+! shl al,cl ! Shift the irq (saved in cl) to a mask
+! orb al,_cache_21
+! movb _cache_21, al
+ movb al,_cache_21 ! Extract the IRQ mask register
+ outb 0x21,al ! Now ack the IRQ
+ jmp a9
+a9: jmp a10
+a10: movb al,#0x20 ! EOI
+ outb 0x20,al
+ jmp was_trap
+
!
! Reset secondary 8259 if we have taken an AT rather
! than XT irq. We also have to prod the primay
! controller EOI..
!
+sec_8259:
+ mov cl,al ! Save the IRQ for making masks
+ inb al,0xA1
+ jmp a1
+a1: jmp a2
+a2: movb al,#1
+ shl al,cl
+ orb al,_cache_A1
+ movb _cache_A1, al
+ outb 0xA1,al ! Now ack the IRQ
+ jmp a3
+a3: jmp a4
+a4: movb al,#0x20
outb 0xA0,al
jmp a5
a5: jmp a6
@@ -559,17 +609,6 @@
!
was_trap:
- orb cl,cl
- jnz no_bios_call
-!
-! IRQ 0 (timer) has to go on to the bios for some systems
-!
- dec bios_call_cnt_l
- jne no_bios_call
- mov bios_call_cnt_l,#5
- pushf
- callf [off_stashed_irq0_l]
-no_bios_call:
!
! Now look at rescheduling
!
@@ -616,25 +655,83 @@
pop cx
pop bx
pop es
+#ifdef CONFIG_ROMCODE
+ mov ax,#CONFIG_ROM_IRQ_DATA
+ mov ds,ax
+#else
+ seg cs
+#endif
+ mov ax, stashed_irq
+ or ax,ax
+ jz irq0_bios
pop ds
pop ax
!
! Iret restores CS:IP and F (thus including the interrupt bit)
!
iret
+!
+! IRQ 0 (timer) has to go on to the bios for some systems
+!
+! FIXME: should call the bios only every fifth event.
+!
+irq0_bios:
+ pop ds
+ pop ax ;now the stack empty
+
+;------------------------------------------------
+;Build new Stack
+;
+; SP -> RET seg
+; RET offs
+; SP-4 -> BP
+; SP-4 -> BX
+; DS
+; SP-8 -> free ;sp
+
+label1:
+
+ sub sp,#4 ;space for retf
+ push bp
+ mov bp,sp
+
+ push bx
+ push ds
+#ifdef CONFIG_ROMCODE
+ mov bx,#CONFIG_ROM_IRQ_DATA
+#else
+ mov bx,cs
+#endif
+ mov ds,bx
+ mov bx,bios_call_cnt
+ inc bx
+ cmp bx,#5
+ jne no_bios_call
+
+ xor bx,bx
+ mov bios_call_cnt,bx
+ mov bx, seg_stashed_irq0
+ mov [bp+4], bx
+ mov bx, off_stashed_irq0
+ mov [bp+2], bx
+
+ pop ds
+ pop bx
+ pop bp
+ retf
+
+no_bios_call: ;sp-8
+ mov bios_call_cnt,bx
+ pop ds
+ pop bx ;sp-4
+ pop bp
+ add sp,#4
+ iret
.data
.globl _can_tswitch
_can_tswitch:
.byte 0
-
-off_stashed_irq0_l:
- .word 0
-seg_stashed_irq0_l:
- .word 0
-bios_call_cnt_l:
- .word 0
-
.zerow 256 ! (was) 128 byte interrupt stack
_intstack:
diff -Naurw elks/arch/i86/mm/user.c ../nanox-read-only/arch/i86/mm/user.c
--- elks/arch/i86/mm/user.c 2012-02-08 16:12:47.070498544 -0500
+++ ../nanox-read-only/arch/i86/mm/user.c 2012-02-11 13:50:50.563715771 -0500
@@ -34,23 +34,27 @@
#ifndef S_SPLINT_S
#asm
- push si
- push di
+! push si
+! push di
mov dx,es
mov bx,ds
mov es,bx
- mov ax,[bp+.memcpy_fromfs.ds] ! source segment (local variable)
+! mov ax,[bp+.memcpy_fromfs.ds] ! source segment (local variable)
+ mov ax,[bp-6] ! source segment (local variable)
mov ds,ax
- mov di,[bp+.memcpy_fromfs.daddr] ! destination address
- mov si,[bp+.memcpy_fromfs.saddr] ! source address
- mov cx,[bp+.memcpy_fromfs.len] ! number of bytes to copy
+! mov di,[bp+.memcpy_fromfs.daddr] ! destination address
+! mov si,[bp+.memcpy_fromfs.saddr] ! source address
+! mov cx,[bp+.memcpy_fromfs.len] ! number of bytes to copy
+ mov di,[bp+4] ! destination address
+ mov si,[bp+6] ! source address
+ mov cx,[bp+8] ! number of bytes to copy
cld
rep
movsb
mov ds,bx
mov es,dx
- pop di
- pop si
+! pop di
+! pop si
#endasm
#endif
@@ -74,20 +78,24 @@
#ifndef S_SPLINT_S
#asm
- push si
- push di
+! push si
+! push di
mov dx,es
- mov ax,[bp+.memcpy_tofs.es] ! source segment (local variable)
+! mov ax,[bp+.memcpy_tofs.es] ! source segment (local variable)
+ mov ax,[bp-6] ! source segment (local variable)
mov es,ax
- mov di,[bp+.memcpy_tofs.daddr] ! destination address
- mov si,[bp+.memcpy_tofs.saddr] ! source address
- mov cx,[bp+.memcpy_tofs.len] ! number of bytes to copy
+! mov di,[bp+.memcpy_tofs.daddr] ! destination address
+! mov si,[bp+.memcpy_tofs.saddr] ! source address
+! mov cx,[bp+.memcpy_tofs.len] ! number of bytes to copy
+ mov di,[bp+4] ! destination address
+ mov si,[bp+6] ! source address
+ mov cx,[bp+8] ! number of bytes to copy
cld
rep
movsb
mov es,dx
- pop di
- pop si
+! pop di
+! pop si
#endasm
#endif
}
@@ -167,21 +175,25 @@
#ifndef S_SPLINT_S
#asm
- push di
- push si
- mov ax,[bp+.strlen_fromfs.ds] ! source segment (local variable)
+! push di
+! push si
+! mov ax,[bp+.strlen_fromfs.ds] ! source segment (local variable)
+ mov ax,[bp-6] ! source segment (local variable)
mov es,ax
- mov di,[bp+.strlen_fromfs.saddr] ! source address
+! mov di,[bp+.strlen_fromfs.saddr] ! source address
+ mov di,[bp+4] ! source address
cld
xor al,al ! search for NULL byte
mov cx,#-1
rep
scasb
- sub di,[bp+.strlen_fromfs.saddr] ! calc len +1
+! sub di,[bp+.strlen_fromfs.saddr] ! calc len +1
+ sub di,[bp+4] ! calc len +1
dec di
- mov [bp+.strlen_fromfs.ds],di ! save in local var ds
- pop si
- pop di
+! mov [bp+.strlen_fromfs.ds],di ! save in local var ds
+ mov [bp-6],di ! save in local var ds
+! pop si
+! pop di
#endasm
#endif
diff -Naurw elks/arch/i86/tools/wrt_disk.c ../nanox-read-only/arch/i86/tools/wrt_disk.c
--- elks/arch/i86/tools/wrt_disk.c 2012-02-08 16:12:47.106498545 -0500
+++ ../nanox-read-only/arch/i86/tools/wrt_disk.c 2012-02-11 13:50:50.067715769 -0500
@@ -7,7 +7,7 @@
* pick up any improvements as that developes.
*/
-#define DEBUG
+#define DEBUG_WRT_DISK
#include "tools.h"
@@ -51,7 +51,7 @@
LCD_WriteChar(' ');
}
-#ifndef DEBUG
+#ifndef DEBUG_WRT_DISK
void debug(char *a) {
while (*a)
@@ -314,3 +314,5 @@
return 0;
}
+
+#undef DEBUG_WRT_DISK
diff -Naurw elks/fs/romfs/inode.c ../nanox-read-only/fs/romfs/inode.c
--- elks/fs/romfs/inode.c 2012-02-11 01:12:46.731494883 -0500
+++ ../nanox-read-only/fs/romfs/inode.c 2012-02-11 13:50:49.371715766 -0500
@@ -243,7 +243,7 @@
return res;
}
-static int romfs_copyfrom(struct inode *i, char *dest, loff_t offset,
+static int romfs_copyfrom(struct inode *i, void *dest, loff_t offset,
size_t count)
{
struct buffer_head *bh;
@@ -279,7 +279,7 @@
while (res < count) {
offset += maxsize;
- *dest += maxsize;
+ ((char *) dest) += maxsize;
bh = bread(i->i_dev, (block_t) (offset >> ROMBSBITS));
diff -Naurw elks/include/arch/debug_disp.h ../nanox-read-only/include/arch/debug_disp.h
--- elks/include/arch/debug_disp.h 2012-02-08 16:12:47.146498545 -0500
+++ ../nanox-read-only/include/arch/debug_disp.h 2012-02-11 13:50:48.783715763 -0500
@@ -7,7 +7,10 @@
* Debugging facility over i/o port
* Modifications:
*
- * $Log$
+ * $Log: debug_disp.h,v $
+ * Revision 1.3 2002/04/26 19:45:17 rhw2
+ * Next stage of `make lint` verification of the ELKS source code.
+ *
* Revision 1.2 2002/02/24 17:29:00 rhw2
* Fixed #else and #endif to not fox the bcc -ansi option. Reformatted scripts/Configure and scripts/Menuconfig to a consistent style. Removed ELKS dependency on the Linux kernel source being available.
*
diff -Naurw elks/include/arch/dma.h ../nanox-read-only/include/arch/dma.h
--- elks/include/arch/dma.h 2012-02-08 16:12:47.146498545 -0500
+++ ../nanox-read-only/include/arch/dma.h 2012-02-11 13:50:48.783715763 -0500
@@ -1,4 +1,4 @@
-/* $Id$
+/* $Id: dma.h,v 1.5 2002/04/26 19:45:18 rhw2 Exp $
* linux/include/asm/dma.h: Defines for using and allocating dma channels.
* Written by Hennus Bergman, 1992.
* High DMA channel support & info by Hannu Savolainen
diff -Naurw elks/init/main.c ../nanox-read-only/init/main.c
--- elks/init/main.c 2012-02-08 16:12:47.278498546 -0500
+++ ../nanox-read-only/init/main.c 2012-02-11 13:50:49.191715765 -0500
@@ -1,4 +1,4 @@
-/* $Header$
+/* $Header: /cvsroot/elks/elks/init/main.c,v 1.28 2006/11/08 22:57:21 segin Exp $
*/
#include <linuxmt/config.h>
diff -Naurw elks/kernel/printk.c ../nanox-read-only/kernel/printk.c
--- elks/kernel/printk.c 2012-02-08 16:12:47.282498547 -0500
+++ ../nanox-read-only/kernel/printk.c 2012-02-11 13:50:48.307715761 -0500
@@ -25,14 +25,18 @@
* MTK: Sep 97 - Misc hacks to shrink generated code
*/
-#include <arch/segment.h>
+#include <linuxmt/fcntl.h>
#include <linuxmt/mm.h>
+#include <linuxmt/sched.h>
+#include <linuxmt/types.h>
+
+#include <arch/segment.h>
/*
* Just to make it work for now
*/
-extern void con_charout(char);
+extern void con_charout();
static void con_write(register char *buf, int len)
{
@@ -44,10 +48,11 @@
static char colour[8] = { 27, '[', '3', '0', ';', '4', '0', 'm' };
- if (++(colour[3]) == '8')
- colour[3] = '1';
-
p = colour;
+
+ if (++(p[3]) == '8')
+ p[3] = '1';
+
do
con_charout(*p);
while (*p++ != 'm');
@@ -76,51 +81,42 @@
static void numout(char *ptr, int len, int width, int base, int useSign,
int Upper, int Zero)
{
+ long int vs;
unsigned long int v;
- register char *bp;
- char buf[12];
+ register char *bp, *bp2;
+ char buf[32];
- if (width > sizeof(buf)) /* Error-check width specified */
- width = sizeof(buf);
+ if (width > 31) /* Error-check width specified */
+ width = 31;
- v = (len == 2) ? *((unsigned short *) ptr) : *((unsigned long *) ptr);
- if (useSign) {
- if (len == 2)
- v = ((long)(*((short *) ptr)));
- if ((long)v < 0)
- v = (-(long)v);
- else
- useSign = 0;
- }
+ bp = bp2 = buf + 31;
- bp = buf + sizeof(buf);
-
- {
- register char *bp2;
+ if (useSign) {
+ vs = (len == 2) ? *((short *) ptr) : *((long *) ptr);
+ if (vs < 0) {
+ v = - vs;
+ *bp = '-';
+ con_write(bp, 1);
+ } else
+ v = vs;
+ } else
+ v = (len == 2) ? *((unsigned short *) ptr) : *((unsigned long *) ptr);
- bp2 = Upper ? hex_string : hex_lower;
+ *bp = 0;
do {
- *--bp = *(bp2 + (v % base)); /* Store digit */
- } while ((v /= base));
- }
-
- if (useSign && !Zero)
- *--bp = '-';
+ if (Upper)
+ *--bp = hex_string[v % base]; /* Store digit */
+ else
+ *--bp = hex_lower[v % base]; /* Store digit */
+ } while ((v /= base) && (bp > buf));
- width -= buf - bp + sizeof(buf);
- while (--width >= 0) /* Process width */
+ while (bp2 - bp < width) /* Process width */
if (Zero)
*--bp = '0';
else
*--bp = ' ';
- if (useSign && Zero) {
- if (*bp != '0')
- bp--;
- *bp = '-';
- }
-
- con_write(bp, buf + sizeof(buf) - bp);
+ con_write(bp, buf - bp + sizeof(buf) - 1);
}
void printk(register char *fmt,int a1)
@@ -184,7 +180,7 @@
con_write(cp++, 1);
width--;
}
- while (--width >= 0)
+ while (width-- > 0)
con_write(" ", 1);
break;
case 't':
@@ -195,11 +191,11 @@
cp++;
width--;
}
- while (--width >= 0)
+ while (width-- > 0)
con_write(" ", 1);
break;
case 'c':
- while (--width >= 1)
+ while (width-- > 1)
con_write(" ", 1);
con_write(p, 1);
p += 2;
@@ -228,7 +224,7 @@
for (j = 2; j <= 8; j++)
printk(" %04X", bp[j]);
printk("\n");
- } while (++i < 9);
+ } while (++i > 9);
/* Lock up with infinite loop */
@@ -243,8 +239,10 @@
panic("kernel restarted\n");
}
-void redirect_main(void)
-{
- pokeb(get_cs(), 0, 0xe9);
- pokew(get_cs(), 1, ((__u16) kernel_restarted) - 3);
-}
+/*
+//void redirect_main(void)
+//{
+// pokeb(get_cs(), 0, 0xe9);
+// pokew(get_cs(), 1, ((__u16) kernel_restarted) - 3);
+//}
+*/