.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comdlg32.inc
include \masm32\include\comctl32.inc
include \masm32\include\gdi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comdlg32.lib
includelib \masm32\lib\comctl32.lib
includelib \masm32\lib\gdi32.lib

EZACIM = 000000h
eepromcim = 0f000h	;ennyivel van odebb az eeprom a blokk elejetol

;== USB alapu uj programozo PIC 18F2xxx/4xxx tipusokhoz, pic18f4553-al, 2011.05.30.
; a PIC-ben az f.asm a tarsprogi
; felismeri a chipet es beallitja a blokkhosszt es az eeprom meretet, a bulkeras-sal kuldi el a blokkhosszt
; az IDwordoket is kezeli a hexafilebol, configgal egyutt irja be
;ha nem akarja irni a teruletet, akkor eloszor az irasi blokkhosszt,
;majd a megelozo bulkeras torleseket kell ellenorizni, hogy eleget torol-e

EEPROMSIZE equ 1024	;eeprom merete bajtokban
CODESIZE equ 01000H	;code merete wordokben
EEPROMBLOKK equ 32      ;amekkora darabokban irom az eepromot
HEXFILESIZE equ 100000	;a behivhato hexfile max hossza
PATHSIZE equ 200	;file path meretek
USBBUFFERSIZE equ 100	;USB vevopuffer merete 

read_command  equ 'r'
write_command equ 'w'
reset_command equ 't'
bulk_command  equ 'b'
eepromread_command   equ 'e'
eepromwrite_command  equ 'j'
configwrite_command  equ 'c'
idwrite_command	     equ 'i'

WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
DlgProc proto :HWND, :DWORD, :DWORD, :DWORD
Szamot_Betesz proto :DWORD
HexaSzamot_Betesz proto :DWORD
Wordot_Betesz proto :DWORD
Szepen_kijelzi proto :DWORD
Szepen_beirja proto :DWORD
Hiba proto :DWORD
Megszolit proto :DWORD
Szolkuld proto :DWORD
Wszolkuld proto :DWORD
Wbszolkuld proto :DWORD
Wprogkuld proto :DWORD
Wbeiras proto
Kepes proto :HANDLE
Draw proto :HANDLE
Keptelen proto :HANDLE,:DWORD
IsWinNT proto


mdd	MACRO a,b
	mov eax,b
	mov a,eax
	ENDM


.const
BULK_CHIP	equ	110
BULK_DATEPROM	equ	111
BULK_BBLOCK	equ	112
BULK_CONFIG	equ	113
BULK_CODEPROM0	equ	114
BULK_CODEPROM1	equ	115
BULK_CODEPROM2	equ	116
BULK_CODEPROM3	equ	117

IDM_OPEN   equ 201
IDM_SAVE   equ 202
IDM_EXIT   equ 203
IDM_WRITE   equ 204
IDM_ABOUT  equ 205
IDM_READ   equ 206
IDM_ERASE   equ 208
IDM_VERIFY   equ 209
IDM_IDENTIFY   equ 210
IDM_RESET   equ 211
IDM_EECLEAR equ	212
IDM_EEWRITE equ	213
IDM_FLAGS equ	214
IDM_F1 equ	215
IDM_F2 equ	216
IDM_F3 equ	217
IDM_F4 equ	218
IDM_F5 equ	219
IDM_F6 equ	220
IDM_F7 equ	221
IDM_EEREAD equ	222
IDM_EEVERIFY equ	223
IDM_EESAVE equ	224
IDM_EELOAD equ	225

FLAG_WT	equ	230
FLAG_PU	equ	231
FLAG_BU	equ	232
FLAG_LV	equ	233
FLAG_DP	equ	234
FLAG_PP	equ	235
OSC_XT	equ	236
OSC_RC	equ	237
OSC_LP	equ	238
OSC_HS	equ	239
OSC_TIP	equ	240
CONF_TEXT equ	241
CONF_TEXT2 equ	242
PUSH_OK	equ	243
PUSH_CANCEL equ	244
PUSH_DEFAULT equ 245
Picikon equ 248
IDM_REP	equ 305

IESO 	equ   500
FCMEN 	equ   505
FOSC0   equ   510
USBDIV  equ   530
CPUDIV0 equ   535
PLLDIV0 equ   540
VREGEN  equ   550
TEXT    equ   551
BORV0   equ   555
BOREN0  equ   560
PWRTEN  equ   565
WDTPS0  equ   570
WDTEN   equ   590
MCLRE   equ   595
LPT1OSC equ   600
PBADEN  equ   605
CCP2MX  equ   610
DEBUG   equ   615
XINST   equ   620
ICPORT  equ   625
BBSIZ0  equ   630
LVP     equ   650
STVREN  equ   655
CP3     equ   660
CP2     equ   661
CP1     equ   662
CP0     equ   663
CPD     equ   664
CPB     equ   665
WRT3    equ   670
WRT2    equ   671
WRT1    equ   672
WRT0    equ   673
WRTD    equ   674
WRTB    equ   675
WRTC    equ   676
EBTR3   equ   680
EBTR2   equ   681
EBTR1   equ   682
EBTR0   equ   683
EBTRB   equ   684
FLAG_OK equ   690
FLAG_CANCEL equ   691
FLAG_SAVE equ   692
FLAG_LOAD equ   693
                 

OSVINFO STRUCT
  dwOSVersionInfoSize   DWORD      ?
  dwMajorVersion        DWORD      ?
  dwMinorVersion        DWORD      ?
  dwBuildNumber         DWORD      ?
  dwPlatformId          DWORD      ?
  szCSDVersion          BYTE 128 dup (?)
OSVINFO ENDS

.data
komun DCB <>		;a comhoz kell
komunstring db "COMx: baud=19600 parity=N data=8 stop=1",0
hiba_komun db "Hiba a setcommnal",0
hibafejlec_komun db "Comhiba hibafejlec",0
devicename3 db '\\.\COM3',0     
devicename4 db '\\.\COM4',0     
devicename5 db '\\.\COM5',0     
hibafejlec_nincscomm db 'Nem tudom megnyitni a virtualis COM portot!',0
hiba_nincscomm db 'Akarod most csatlakoztatni?',0
hiba_nincsprogi db 'A programot meg nem toltotted be!',0
hiba_nincspic db 'Ezt a PIC tipust nem irtad meg be a chiptablaba!',0
hibafejlec_nincsprogi db 'Hiba a programozasnal',0

karakter db 0
adasbyteok db 100 dup (0)

tesztfilenev db 'tesztfile',0
textfejlec db 'EEPROM DATA szoveges formaban',0
eepromfilenev db 'eeprom.bin',0
ClassName db "SimpleWinClass",0
statClass db "STATIC",0
AppName  db "USB"
AppFOName db  "  -- PIC18F2xxx/4xxx programozo    C-kod, D-adat, T-szoveges adat   XP verzio",0
MenuName db "Enkismenum",0
DlgName db "Flagbeall",0
NT_e db 0
hwndDlg dd 0            ; flag box kezeloje
Sorszam dd 0
nemkettospont db 'Nincs : jel a sor elejen',13,10,0
nemhexaszam db 'Felismerhetetlen hexakod a sorban!',13,10,0
nemchecksum db 'Ellenorzoosszeg hiba',13,10,0
ismeretlen_modus db 'Ismeretlen modu byte',13,10,0
ismeretlen_felsocim db 'Ervenytelen upper word cim a 04 mod byte-ja utan!',13,10,0
MessTajek 	db "- Hardware connections by BBalazs -",0
MessEnyem 	db 13,10,"Programming chip is a PIC18F4553",13,10
		db 13,10,"MCLR to RA0"
		db 13,10,"GND  to other PIC's GND"
		db 13,10,"PRG  to RA1"
		db 13,10,"CLK  to RA2"
		db 13,10,"DTA  to RA3",13,10
		db 13,10,"Programming chip connected to PC via USB."
db 13,10,13,10
db "  bbalazs@phys.szote.u-szeged.hu",13,10,0
eeplusz dd 0
MessHiba db "Hiba!!!! Sor:"
hibassorszam db '0000',0
extenzio db "hex",0
cextenzio db "cfg",0
idword dw 0
konfigword db 'xxxx PIC18Fxxxx : xxxx xxxx xxxx xxxx xxxx xxxx xxxx',0
konfigwordok dw 8 dup (0)
IDwords db 'ID words: xxxx xxxx xxxx xxxx ',0
idwordok dw 1234h,5678h,9abch,0def0h,0,0,0,0

irando_blokkmeret dd 0
eeprom_meret dd 0

verifyok db 'Verify: OK',0
verifyerr db 'xxxx hiba',0
Address db ' Cim: xxxx',0
szaz dd 100
maxpiccim dd 0
elozo dd 0
idod dd 0
cimbkg dd 3175b9h    ;hatter szinek
adatbkg dd 900000h
adatcolor dd 0e0e000h
eepromcimbkg dd 5195d9h	;eeprom hatter
eeprombkg dd 00e171h

aciklo dd 0
honnanveszi dd 0
tomeg dw 0
vegzo dw 0

ofn   OPENFILENAME <>
FilterString db "MPASM Hexafile *.hex",0,"*.hex",0
             db "MPASM Objectfile *.obj",0,"*.obj",0
	     db "All Files *.*",0,"*.*",0,0
cofn   OPENFILENAME <>
cFilter db "Config file *.cfg",0,"*.cfg",0
	     db "All Files *.*",0,"*.*",0,0
_hextbl         db      '0123456789ABCDEF'
osztok dd 1000000000,100000000,10000000,1000000,100000,10000,1000,100,10,1,0
szepite db 0
szam32cim db "0000000000",0,0,0,0
szamcim db "00000000",0
szam16cim db "0000    ",0
szam8cim db "00   ",0

filenyitva db FALSE
filemeret dd 0
harminchat dw 36
tizenhat dw 16
huszonhat dw 26
bulkopcio dw 0
sima_program db TRUE

sbParts dd 30,65,170,480,550,630,940,-1	; status line separator positions
brushinfo dd BS_SOLID,0000ffh,NULL

;chipnevek es jellemzoik . Azonosito,nev,irasi blokkmeret,eeprom-meret, az utolso csak tartalek
chiptabla = $
dw 2160h,2221, 8, 256,0
chipsor_hossza=$-chiptabla
dw 2120h,2321, 8, 256,0
dw 1160h,2410,32,   0,0
dw 1140h,2420,32, 256,0
dw 1260h,2455,32, 256,0
dw 1ae0h,2480,32, 256,0
dw 1120h,2510,32,   0,0
dw 0ce0h,2515,64,   0,0
dw 1100h,2520,32, 256,0
dw 0cc0h,2525,64,1024,0
dw 1240h,2550,32, 256,0
dw 1ac0h,2580,32, 256,0
dw 0ee0h,2585,64,1024,0
dw 0ca0h,2610,64,   0,0
dw 0c80h,2620,64,1024,0
dw 0ec0h,2680,64,1024,0
dw 2140h,4221, 8, 256,0
dw 2100h,4321, 8, 256,0
dw 10e0h,4410,32,   0,0
dw 10c0h,4420,32, 256,0
dw 1220h,4455,32, 256,0
dw 1aa0h,4480,32, 256,0
dw 10a0h,4510,32,   0,0
dw 0c60h,4515,64,   0,0
dw 1080h,4520,32, 256,0
dw 0c40h,4525,64,1024,0
dw 1200h,4550,32, 256,0
dw 1a80h,4580,32, 256,0
dw 0ea0h,4585,64,1024,0
dw 0c20h,4610,64,   0,0
dw 0c00h,4620,64,1024,0
dw 0e80h,4680,64,1024,0
dw 2A00h,4553,32, 256,0
dw 0,0,0,0,0,0,0,0

fosctabla db 0,0,1,1,2,3,4,5,6,7,8,9,10,10,11,11

.data?
egywordnyi WORD ?
idegbee BYTE ?
idegbe16 WORD ?
ideglenes16 WORD ?
kezdocim DWORD ?
ciklusa DWORD ?
szamlalo DWORD ?
szoszamolo DWORD ?
kulsos DWORD ?
vegsos DWORD ?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hComm HANDLE ?
hFile HANDLE ?
hsFile HANDLE ?
hMenu HANDLE ?
hwnd HANDLE ?
hStatus HANDLE ?
hMemory1 HANDLE ?
pMemory DWORD ?
hMemory2 HANDLE ?
tMemory DWORD ?
hMemory3 HANDLE ?
vMemory DWORD ?
holkezdodott DWORD ?
holvegzodott DWORD ?
progcim DWORD ?
modus BYTE ?
checksum BYTE ?
ideghex BYTE ?
uresblokk BYTE ?
ciklusszam DWORD ?
blokkok DWORD ?
valamicik DWORD ?
belsocik DWORD ?
ykord DWORD ?
xkord DWORD ?
cimzes DWORD ?
xdarab DWORD ?
ydarab DWORD ?
vpozic DWORD ?
ideglenes BYTE ?
timerjelzo BYTE ?
readvan DWORD ?
dialogstate DWORD ?
idegbe WORD ?
ciklus WORD ?
errors DWORD ?
piccim DWORD ?
conftextcim DWORD ?
olvass_datat_is DWORD ?
fo_memoriamutato DWORD ?
idegkonfig BYTE ?
          
SizeReadWrite DWORD ?
usbpuffer BYTE USBBUFFERSIZE dup (?)	;az USB-s beolvasashoz
nevpuffer db PATHSIZE dup (?)
cpuffer db PATHSIZE dup (?)
reppuffer db PATHSIZE DUP (?)
dirbuffer db PATHSIZE dup (?)
textpuffer db EEPROMSIZE dup (?)


.code
start:
;	mov eeprom_meret,EEPROMSIZE
	invoke GetModuleHandle, NULL
	mov hInstance,eax
	invoke GetCommandLine
	invoke GetCurrentDirectory,PATHSIZE-1,addr dirbuffer

;a COM4 virtual USB beallitasai

com4virtual:
	invoke CreateFile,ADDR devicename4,GENERIC_READ or GENERIC_WRITE, 0, NULL, OPEN_EXISTING, NULL,NULL
	mov bl,'4'
	cmp eax,INVALID_HANDLE_VALUE
	jne jocomm

        invoke MessageBox, NULL,addr hiba_nincscomm, addr hibafejlec_nincscomm, MB_YESNO
	  .if eax == IDYES
		jmp com4virtual
	  .else
		jmp veglegvege
	  .endif
      jocomm:
        mov komunstring+3,bl
	mov AppFOName,bl
	mov hComm,eax
	
	invoke BuildCommDCB, addr komunstring, addr komun
	invoke SetCommState,hComm,addr komun
	.if eax == FALSE
        invoke MessageBox, NULL,addr hiba_komun, addr komunstring, MB_YESNO
        .endif

nemkellusb:

;---memfoglalas
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,65536
	mov  hMemory1,eax
	invoke GlobalLock,hMemory1
	mov pMemory,eax   ;program memory
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,65536
	mov  hMemory3,eax
	invoke GlobalLock,hMemory3
	mov vMemory,eax   ;verify memory
	invoke GlobalAlloc,GMEM_FIXED or GMEM_ZEROINIT,HEXFILESIZE
	mov  hMemory2,eax
	invoke GlobalLock,hMemory2
	mov tMemory,eax	;text memory for hexfile

	mov edi,pMemory   ;clear progmem
	mov ecx,65535
	mov al,0
	rep stosb
	mov edi,pMemory

	mov edi,vMemory	  ;clear verifymem
	mov ecx,65535
	mov al,0
	rep stosb

	mov edi,tMemory	  ;clear textHEX mem
	mov ecx,HEXFILESIZE-4
	mov al,0
	rep stosb

	invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
veglegvege:
	mov adasbyteok,'k'
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke CloseHandle,hComm
	invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
	LOCAL wc:WNDCLASSEX
	LOCAL msg:MSG
	mov   wc.cbSize,SIZEOF WNDCLASSEX
	mov   wc.style, CS_HREDRAW or CS_VREDRAW
	mov   wc.lpfnWndProc, OFFSET WndProc
	mov   wc.cbClsExtra,NULL
	mov   wc.cbWndExtra,NULL
	push  hInst
	pop   wc.hInstance
	mov   wc.hbrBackground,COLOR_WINDOW+0
	mov   wc.lpszMenuName,OFFSET MenuName
	mov   wc.lpszClassName,OFFSET ClassName
	invoke LoadIcon,hInstance,Picikon
	mov   wc.hIcon,eax
	mov   wc.hIconSm,eax
	invoke LoadCursor,NULL,IDC_ARROW
	mov   wc.hCursor,eax
	invoke RegisterClassEx, addr wc

	INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW or WS_VSCROLL,0,310,1230,420,NULL,NULL,hInst,NULL
	mov   hwnd,eax

; statusline def
	invoke CreateStatusWindow,WS_CHILD or WS_VISIBLE, NULL, hwnd, 200
	mov hStatus, eax
	invoke SendMessage,hStatus,SB_SETPARTS,7,ADDR sbParts
	invoke SetScrollRange,hwnd,SB_VERT,0,CODESIZE*2+EEPROMSIZE-100,TRUE	
; statusline enddef
	INVOKE ShowWindow, hwnd,SW_SHOWNORMAL
	INVOKE UpdateWindow, hwnd

	invoke GetMenu,hwnd
	mov  hMenu,eax

	call configbe

	.WHILE TRUE
                INVOKE GetMessage, ADDR msg,NULL,0,0
                .BREAK .IF (!eax)
                .if hwndDlg!=0
                        invoke IsDialogMessage,hwndDlg,ADDR msg
                        .if eax==TRUE
                                .continue
                        .endif
                .endif
                INVOKE TranslateMessage, ADDR msg
                INVOKE DispatchMessage, ADDR msg
	.ENDW
	mov     eax,msg.wParam
	ret
WinMain endp

WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
	LOCAL hdc:HDC
	LOCAL Rct:RECT
	LOCAL Rctmain:RECT
	LOCAL ps:PAINTSTRUCT

	.IF uMsg==WM_DESTROY
		invoke PostQuitMessage,NULL

	.ELSEIF uMsg == WM_SIZE
        	invoke GetWindowRect,hStatus,ADDR Rct
        	mov eax, Rct.bottom
        	sub eax, Rct.top
        	sub lParam[2], eax
        	invoke MoveWindow,hStatus,0,lParam[0],lParam[2],lParam[0],TRUE

	.ELSEIF uMsg==WM_PAINT
		invoke BeginPaint,hWnd, ADDR ps
		mov    hdc,eax
		invoke GetClientRect,hWnd, ADDR Rct
		mov eax,DWORD ptr Rct+8	  ;x size
		cmp eax,70
		jle blabla
		sub eax,40
		xor edx,edx
		div harminchat
		mov xdarab,eax
		mov eax,DWORD ptr Rct+12  ;y size
		cmp eax,40
		jle blabla
		sub eax,20	;a security frame
		xor edx,edx
		div tizenhat
		mov ydarab,eax
		mov ykord,0
		mov eeplusz,0	;az eeprom 0-nal indul...
		mov eax,vpozic
		and eax,0fffffffeh	;must be compatible with word organization!
		mov cimzes,eax
		cmp eax, CODESIZE*2
		jl megjoeep

		
		mov eax, cimzes
		sub eax, CODESIZE*2
		mov eeplusz,eax
		jmp eepromkiiro
	    megjoeep:
		mov valamicik,0
            valamifej:
		mov xkord,0
		mov eax,cimzes
		invoke Wordot_Betesz,eax
		mov szam16cim+4,':'
		invoke SetTextColor,hdc,0	;black
		invoke SetBkColor,hdc,cimbkg	;address background (gray)
                invoke TextOut,hdc,xkord,ykord,addr szam16cim,8
		mov szam16cim+4,' '
		invoke SetTextColor,hdc,adatcolor	;black
		add xkord,40
              mov belsocik,0
	valamiword:
		mov eax,belsocik
		shl eax,1
		mov esi,eax	;belsocik*2
		add esi,cimzes
		cmp esi,CODESIZE*2
		jge eepromkiiro
		mov edi,esi
		add esi,pMemory
		add edi,vMemory
		invoke SetBkColor,hdc,adatbkg	;gray
		xor eax,eax
		mov ax,word ptr [esi]
		cmp ax,word ptr [edi]
		je egyenlok
		invoke SetBkColor,hdc,0000c0h 	;red
	   egyenlok: 
		mov ax,word ptr [esi]	
		invoke Wordot_Betesz,eax
		invoke TextOut,hdc,xkord,ykord,addr szam16cim,5
                add xkord,36
		add belsocik,1
		mov eax,xdarab
		cmp belsocik,eax
		jne valamiword
		add ykord,16
		mov eax,xdarab
		shl eax,1
		add cimzes,eax
		inc valamicik
		mov eax,ydarab
		cmp valamicik,eax
		jne valamifej
		jmp kodvege


	eepromkiiro:
		mov eax,DWORD ptr Rct+8	  ;x size differs for the eeprom data
		sub eax,40
		xor edx,edx
		div huszonhat
		mov xdarab,eax

		mdd cimzes,eeplusz
		mov valamicik,0
		add ykord,16
            valamifej2:
		mov xkord,0
		mov eax,cimzes
		invoke Wordot_Betesz,eax
		mov szam16cim+4,':'
		invoke SetTextColor,hdc,0	;black
		invoke SetBkColor,hdc,eepromcimbkg    ;dark gray
                invoke TextOut,hdc,xkord,ykord,addr szam16cim,8
		mov szam16cim+4,' '
		invoke SetTextColor,hdc,0	;black
		add xkord,40
              mov belsocik,0
	valamiword2:
		mov eax,belsocik
		mov esi,eax	
		add esi,cimzes
		cmp esi,eeprom_meret	
		jge kodvege
		add esi,eepromcim	;eeprom data starts here
		mov edi,esi
		add esi,pMemory
		add edi,vMemory
		invoke SetBkColor,hdc,eeprombkg	;data background (green)
		mov al,byte ptr [esi]
		cmp al,byte ptr [edi]
		je egyen2
		invoke SetBkColor,hdc,0000d0h   ;lighter red
	   egyen2: 
		xor eax,eax
		movzx ax,byte ptr [esi]	
		invoke Wordot_Betesz,eax
                invoke TextOut,hdc,xkord,ykord,addr szam16cim+2,5
                add xkord,26
		add belsocik,1
		mov eax,xdarab
		cmp belsocik,eax
		jne valamiword2
		add ykord,16
		mov eax,xdarab
		add cimzes,eax
		inc valamicik
		mov eax,ydarab
		cmp valamicik,eax
		jne valamifej2
	kodvege:
		invoke EndPaint,hWnd, ADDR ps
	     blabla:
	.ELSEIF uMsg==WM_CREATE
                mov ofn.lStructSize,SIZEOF ofn
		push hWnd
		pop  ofn.hWndOwner
		push hInstance
		pop  ofn.hInstance
		mov  ofn.lpstrFilter, OFFSET FilterString
		mov  ofn.lpstrFile, OFFSET nevpuffer
		mov  ofn.nMaxFile,PATHSIZE
		mov  ofn.lpstrInitialDir, offset dirbuffer
		mov  ofn.lpstrDefExt, OFFSET extenzio

                mov cofn.lStructSize,SIZEOF cofn
		push hWnd
		pop  cofn.hWndOwner
		push hInstance
		pop  cofn.hInstance
		mov  cofn.lpstrFilter, OFFSET cFilter
		mov  cofn.lpstrFile, OFFSET cpuffer
		mov  cofn.nMaxFile,PATHSIZE
		mov  cofn.lpstrInitialDir, offset dirbuffer
		mov  cofn.lpstrDefExt, OFFSET cextenzio

	.ELSEIF uMsg==WM_MOUSEWHEEL
		mov eax,wParam
		mov ebx,eax
		shr ebx,16
		and bx,0f000h
		cmp bx,0
		je pozitgorgo
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEDOWN, NULL
		jmp semmittevo
	     pozitgorgo:	
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEUP, NULL
		jmp semmittevo


	.ELSEIF uMsg==WM_KEYDOWN
		push wParam
		pop eax
		.if ax==VK_NEXT	;lefele nyil
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEDOWN, NULL
		.elseif ax==VK_PRIOR	;felfele nyil
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEUP, NULL
		.elseif ax==VK_D	;d betu a data
			mov vpozic,CODESIZE*2
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEUP, NULL
		.elseif ax==VK_C	;c betu a code
			mov vpozic,0
			Invoke SendMessage, hwnd,WM_VSCROLL, SB_PAGEUP, NULL
		.elseif ax==VK_T	;t betu az eeprom text ablak
		pushad
		mov eax,pMemory
		add eax,eepromcim
		mov esi,eax
		mov edi,0
	      berakos:
		cmp edi,eeprom_meret	
		je textcveg
		mov al,byte ptr [esi]
		cmp al,0
		jne atrakos
		mov al,'.'
	       atrakos:
		mov textpuffer[edi],al
		inc esi
		inc edi
		jmp berakos
       textcveg:
		invoke MessageBox, NULL,addr textpuffer, addr textfejlec, MB_OK
		popad

	mov ciklusa,7
	mov esi,0
	mov edi,18
    ujbrak2:
	movzx eax, word ptr konfigwordok[esi]
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword[edi],eax	
	add edi,5
	add esi,2
	dec ciklusa
	jne ujbrak2

	movzx eax, word ptr idword
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword,eax	

	invoke SendMessage,hStatus,SB_SETTEXT,3,addr konfigword
        

		.endif

	.ELSEIF uMsg==WM_VSCROLL
		mov eax,wParam
		mov ebx,eax
		shr ebx,16
		.if ax==SB_THUMBPOSITION
			jmp ugyanaz
		.elseif ax==SB_THUMBTRACK
            		ugyanaz:
			mov vpozic,ebx
             semmittevo:
	  		invoke SetScrollPos,hwnd,SB_VERT,vpozic,TRUE
		        invoke InvalidateRect, hwnd, NULL,TRUE
		.elseif ax==SB_LINELEFT
			cmp vpozic,0
			je semmittevo
			dec vpozic
			jmp semmittevo
		.elseif ax==SB_LINERIGHT
			cmp vpozic,CODESIZE*2+EEPROMSIZE-100
			je semmittevo
			inc vpozic
			jmp semmittevo
		.elseif ax==SB_PAGEUP
			cmp vpozic,127
			jle igazito
			sub vpozic,128
			jmp semmittevo
		      igazito:
			mov vpozic,0
			jmp semmittevo
		.elseif ax==SB_PAGEDOWN
			cmp vpozic,CODESIZE*2+EEPROMSIZE-228
			jge semmittevo
			add vpozic,128
			jmp semmittevo
      		.endif

	.ELSEIF uMsg==WM_COMMAND
		mov eax,wParam
		.if ax==IDM_OPEN
                	mov  ofn.Flags, OFN_FILEMUSTEXIST or \
                        OFN_PATHMUSTEXIST or OFN_LONGNAMES or\
                        OFN_EXPLORER or OFN_HIDEREADONLY
			invoke GetOpenFileName, ADDR ofn
			.if eax==TRUE
			  call hivdbe
   		          invoke InvalidateRect, hwnd, NULL,TRUE
			.endif				

		.elseif ax==IDM_SAVE
			mov ofn.Flags,OFN_LONGNAMES or\
                        OFN_EXPLORER or OFN_HIDEREADONLY
			invoke GetSaveFileName, ADDR ofn
			.if eax==TRUE
			pushad
			invoke CreateFile,ADDR nevpuffer,\
                        GENERIC_READ or GENERIC_WRITE ,\
                        FILE_SHARE_READ or FILE_SHARE_WRITE,\
                        NULL,CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,\
	              	NULL
			mov hsFile,eax
			invoke WriteFile,hsFile,vMemory,CODESIZE*2,ADDR SizeReadWrite,NULL
			invoke CloseHandle,hsFile
			popad
			.endif

		.elseif ax==IDM_EESAVE
			pushad
			invoke CreateFile,ADDR eepromfilenev,\
                        GENERIC_READ or GENERIC_WRITE ,\
                        FILE_SHARE_READ or FILE_SHARE_WRITE,\
                        NULL,CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,\
	              	NULL
			mov hsFile,eax
			mov eax,pMemory
			add eax, eepromcim
			mov ebx,eeprom_meret
			invoke WriteFile,hsFile,eax,ebx,ADDR SizeReadWrite,NULL
			invoke CloseHandle,hsFile
			popad

		.elseif ax==IDM_EELOAD
			pushad
			invoke CreateFile,ADDR eepromfilenev,\
        		GENERIC_READ or GENERIC_WRITE ,\
        		FILE_SHARE_READ or FILE_SHARE_WRITE,\
        		NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL

			mov hsFile,eax
			mov eax,pMemory
			add eax, eepromcim
			mov ebx,eeprom_meret
			invoke ReadFile,hsFile,eax,ebx,ADDR SizeReadWrite,NULL
			invoke CloseHandle,hsFile
			mov esi,pMemory
			add esi,eepromcim
			mov edi,vMemory
			add edi,eepromcim
			mov ecx,eeprom_meret
			rep movsb
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad

		.elseif ax==IDM_ABOUT
			pushad
		        invoke MessageBox, NULL,addr MessEnyem, addr MessTajek, MB_OK
			popad

		.elseif ax==IDM_IDENTIFY
			pushad
			call configbe
			popad

		.elseif ax==IDM_RESET
			pushad
			call resetel
			popad

		.elseif ax==IDM_REP
		        pushad
			call hivdbe
			call writeprogi
		        invoke InvalidateRect, hwnd, NULL,TRUE
		        popad

		.elseif ax==IDM_READ
			pushad
			mov readvan,1
			call readprogi
			call configbe
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad

		.elseif ax==IDM_VERIFY
			pushad
			mov readvan,0
			call readprogi
			mov errors,0
			mov esi,vMemory
			mov edi,pMemory
			mov ecx,CODESIZE
		innethasonlit:	
		        mov ax,word ptr [esi]
			cmp ax,word ptr [edi]
			je egyeznek
			inc errors
		     egyeznek:
			add esi,2
			add edi,2
			loop innethasonlit

			invoke Wordot_Betesz,errors
			mov esi,offset szam16cim
			mov edi,offset verifyerr
			mov eax,[esi]
			mov [edi],eax
			.if errors==0
			invoke SendMessage,hStatus,SB_SETTEXT,4,addr verifyok
			.else
			invoke SendMessage,hStatus,SB_SETTEXT,4,addr verifyerr
			.endif
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad

		.elseif ax==BULK_CHIP
			pushad
			mov ax,0f87h
			call bulkeras
			popad
		.elseif ax==BULK_DATEPROM
			pushad
			mov ax,0084h
			call bulkeras
			popad
		.elseif ax==BULK_BBLOCK
			pushad
			mov ax,0081h
			call bulkeras
			popad
		.elseif ax==BULK_CONFIG
			pushad
			mov ax,0082h
			call bulkeras
			popad
		.elseif ax==BULK_CODEPROM0
			pushad
			mov ax,0180h
			call bulkeras
			popad
		.elseif ax==BULK_CODEPROM1
			pushad
			mov ax,0280h
			call bulkeras
			popad
		.elseif ax==BULK_CODEPROM2
			pushad
			mov ax,0480h
			call bulkeras
			popad
		.elseif ax==BULK_CODEPROM3
			pushad
			mov ax,0880h
			call bulkeras
			popad

		.elseif ax==IDM_WRITE
			pushad
			call writeprogi
			invoke SendMessage,hwnd,WM_COMMAND,IDM_VERIFY,NULL
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad


		.elseif ax==IDM_EEREAD
			pushad
			 mov readvan,1
			 call readeeprom
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad

		.elseif ax==IDM_EEVERIFY
			pushad
			 mov readvan,0
			 call readeeprom

			mov errors,0
			mov esi,vMemory
			mov edi,pMemory
			add esi,eepromcim
			add edi,eepromcim
			mov ecx,eeprom_meret
		innethasit:	
		        mov al,byte ptr [esi]
			cmp al,byte ptr [edi]
			je egyek
			inc errors
		     egyek:
			add esi,1
			add edi,1
			loop innethasit

			invoke Wordot_Betesz,errors
			mov esi,offset szam16cim
			mov edi,offset verifyerr
			mov eax,[esi]
			mov [edi],eax
			.if errors==0
			invoke SendMessage,hStatus,SB_SETTEXT,4,addr verifyok
			.else
			invoke SendMessage,hStatus,SB_SETTEXT,4,addr verifyerr
			.endif
		        invoke InvalidateRect, hwnd, NULL,TRUE
			popad

		.elseif ax==IDM_EEWRITE
			pushad
			 call writeeeprom
			popad

		.elseif ax==IDM_FLAGS
			pushad
			invoke DialogBoxParam,hInstance, addr DlgName,NULL,OFFSET DlgProc,NULL
			popad
		.else
			invoke DestroyWindow, hWnd
		.endif
	.ELSE
		invoke DefWindowProc,hWnd,uMsg,wParam,lParam
		ret
	.ENDIF
	xor    eax,eax
 	ret
WndProc endp



hivdbe	Proc
	invoke CreateFile,ADDR nevpuffer,\
        GENERIC_READ or GENERIC_WRITE ,\
        FILE_SHARE_READ or FILE_SHARE_WRITE,\
        NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,\
        NULL
	mov hFile,eax
	invoke ReadFile,hFile,tMemory,HEXFILESIZE,ADDR SizeReadWrite,NULL
	invoke CloseHandle,hFile
	mov    eax,OFFSET nevpuffer
	movzx  edx,ofn.nFileOffset
	add    eax,edx
	invoke SendMessage,hStatus,SB_SETTEXT,2,eax	;file neve
		
	mov edi,pMemory		;program memory deletion
	mov ecx, CODESIZE
	mov ax,0ffffh
	rep stosw
	mov edi,pMemory		;data memory deletion
	add edi,eepromcim
	mov ecx, eeprom_meret
	mov al,0
	rep stosb

        mov vpozic,0
        invoke InvalidateRect, hwnd, NULL,TRUE
	invoke SetScrollPos,hwnd,SB_VERT,0,TRUE

	call hexfilefeldolgozo
	call Azonosit

	mov esi,pMemory
	mov edi,vMemory
	mov ecx,65535
	rep movsb	;copy into the verify memory

	mov eax, maxpiccim
	add eax,127
	shr eax,5
	mov blokkok,eax
	mov szepite,1
	mdd vpozic,holkezdodott
	invoke SetScrollPos,hwnd,SB_VERT,vpozic,TRUE
        invoke InvalidateRect, hwnd, NULL,TRUE

	ret
hivdbe endp


Hiba proc szovegcim:DWORD
	invoke Szamot_Betesz,Sorszam
	mov eax, dword ptr szam32cim+6
	mov dword ptr hibassorszam,eax
	invoke MessageBox, NULL, szovegcim, addr MessHiba, MB_OK
	invoke GlobalUnlock, hMemory1
	invoke GlobalFree, hMemory2 
	invoke PostQuitMessage,NULL
	ret	 
Hiba endp


hexfilefeldolgozo proc
	mov Sorszam,0	;hanyadik sor feldolgozasa
	mov esi,tMemory
	mdd fo_memoriamutato,pMemory
	mov sima_program,TRUE
	mov holkezdodott,eepromcim-1
	mov holvegzodott,0
	mov maxpiccim,0

  sorfeldolgozas:
	inc Sorszam
	mov checksum,0	;ellenorzoosszeg nullazasa

	cmp byte ptr [esi],':'
	je elejerendben
	invoke Hiba, addr nemkettospont
	mov eax,-1
	stc
	ret
  elejerendben:
	xor eax,eax
	inc esi
	call byteotbe
	jc hibret2
	mov ciklusszam,eax	;ervenyes program byteok szama
	call byteotbe
	jc hibret2
	mov bh,al
	call byteotbe
	jc hibret2
	mov bl,al
	xor eax,eax
	mov ax,bx
	mov progcim,eax
	cmp eax, 04000h
	jge ezbiznemprog
	cmp eax, maxpiccim
	jle ezbiznemprog
	mov maxpiccim,eax
     ezbiznemprog:
	call byteotbe
	jc hibret2
	mov modus,al
	cmp modus,0
	je rendes_progi	;normal ertekek
	cmp modus,1
	je nemciklus	;vege
	cmp modus,4
	je nagycimugras	;ugras a felso wordben, pl. konfigra valtas
	invoke Hiba, addr ismeretlen_modus
	jmp hibret2

 nagycimugras:
	call byteotbe
	jc hibret2
	mov bh,al
	call byteotbe
	jc hibret2
	mov bl,al
	cmp bx,0020H
	je IDwordcimet_ide
	cmp bx,0030H
	je konfigcimet_ide
	cmp bx,0000H
	je programcimet_ide
	invoke Hiba, addr ismeretlen_felsocim	;se konfig, de program
	jmp hibret2

programcimet_ide:
	mdd fo_memoriamutato,pMemory	;sima programmem
	mov sima_program,TRUE
	jmp nemciklus
 konfigcimet_ide: 
	mov fo_memoriamutato,offset konfigwordok
	mov sima_program,FALSE
	jmp nemciklus
 IDwordcimet_ide: 
	mov fo_memoriamutato,offset idwordok
	mov sima_program,FALSE
	jmp nemciklus

rendes_progi:
	mov ecx,ciklusszam
	cmp ciklusszam,0
	je nemciklus
 progmembeiro:
	call byteotbe
	jc hibret2
	mov edi,fo_memoriamutato	;konfig vagy pMemory
	add edi,progcim
	mov byte ptr [edi],al
	 .if sima_program==TRUE	;csak ha program van es NEM konfig!
		mov eax,progcim
		cmp eax,holkezdodott
		jge tovabbugrik
		mov holkezdodott,eax
	  tovabbugrik:	
		mov eax,progcim
		cmp eax,eepromcim	;eepromot nem vesszuk ide
		jge tovabbugrik2
		cmp eax,holvegzodott
		jle tovabbugrik2
		mov holvegzodott,eax
	  tovabbugrik2:
	 .endif
	inc progcim
 loop progmembeiro

nemciklus:
	xor ecx,ecx
	mov cl, checksum
	xor eax,eax
	mov al,0
	sub al, cl
	mov cl,al
	call byteotbe
	jc hibret2
	cmp al,cl
	je checkrendben

	invoke HexaSzamot_Betesz,checksum
	invoke Hiba, addr szamcim
	invoke Hiba, addr nemchecksum
	stc
	ret

checkrendben:
	add esi,2
	cmp modus,1
	je progivege
	jmp sorfeldolgozas
progivege:
	invoke HexaSzamot_Betesz, holkezdodott
	invoke SendMessage,hStatus,SB_SETTEXT,0,addr szamcim+4
	invoke HexaSzamot_Betesz, holvegzodott
	invoke SendMessage,hStatus,SB_SETTEXT,1,addr szamcim+4
	clc
	ret
hibret2:
	stc
	ret

hexellenor:
	push esi
	push edi
	mov esi,offset _hextbl
	mov edi,0
     kishexcik:
	cmp al,byte ptr [esi]
	je hexrendben
	inc esi
	inc edi
	cmp edi,16
	jne kishexcik
	invoke Hiba,addr nemhexaszam
	pop edi
	pop esi
	stc
	ret
hexrendben:
	xor eax,eax
	mov eax,edi
	pop edi	
	pop esi
	clc
	ret

byteotbe:
	mov al,byte ptr [esi]
	call hexellenor
	jc hibret0
	shl al,4
	mov ideghex,al
	inc esi
	mov al,byte ptr [esi]
	call hexellenor
	jc hibret0
	add ideghex,al
	xor ah,ah
	mov al,ideghex
	clc
	add checksum,al
	clc
	inc esi
	clc
	ret
hibret0:
	stc
	ret	

hexfilefeldolgozo endp


Szamot_Betesz proc szam:DWORD
        LOCAL eloszor:BYTE
	pushad
	mov eax,szam
 	mov eloszor,0
	mov ecx,10
	mov esi,0
	mov edi,0
   dsp32:
	xor edx,edx
	mov ebx,osztok[esi]
	div ebx
	add al,'0'
	cmp szepite,1
	jne dsp33
	cmp al,'0'
	jne dsp34
	cmp eloszor,1
	je dsp33
	cmp ecx,1
	je dsp33
	mov al,' '
	jmp short dsp33
    dsp34:
	mov eloszor,1
   dsp33:
	mov szam32cim[edi],al
	inc edi
	add esi,4
	mov eax,edx
	loop dsp32
	popad
	mov eax,offset szam32cim
	mov szepite,0
	ret
Szamot_Betesz endp

HexaSzamot_Betesz proc hexaszam:DWORD
	pushad
	mov edx,hexaszam
	mov ecx,8
	mov ebx, offset _hextbl
	mov edi,0
 szamfely:
	rol edx,4
	mov al,dl
	and al,0fh
	xlat
	mov byte ptr szamcim[edi],al
	inc edi
	loop szamfely
	popad
	mov eax,offset szamcim
	ret
HexaSzamot_Betesz endp

Wordot_Betesz proc hexaszam2:DWORD
	pushad
	mov edx,hexaszam2
	mov ecx,4
	mov ebx,offset _hextbl
	mov edi,0
  zamfej2:
	rol dx,4
	mov al,dl
	and al,0fh
	xlat
	mov byte ptr szam16cim[edi],al
	inc edi
	loop zamfej2
	popad
	mov eax,offset szam16cim
	ret
Wordot_Betesz endp


warjal proc
	push eax
	mov eax,6000000
  war1:
	dec eax
	jne war1
	pop eax
	ret
warjal endp



;-----------------primitivek jonnek

configbe proc
	pushad
	mov kezdocim,3ffffeh	;ID word
	call kezdocimberako
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke ReadFile,hComm,addr usbpuffer,64,ADDR SizeReadWrite,NULL

	mov kezdocim,300000h	;Config words
	call kezdocimberako
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke ReadFile,hComm,addr usbpuffer+2,64,ADDR SizeReadWrite,NULL

	mov al,usbpuffer
	mov byte ptr idword,al
	mov al,usbpuffer+1
	mov byte ptr idword+1,al
	mov esi,offset usbpuffer+2
	mov edi,offset konfigwordok
	mov ecx,7
	rep movsw

	mov kezdocim,200000h	;IDwords
	call kezdocimberako
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke ReadFile,hComm,addr usbpuffer,64,ADDR SizeReadWrite,NULL
	mov esi,offset usbpuffer
	mov edi,offset idwordok
	mov ecx,8
	rep movsb

	call Azonosit

	popad
	ret
configbe endp

Azonosit proc
	mov ax,idword	;a mask hasznalata
	and ax,0ffe0h
	mov idword,ax
	
	mov esi,0
    azoncik:
	mov ax,word ptr chiptabla[esi]
	cmp ax,0
	je azoni
	cmp ax,idword
	je megazon
	add esi,chipsor_hossza
	jmp azoncik
 
   megazon:
	xor eax,eax
	mov ax,word ptr chiptabla+4[esi]	;writeblokk merete
	mov irando_blokkmeret,eax
	xor eax,eax
	mov ax,word ptr chiptabla+6[esi]        ;eeprom merete
	mov eeprom_meret,eax

	xor eax,eax
	mov ax,word ptr chiptabla+2[esi]	;tipusjelzese, szama
	invoke Szamot_Betesz,eax
	mov eax, dword ptr szam32cim+6
	mov dword ptr konfigword+11,eax

  azoni:
	invoke Szamot_Betesz,irando_blokkmeret
	invoke SendMessage,hStatus,SB_SETTEXT,0,addr szam32cim+7
	invoke Szamot_Betesz,eeprom_meret
	invoke SendMessage,hStatus,SB_SETTEXT,1,addr szam32cim+5

	mov ciklusa,7
	mov esi,0
	mov edi,18
    ujbrak:
	movzx eax, word ptr konfigwordok[esi]
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword[edi],eax	
	add edi,5
	add esi,2
	dec ciklusa
	jne ujbrak

	movzx eax, word ptr idword
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword,eax	

	invoke SendMessage,hStatus,SB_SETTEXT,3,addr konfigword

	mov ciklusa,4
	mov esi,0
	mov edi,10
    ujbreak:
	movzx eax, word ptr idwordok[esi]
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr IDwords[edi],eax	
	add edi,5
	add esi,2
	dec ciklusa
	jne ujbreak
	invoke SendMessage,hStatus,SB_SETTEXT,6,addr IDwords

	ret	
Azonosit endp


readprogi proc

        pushad
	mov kezdocim,EZACIM
	mov piccim,0
 
cicfej:
	call kezdocimberako
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke ReadFile,hComm,addr usbpuffer,64,ADDR SizeReadWrite,NULL

	mov esi,offset usbpuffer
	mov edi,vMemory
	add edi,piccim
	mov ecx,64
	rep movsb

	invoke Wordot_Betesz,piccim
	mov esi,offset szam16cim
	mov eax,[esi]
	mov dword ptr Address+6,eax
	invoke SendMessage,hStatus,SB_SETTEXT,5,addr Address

	add piccim,64
	add kezdocim,64

	cmp piccim,CODESIZE*2
	jle cicfej

	.if readvan == 1	; copy also into progmem
		mov esi,vMemory
		mov edi,pMemory
		mov ecx,CODESIZE
		rep movsw
	.endif

	popad
	ret

readprogi endp


resetel proc
	mov adasbyteok,reset_command
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	ret
resetel endp


bulkeras proc
	and eax,0ffffh
	mov kezdocim,eax
	call kezdocimberako
	mov eax,irando_blokkmeret
	mov adasbyteok+1,al
	mov adasbyteok,bulk_command
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	ret
bulkeras endp


writeprogi proc
	cmp irando_blokkmeret,0
	je nincsispic
	
	mov eax, holvegzodott
	cmp eax,0
	 je nincsisprogi
	add eax,127
	sub eax, holkezdodott
	xor edx,edx
	div irando_blokkmeret
	mov blokkok,eax

	mov eax,holkezdodott
    .if eax == 0
		invoke SendMessage,hwnd,WM_COMMAND,BULK_BBLOCK,NULL

	mov eax,holvegzodott
	  .if eax >= 0800h
		invoke SendMessage,hwnd,WM_COMMAND,BULK_CODEPROM0,NULL
	  .endif

	  .if eax >= 1000h
		invoke SendMessage,hwnd,WM_COMMAND,BULK_CODEPROM1,NULL
	  .endif
	  .if eax >= 2000h
		invoke SendMessage,hwnd,WM_COMMAND,BULK_CODEPROM2,NULL
	  .endif
   .elseif eax == 2000h
		invoke SendMessage,hwnd,WM_COMMAND,BULK_CODEPROM1,NULL
   .endif	

	call warakozo
	call warakozo
	call warakozo

	mov kezdocim,EZACIM	;ahova irja majd a PIC-be, default 0
	mov honnanveszi,0		;ahonnan veszi az adatot
	mov eax,blokkok
	cmp eax,0
	je nemprogizik
	mov aciklo,eax	;mert ennyi blokkot szamoltam a programbol
irofeju:	
	call kezdocimberako
	mov esi,pMemory
	add esi,honnanveszi
	mov edi, offset adasbyteok+4
	mov ecx,irando_blokkmeret
	rep movsb

	mov adasbyteok, write_command
	invoke WriteFile,hComm,addr adasbyteok,68,ADDR SizeReadWrite,NULL	;32+4 plusz tartalek
	call warakozo

	invoke Wordot_Betesz,kezdocim
	mov esi,offset szam16cim
	mov eax,[esi]
	mov dword ptr Address+6,eax
	invoke SendMessage,hStatus,SB_SETTEXT,5,addr Address

	mov eax,irando_blokkmeret
	add kezdocim,eax
	add honnanveszi,eax
	dec aciklo
	jne irofeju

   nemprogizik:
	ret

nincsisprogi:
        invoke MessageBox, NULL,addr hiba_nincsprogi, addr hibafejlec_nincsprogi, MB_OK
	ret
nincsispic:
        invoke MessageBox, NULL,addr hiba_nincspic, addr hibafejlec_nincsprogi, MB_OK
	ret




writeprogi endp


readeeprom proc
	LOCAL datamutato:DWORD,picdatamutato:WORD

        pushad
	mdd datamutato, vMemory
	add datamutato, eepromcim

	mov kezdocim,EZACIM
	mov piccim,0
 
eeofej:
	call kezdocimberako
	mov adasbyteok, eepromread_command
	invoke WriteFile,hComm,addr adasbyteok,5,ADDR SizeReadWrite,NULL
	call warakozo
	invoke ReadFile,hComm,addr usbpuffer,64,ADDR SizeReadWrite,NULL

	mov esi,offset usbpuffer
	mov edi,datamutato
	add edi,piccim
	mov ecx,64
	rep movsb

	invoke Wordot_Betesz,piccim
	mov esi,offset szam16cim
	mov eax,[esi]
	mov dword ptr Address+6,eax
	invoke SendMessage,hStatus,SB_SETTEXT,5,addr Address

	add piccim,64
	add kezdocim,64
	mov eax,eeprom_meret
	cmp piccim,eax
	jle eeofej

	.if readvan == 1	; copy also into progmem
		mov esi,vMemory
		add esi, eepromcim
		mov edi,pMemory
		add edi, eepromcim
		mov ecx,eeprom_meret
		rep movsb
	.endif

	popad
	ret
readeeprom endp


writeeeprom proc
	LOCAL datamutato:DWORD,picdatamutato:WORD

	mov kezdocim,0
	mov piccim,0
 
eeifej:
	call kezdocimberako
	mov esi,pMemory
	add esi,eepromcim
	add esi,kezdocim
	mov edi,offset adasbyteok+4
	mov ecx,EEPROMBLOKK
	rep movsb

	mov adasbyteok, eepromwrite_command
	mov eax,EEPROMBLOKK
	add eax,4
	invoke WriteFile,hComm,offset adasbyteok,eax,ADDR SizeReadWrite,NULL
	call warakozo
	call warakozo

	invoke Wordot_Betesz,piccim
	mov esi,offset szam16cim
	mov eax,[esi]
	mov dword ptr Address+6,eax
	invoke SendMessage,hStatus,SB_SETTEXT,5,addr Address

	add piccim,EEPROMBLOKK
	add kezdocim,EEPROMBLOKK

	mov eax,eeprom_meret
	cmp piccim,eax
	jl eeifej

	ret

writeeeprom endp

writeconfig proc
	mov esi, 0
 confirofej:
	mov al, byte ptr konfigwordok[esi]
	mov adasbyteok+4[esi],al
	inc esi
	cmp esi,14
	jne confirofej

	mov adasbyteok, configwrite_command
	invoke WriteFile,hComm,offset adasbyteok,20,ADDR SizeReadWrite,NULL
	call warakozo

	ret
writeconfig endp

writeidconfig proc

	mov esi, 0
 idconfirofej:
	mov al, byte ptr idwordok[esi]
	mov adasbyteok+4[esi],al
	inc esi
	cmp esi,8
	jne idconfirofej

	mov adasbyteok, idwrite_command
	invoke WriteFile,hComm,offset adasbyteok,16,ADDR SizeReadWrite,NULL
	call warakozo

	ret
writeidconfig endp

;------------------------------------------------------------------------------

DlgProc PROC hWnd:HWND,iMsg:DWORD,wParam:WPARAM, lParam:LPARAM

.if iMsg==WM_INITDIALOG
	pushad
	invoke Szepen_kijelzi,hWnd	;kiirja a flageket
	popad
.elseif iMsg==WM_CLOSE
	invoke EndDialog,hWnd,NULL
.elseif iMsg==WM_COMMAND
	mov eax,wParam
	mov edx,eax
	shr edx,16
	.if dx==BN_CLICKED
		.if eax==FLAG_LOAD
                	mov  cofn.Flags, OFN_FILEMUSTEXIST or \
                        OFN_PATHMUSTEXIST or OFN_LONGNAMES or\
                        OFN_EXPLORER or OFN_HIDEREADONLY
			invoke GetOpenFileName, ADDR cofn
			.if eax==TRUE
                	invoke CreateFile,ADDR cpuffer,\
		        GENERIC_READ, FILE_SHARE_READ,\
		        NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
			mov hFile,eax
			invoke ReadFile,hFile,addr konfigwordok,16,ADDR SizeReadWrite,NULL
			invoke CloseHandle,hFile
			invoke Szepen_kijelzi,hWnd	;kiirja a flageket
                	.endif				

		.elseif eax==FLAG_SAVE
			invoke Szepen_beirja,hWnd
			mov cofn.Flags,OFN_LONGNAMES or\
                        OFN_EXPLORER or OFN_HIDEREADONLY
			invoke GetSaveFileName, ADDR cofn
			.if eax==TRUE
			pushad
			invoke CreateFile,ADDR cpuffer,\
                        GENERIC_WRITE ,FILE_SHARE_WRITE,\
                        NULL,CREATE_NEW,FILE_ATTRIBUTE_ARCHIVE,NULL
			mov hsFile,eax
			invoke WriteFile,hsFile,addr konfigwordok,16,ADDR SizeReadWrite,NULL
			invoke CloseHandle,hsFile
			popad
			.endif

		.elseif eax==FLAG_CANCEL
			pushad
			mov dialogstate,FALSE
			invoke SendMessage,hWnd,WM_CLOSE,FALSE,FALSE
			popad
		.elseif eax==FLAG_OK
			pushad
 			invoke Szepen_beirja,hWnd
			invoke SendMessage,hStatus,SB_SETTEXT,3,offset konfigword
			call writeconfig
			call writeidconfig

			invoke SendMessage,hWnd,WM_CLOSE,FALSE,FALSE
			popad
       		.endif
	.endif		   
.else
	mov eax,FALSE
	ret
.endif
	invoke DefWindowProc,hWnd,iMsg,wParam,lParam
	ret

DlgProc endp


Szepen_kijelzi proc  hWnd:DWORD
	xor eax,eax
	mov al,byte ptr konfigwordok+1	;oscill+ieso+fcmen
	and al,01000000b
	shr eax,6
	invoke CheckDlgButton,hWnd,FCMEN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+1	;oscill+ieso+fcmen
	and al,10000000b
	shr eax,7
	invoke CheckDlgButton,hWnd,IESO,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+1	;oscill+ieso+fcmen
	and al,1111b
	mov esi,eax
	xor eax,eax
	mov al,fosctabla[esi]
	add eax,FOSC0
	invoke CheckRadioButton,hWnd,FOSC0,FOSC0+11,eax

	xor eax,eax
	mov al,byte ptr konfigwordok	;usb+cpudiv+clkdiv
	and al,00100000b
	shr eax,5	
	add eax,USBDIV
	invoke CheckRadioButton,hWnd,USBDIV,USBDIV+1,eax
	xor eax,eax
	mov al,byte ptr konfigwordok	;usb+cpudiv+clkdiv
	and al,00011000b
	shr eax,3
	add eax,CPUDIV0
	invoke CheckRadioButton,hWnd,CPUDIV0,CPUDIV0+3,eax
	xor eax,eax
	mov al,byte ptr konfigwordok	;usb+cpudiv+clkdiv
	and al,111b
	add eax,PLLDIV0
	invoke CheckRadioButton,hWnd,PLLDIV0,PLLDIV0+7,eax


	xor eax,eax
	mov al,byte ptr konfigwordok+2	;vregen+borv+boren+pwrten
	and al,00100000b
	shr eax,5	
	invoke CheckDlgButton,hWnd,VREGEN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+2	;vregen+borv+boren+pwrten
	and al,1b
	xor al,1
	invoke CheckDlgButton,hWnd,PWRTEN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+2	;vregen+borv+boren+pwrten
	and al,00011000b
	shr eax,3	
	add eax,BORV0
	invoke CheckRadioButton,hWnd,BORV0,BORV0+3,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+2	;vregen+borv+boren+pwrten
	and al,00000110b
	shr eax,1	
	add eax,BOREN0
	invoke CheckRadioButton,hWnd,BOREN0,BOREN0+3,eax

	xor eax,eax
	mov al,byte ptr konfigwordok+3	;wdten+wdtps0
	and al,1b
	invoke CheckDlgButton,hWnd,WDTEN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+3	;wdten+wdtps0
	and al,00011110b
	shr eax,1	
	add eax,WDTPS0
	invoke CheckRadioButton,hWnd,WDTPS0,WDTPS0+15,eax

	xor eax,eax
	mov al,byte ptr konfigwordok+5	;mclre+lpt1osc+pbaden+ccpmx
	and al,10000000b
	shr eax,7
	invoke CheckDlgButton,hWnd,MCLRE,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+5	;mclre+lpt1osc+pbaden+ccpmx
	and al,100b
	shr eax,2
	invoke CheckDlgButton,hWnd,LPT1OSC,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+5	;mclre+lpt1osc+pbaden+ccpmx
	and al,10b
	shr eax,1
	invoke CheckDlgButton,hWnd,PBADEN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+5	;mclre+lpt1osc+pbaden+ccpmx
	and al,1b
	invoke CheckDlgButton,hWnd,CCP2MX,eax

	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,10000000b
	shr eax,7
	xor al,1
	invoke CheckDlgButton,hWnd,DEBUG,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,01000000b
	shr eax,6
	invoke CheckDlgButton,hWnd,XINST,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,1000b
	shr eax,3
	invoke CheckDlgButton,hWnd,ICPORT,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,100b
	shr eax,2
	invoke CheckDlgButton,hWnd,LVP,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,1b
	invoke CheckDlgButton,hWnd,STVREN,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+6	;debug+xinst+bbsiz+icport+lvp+stvren
	and al,00110000b
	shr eax,4
	add eax,BBSIZ0
	invoke CheckRadioButton,hWnd,BBSIZ0,BBSIZ0+3,eax

	xor eax,eax
	mov al,byte ptr konfigwordok+8	;codeprot
	and al,1000b
	shr eax,3
	invoke CheckDlgButton,hWnd,CP3,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+8	;codeprot
	and al,100b
	shr eax,2
	invoke CheckDlgButton,hWnd,CP2,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+8	;codeprot
	and al,10b
	shr eax,1
	invoke CheckDlgButton,hWnd,CP1,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+8	;codeprot
	and al,1b
	invoke CheckDlgButton,hWnd,CP0,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+9	;codeprot
	and al,10000000b
	shr eax,7
	invoke CheckDlgButton,hWnd,CPD,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+9	;codeprot
	and al,1000000b
	shr eax,6
	invoke CheckDlgButton,hWnd,CPB,eax


	xor eax,eax
	mov al,byte ptr konfigwordok+10	;writeprot
	and al,1000b
	shr eax,3
	invoke CheckDlgButton,hWnd,WRT3,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+10	;writeprot
	and al,100b
	shr eax,2
	invoke CheckDlgButton,hWnd,WRT2,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+10	;writeprot
	and al,10b
	shr eax,1
	invoke CheckDlgButton,hWnd,WRT1,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+10	;writeprot
	and al,1b
	invoke CheckDlgButton,hWnd,WRT0,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+11	;writeprot
	and al,10000000b
	shr eax,7
	invoke CheckDlgButton,hWnd,WRTD,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+11	;writeprot
	and al,1000000b
	shr eax,6
	invoke CheckDlgButton,hWnd,WRTB,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+11	;writeprot
	and al,100000b
	shr eax,5
	invoke CheckDlgButton,hWnd,WRTC,eax


	xor eax,eax
	mov al,byte ptr konfigwordok+12	;tableprot
	and al,1000b
	shr eax,3
	invoke CheckDlgButton,hWnd,EBTR3,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+12	;tableprot
	and al,100b
	shr eax,2
	invoke CheckDlgButton,hWnd,EBTR2,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+12	;tableprot
	and al,10b
	shr eax,1
	invoke CheckDlgButton,hWnd,EBTR1,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+12	;tableprot
	and al,1b
	invoke CheckDlgButton,hWnd,EBTR0,eax
	xor eax,eax
	mov al,byte ptr konfigwordok+13	;tableprot
	and al,01000000b
	shr eax,6
	invoke CheckDlgButton,hWnd,EBTRB,eax
	ret
Szepen_kijelzi endp


Szepen_beirja proc hWnd:DWORD
	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,USBDIV+1
	.if eax==BST_CHECKED
	or idegkonfig,100000b
	.endif

	mov ecx,PLLDIV0 	;clkdiv
     momo1:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, PLLDIV0
	or idegkonfig,cl
	jmp momo2
	.endif
	inc ecx
	cmp ecx,PLLDIV0+9
	jne momo1		
    momo2:

	mov ecx,CPUDIV0
     momo3:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, CPUDIV0
	shl ecx,3
	or idegkonfig,cl
	jmp momo4
	.endif
	inc ecx
	cmp ecx,CPUDIV0+4		
	jne momo3
    momo4:

	mov al,idegkonfig	;konfig+0
	mov byte ptr konfigwordok,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,IESO
	.if eax==BST_CHECKED
	or idegkonfig,10000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,FCMEN
	.if eax==BST_CHECKED
	or idegkonfig,1000000b
	.endif

	mov ecx,FOSC0
     momo5:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, FOSC0

	push esi
	and cl,1111b
	mov esi,0
  kereskon:
	cmp fosctabla[esi],cl
	je megvagy
	inc esi
	cmp esi,16
	jne kereskon
  megvagy:
        mov ecx,esi
	pop esi

	or idegkonfig,cl
	jmp momo6
	.endif
	inc ecx
	cmp ecx,FOSC0+16		
	jne momo5
    momo6:

	mov al,idegkonfig	;konfig +1
	mov byte ptr konfigwordok+1,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,VREGEN
	.if eax==BST_CHECKED
	or idegkonfig,100000b
	.endif
	invoke IsDlgButtonChecked,hWnd,PWRTEN
	.if eax==BST_UNCHECKED
	or idegkonfig,1b
	.endif

	mov ecx,BORV0
     momo7:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, BORV0
	shl ecx, 3
	or idegkonfig,cl
	jmp momo8
	.endif
	inc ecx
	cmp ecx,BORV0+4		
	jne momo7
    momo8:

	mov ecx,BOREN0
     momo9:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, BOREN0
	shl ecx, 1
	or idegkonfig,cl
	jmp momo10
	.endif
	inc ecx
	cmp ecx,BOREN0+4		
	jne momo9
    momo10:

	mov al,idegkonfig	;konfig +2
	mov byte ptr konfigwordok+2,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,WDTEN
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif

	mov ecx,WDTPS0
     momo11:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, WDTPS0
	shl ecx, 1
	or idegkonfig,cl
	jmp momo12
	.endif
	inc ecx
	cmp ecx,WDTPS0+16		
	jne momo11
    momo12:

	mov al,idegkonfig	;konfig +3
	mov byte ptr konfigwordok+3,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,MCLRE
	.if eax==BST_CHECKED
	or idegkonfig,10000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,LPT1OSC
	.if eax==BST_CHECKED
	or idegkonfig,100b
	.endif
	invoke IsDlgButtonChecked,hWnd,PBADEN
	.if eax==BST_CHECKED
	or idegkonfig,10b
	.endif
	invoke IsDlgButtonChecked,hWnd,CCP2MX
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif
	mov al,idegkonfig	;konfig +5
	mov byte ptr konfigwordok+5,al

	mov idegkonfig,0
	invoke IsDlgButtonChecked,hWnd,DEBUG
	.if eax==BST_UNCHECKED	;megforditottam, mert a disable az 1
	or idegkonfig,10000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,XINST
	.if eax==BST_CHECKED
	or idegkonfig,1000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,ICPORT
	.if eax==BST_CHECKED
	or idegkonfig,100000b
	.endif
	invoke IsDlgButtonChecked,hWnd,LVP
	.if eax==BST_CHECKED
	or idegkonfig,100b
	.endif
	invoke IsDlgButtonChecked,hWnd,STVREN
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif

	mov ecx,BBSIZ0
     momo13:
	push ecx
	invoke IsDlgButtonChecked,hWnd,ecx
	pop ecx
	.if eax==BST_CHECKED
	sub ecx, BBSIZ0
	shl ecx, 4
	or idegkonfig,cl
	jmp momo14
	.endif
	inc ecx
	cmp ecx,BBSIZ0+4		
	jne momo13
    momo14:

	mov al,idegkonfig	;konfig +6
	mov byte ptr konfigwordok+6,al

	mov idegkonfig,0
	invoke IsDlgButtonChecked,hWnd,CP3
	.if eax==BST_CHECKED
	or idegkonfig,1000b
	.endif
	invoke IsDlgButtonChecked,hWnd,CP2
	.if eax==BST_CHECKED
	or idegkonfig,100b
	.endif
	invoke IsDlgButtonChecked,hWnd,CP1
	.if eax==BST_CHECKED
	or idegkonfig,10b
	.endif
	invoke IsDlgButtonChecked,hWnd,CP0
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif
	mov al,idegkonfig	;konfig +8
	mov byte ptr konfigwordok+8,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,CPD
	.if eax==BST_CHECKED
	or idegkonfig,10000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,CPB
	.if eax==BST_CHECKED
	or idegkonfig,1000000b
	.endif
	mov al,idegkonfig	;konfig +9
	mov byte ptr konfigwordok+9,al

	mov idegkonfig,0

	mov idegkonfig,0
	invoke IsDlgButtonChecked,hWnd,WRT3
	.if eax==BST_CHECKED
	or idegkonfig,1000b
	.endif
	invoke IsDlgButtonChecked,hWnd,WRT2
	.if eax==BST_CHECKED
	or idegkonfig,100b
	.endif
	invoke IsDlgButtonChecked,hWnd,WRT1
	.if eax==BST_CHECKED
	or idegkonfig,10b
	.endif
	invoke IsDlgButtonChecked,hWnd,WRT0
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif
	mov al,idegkonfig	;konfig +10
	mov byte ptr konfigwordok+10,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,WRTD
	.if eax==BST_CHECKED
	or idegkonfig,10000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,WRTB
	.if eax==BST_CHECKED
	or idegkonfig,1000000b
	.endif
	invoke IsDlgButtonChecked,hWnd,WRTC
	.if eax==BST_CHECKED
	or idegkonfig,100000b
	.endif
	mov al,idegkonfig	;konfig +11
	mov byte ptr konfigwordok+11,al

	mov idegkonfig,0
	invoke IsDlgButtonChecked,hWnd,EBTR3
	.if eax==BST_CHECKED
	or idegkonfig,1000b
	.endif
	invoke IsDlgButtonChecked,hWnd,EBTR2
	.if eax==BST_CHECKED
	or idegkonfig,100b
	.endif
	invoke IsDlgButtonChecked,hWnd,EBTR1
	.if eax==BST_CHECKED
	or idegkonfig,10b
	.endif
	invoke IsDlgButtonChecked,hWnd,EBTR0
	.if eax==BST_CHECKED
	or idegkonfig,1b
	.endif
	mov al,idegkonfig	;konfig +12
	mov byte ptr konfigwordok+12,al

	mov idegkonfig,0

	invoke IsDlgButtonChecked,hWnd,EBTRB
	.if eax==BST_CHECKED
	or idegkonfig,1000000b
	.endif
	mov al,idegkonfig	;konfig +13
	mov byte ptr konfigwordok+13,al
	ret

;ez csak sallang	
	mov ciklusa,7
	mov esi,0
	mov edi,18
    rjbrak:
	movzx eax, word ptr konfigwordok[esi]
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword[edi],eax	
	add edi,5
	add esi,2
	dec ciklusa
	jne rjbrak
	movzx eax, word ptr idword
	invoke Wordot_Betesz,eax
	mov eax, dword ptr szam16cim
	mov dword ptr konfigword,eax	
        ret
Szepen_beirja endp


IsWinNT proc
    LOCAL vi:OSVINFO     ; Version Info Struct
    LOCAL pvi:DWORD      ; Pointer To vi

    lea eax, vi                         ; vi's address into eax
    mov ecx, SizeOf vi                  ; sizeof vi struct into ecx
    mov (OSVINFO PTR [eax]).dwOSVersionInfoSize, ecx    ; copy size to element
    mov pvi, eax                        ; ptr to vi into pvi
    invoke GetVersionEx,pvi             ; get version API call
    cmp eax, 0                          ; See if we got an error
    je  IsWinNtError
    mov eax, pvi                        ; address back into eax
    mov ecx, (OSVINFO PTR [eax]).dwPlatformId  ; Platform ID into ecx
    cmp ecx, VER_PLATFORM_WIN32_NT      ; see if its an NT platform
    je  IsWinNtTrue
    mov NT_e, 0                          ; Return a Zero since its NOT NT
    ret
    IsWinNtTrue:
    mov NT_e, 1                          ; Return 1 since it IS NT
    ret
    IsWinNtError:
    mov NT_e, 2                          ; Return 2 indicating an Error
    ret
IsWinNT endp


warakozo:
	mov ecx,300000
  hehe:
	nop
	nop
	loop hehe
	ret


kezdocimberako:
	mov adasbyteok,read_command

	mov eax,kezdocim
	shr eax,16
	and eax,0ffh
	mov adasbyteok+1,al
	mov eax,kezdocim
	shr eax,8
	and eax,0ffh
	mov adasbyteok+2,al
	mov eax,kezdocim
	and eax,0ffh
	mov adasbyteok+3,al
	ret

end start

